MySQL必须绑定内网IP(如192.168.10.5)并重启服务,禁用127.0.0.1;压测用户需用mysql_native_password认证、限定host范围、手动建库授权;调优max_connections、innodb_buffer_pool_size等参数;本地压测应使用socket文件直连。

MySQL服务必须绑定内网IP,不能用127.0.0.1或localhost
内网压测环境若还绑127.0.0.1,其他机器根本连不上——哪怕你开了firewalld放行3306端口也没用。MySQL默认只监听本地回环,必须显式改my.cnf里的bind-address为实际内网IP(比如192.168.10.5)。
改完不重启=白改:systemctl restart mysqld是硬性要求,systemctl reload mysqld不生效。
- 别信“我改了配置文件但连得上”,先
netstat -tlnp | grep :3306确认监听的是*:3306还是127.0.0.1:3306 - MySQL 8.0+默认认证插件是
caching_sha2_password,sysbench 1.0.x不认,建压测用户时必须加IDENTIFIED WITH mysql_native_password - 账号host别写
%,用192.168.10.%更安全,也避免SELinux或防火墙策略松动时被越界访问
sysbench prepare失败:不是权限错,是库根本不存在
sysbench oltp_read_write ... prepare报Unknown database 'sbtest',90%的情况是以为“sysbench会自动建库”,其实它不会。它只负责往已有库里建表。
必须手动创建库并授权:
- 先执行
mysql -u root -p -e "CREATE DATABASE sbtest CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" - 再建用户:
CREATE USER 'sbuser'@'192.168.10.%' IDENTIFIED WITH mysql_native_password BY 'pass123'; - 最后授库级权限:
GRANT ALL ON sbtest.* TO 'sbuser'@'192.168.10.%'; FLUSH PRIVILEGES;
漏掉FLUSH PRIVILEGES,新权限不会立即生效;只给sbtest.*权限,别给*全局权限——压测账号不需要DROP DATABASE或SHUTDOWN。
并发数上不去?先查MySQL自身的max_connections和InnoDB锁争用
你设了--threads=256,但SHOW PROCESSLIST只看到三四十个连接,问题大概率不在sysbench,而在MySQL服务端。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
关键配置项必须调:
-
max_connections至少设为压测线程数的2倍(如256线程,就设512以上),否则连接直接被拒绝 -
innodb_buffer_pool_size必须占物理内存50%–70%,低于2G会导致频繁刷盘,TPS断崖下跌 -
innodb_log_file_size建议≥1G,小日志(如默认48M)会强制高频checkpoint,IO瓶颈假象严重
改完配置必须重启MySQL,且要验证是否生效:mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"。
本地压测别走TCP,强制用socket文件减少干扰
在压测机本机跑sysbench,却用--mysql-host=127.0.0.1,等于主动引入Linux网络栈开销:连接队列、TIME_WAIT、net.core.somaxconn限制全会参与进来,测的不是MySQL,是你的内核参数。
正确做法是绕过TCP,直连socket:
- 先查MySQL socket路径:
mysql -u root -p -e "SHOW VARIABLES LIKE 'socket';",通常是/var/lib/mysql/mysql.sock - sysbench命令中去掉
--mysql-host和--mysql-port,换成--mysql-socket=/var/lib/mysql/mysql.sock - 这样sysbench进程和mysqld进程直接通过Unix domain socket通信,零网络延迟、无上下文切换损耗
这个细节很多人忽略,但它能让相同硬件下的QPS提升15%–30%,尤其在高并发短连接场景下最明显。

















