直接用 sysbench 跑一次标准 OLTP 读写压测可快速验证 MySQL 是否能正常承接基础并发负载,需先确认 sysbench 支持 mysql 驱动、手动创建数据库与专用用户、指定正确 Lua 脚本路径及参数,并用 2 线程 30 秒最小配置验证链路。

直接用 sysbench 跑一次标准 OLTP 读写压测,就能快速验证 MySQL 安装后是否可正常承接基础并发负载。不建议跳过这步——很多“能连上、能建表”的实例,在并发稍高时就卡死或报错,问题出在默认配置、权限、网络或 sysbench 本身适配性上。
确认 sysbench 已正确链接 MySQL 驱动
常见错误是 sysbench 编译时没找到 libmysqlclient.so,导致运行时报 undefined symbol: mysql_init 或直接提示 cannot load driver 'mysql'。
- 检查是否支持 mysql:运行
sysbench --help | grep -A5 "db-driver",输出中应含mysql - 若无 mysql 支持,重装时需指定路径,例如 MySQL 装在
/usr/local/mysql:./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib - 验证动态库加载:
ldd $(which sysbench) | grep mysql应显示有效路径,而非not found
准备数据前必须手动创建数据库并授权
sysbench 的 prepare 命令**不会自动建库**,也不会用 root 密码免密登录——它严格依赖你传入的账号权限。最常踩的坑是:命令执行成功但表没生成,或报 Access denied for user。
- 先用 MySQL 客户端登录,执行:
CREATE DATABASE sbtest DEFAULT CHARSET utf8mb4; - 创建专用测试用户(避免用 root):
CREATE USER 'sbtest'@'%' IDENTIFIED BY 'sbpass123'; GRANT ALL ON sbtest.* TO 'sbtest'@'%'; FLUSH PRIVILEGES; - 准备数据命令中必须显式指定
--mysql-db=sbtest和对应账号,例如:sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-user=sbtest --mysql-password=sbpass123 --mysql-db=sbtest --tables=4 --table-size=10000 prepare
跑通最小可行压测:用 2 线程 + 30 秒快速验证
别一上来就设 --threads=64 或压 10 分钟。先用极简参数确认链路通、SQL 执行无语法错误、事务能提交。
- 命令示例(注意路径和脚本名因版本而异,1.0+ 版本不再用
--test=oltp):sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=sbpass123 --mysql-db=sbtest --tables=2 --table-size=5000 --threads=2 --time=30 --report-interval=5 run - 关键观察点:
– 每 5 秒输出的queries和transactions是否持续增长
– 最终报告里是否有errors或reconnects不为 0
– MySQL 端用SHOW PROCESSLIST是否能看到活跃的INSERT/UPDATE/SELECT连接 - 若失败,优先检查:
max_connections是否够用、wait_timeout是否过短、防火墙是否拦截本地 3306
容易被忽略的兼容性细节:Lua 脚本路径与版本强绑定
sysbench 1.0+ 和 0.5 的脚本路径、参数名、甚至事务逻辑都不同。网上大量教程混用旧版参数(如 --oltp-tables-count),会导致命令解析失败或静默跳过测试。
- 查清你装的是哪个版本:
sysbench --version(1.0.20 和 0.5 差异极大) - 找对脚本位置:
– CentOS/RHEL yum 安装:通常在/usr/share/sysbench/
– 源码编译安装:可能在/usr/local/share/sysbench/
– 运行find /usr -name "oltp_*.lua" 2>/dev/null确认实际路径 - 1.0+ 版本必须用完整路径调用 Lua 脚本,不能只写
oltp_read_write;且弃用--test参数,改用脚本路径作为 testname
真正卡住的往往不是压测本身,而是准备阶段的权限、路径、版本三者没对齐。跑通 2 线程 30 秒后,再逐步加 --threads 和 --table-size —— 否则你不确定是 MySQL 慢,还是 sysbench 根本没发出去请求。











