必须先确认MySQL客户端库路径和sysbench是否真正支持MySQL 5.7驱动,关键验证是运行sysbench --help | grep mysql查看是否输出--mysql-*参数;源码编译需显式加--with-mysql,YUM安装则默认支持;还需检查MySQL 5.7严格模式与密码策略是否导致prepare失败,并确保动态库libmysqlclient.so.20路径正确且可加载。

能直接压测,但必须先确认 MySQL 客户端库路径和 sysbench 是否真正支持 MySQL 5.7 驱动。很多失败不是因为命令写错,而是 sysbench 编译时没链接对 libmysqlclient,或者运行时找不到动态库。
确认 sysbench 是否真正支持 MySQL 5.7
执行 sysbench --version 只能看出版本号,看不出数据库驱动状态。关键要看它是否内置 MySQL 支持:
- 如果用 YUM 安装(如通过
packagecloud.io仓库),默认已启用 MySQL 支持,可跳过编译检查 - 如果是源码编译安装,必须在
./configure时显式加--with-mysql,否则oltp_read_write等测试会报FATAL: db driver 'mysql' not found - 验证方式:运行
sysbench --help | grep mysql,能看到--mysql-*类参数才说明支持已就绪
准备数据前先检查 MySQL 5.7 的兼容配置
MySQL 5.7 默认启用了严格模式和密码策略,容易导致 prepare 阶段失败。常见报错如 ERROR 1067 (42000): Invalid default value for 'xxx' 或 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 登录 MySQL 执行:
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'; - 关闭密码强度校验(仅测试环境):
SET GLOBAL validate_password_policy = LOW; SET GLOBAL validate_password_length = 4; - 确保目标库(如
sbtest)已存在,且用户有CREATE、INSERT、INDEX权限
执行标准 OLTP 压测的最小可行命令
不要一上来就调高 --threads 或 --tables,先跑通再调参。以下命令已在 MySQL 5.7.44 + sysbench 1.0.20 组合下验证通过:
sysbench \ --db-driver=mysql \ --mysql-host=127.0.0.1 \ --mysql-port=3306 \ --mysql-user=root \ --mysql-password=123456 \ --mysql-db=sbtest \ --tables=4 \ --table-size=100000 \ --time=60 \ --threads=4 \ --report-interval=10 \ --percentile=95 \ oltp_read_write \ prepare
成功后运行压测:
sysbench \ --db-driver=mysql \ --mysql-host=127.0.0.1 \ --mysql-port=3306 \ --mysql-user=root \ --mysql-password=123456 \ --mysql-db=sbtest \ --tables=4 \ --table-size=100000 \ --time=60 \ --threads=4 \ --report-interval=10 \ --percentile=95 \ oltp_read_write \ run
-
--table-size=100000是安全起点;设太高(如百万级)会导致prepare卡住或磁盘爆满 -
--threads=4对单机 MySQL 5.7 足够暴露瓶颈;盲目开到 32+ 反而因锁争用拉低 TPS -
--percentile=95必须显式指定,否则默认不输出 95% 延迟,而这个值才是判断真实体验的关键
最容易被忽略的运行时依赖问题
即使 sysbench --version 成功,运行时仍可能报 error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file:
- 先查 MySQL 客户端库位置:
find /usr -name "libmysqlclient.so*" 2>/dev/null或mysql_config --libs - 若库在
/usr/lib64/mysql/,执行:sudo ln -s /usr/lib64/mysql/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20 - 若用自定义路径编译 MySQL(如
/data_mysql/mysql/lib),必须同步更新LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/data_mysql/mysql/lib:$LD_LIBRARY_PATH - 别依赖
ldconfig自动发现——MySQL 5.7 的库名带版本号(如.so.20),而 sysbench 链接时硬编码找这个后缀,路径错一个字符就失败


















