Linux + MySQL + Sysbench 一键部署和压测教程

1️⃣ 系统准备

  • 系统:Rocky Linux 9.6
  • MySQL 版本:8.0.39
  • 数据库账号:sbtest / 密码 SbTest@123456
  • 数据库名称:sbtest

如果你使用 Windows,也可以通过虚拟机安装 Linux 做测试。


2️⃣ 安装 Sysbench

  1. 配置 Sysbench 官方仓库:
bash 复制代码
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
  1. 安装 Sysbench:
bash 复制代码
sudo yum -y install sysbench
  1. 验证安装:
bash 复制代码
sysbench --version

正常显示版本号即可。


3️⃣ MySQL 数据库准备

  1. 登录 MySQL 并创建测试库:
bash 复制代码
mysql -u root -p -e "CREATE DATABASE sbtest;"
  1. 确保 sbtest 用户有权限访问 sbtest 数据库:
bash 复制代码
mysql -u root -p -e "GRANT ALL PRIVILEGES ON sbtest.* TO 'sbtest'@'127.0.0.1'; FLUSH PRIVILEGES;"
  1. 测试连接:
bash 复制代码
mysql -u sbtest -pSbTest@123456 -h127.0.0.1 sbtest

成功连接即可。


4️⃣ 构造测试表与测试数据

使用 Sysbench prepare 命令生成数据:

bash 复制代码
sysbench \
  --db-driver=mysql \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=sbtest \
  --mysql-password=SbTest@123456 \
  --mysql-db=sbtest \
  --tables=20 \
  --table-size=1000000 \
  oltp_read_write \
  --db-ps-mode=disable \
  prepare

参数说明:

参数 说明
--tables=20 创建 20 张测试表
--table-size=1000000 每张表 100 万条数据
oltp_read_write 测试类型:读写模式
--db-ps-mode=disable 禁用 Prepared Statements
prepare 生成表和数据

执行完成后,会在 sbtest 数据库中生成 sbtest1~sbtest20 测试表。


5️⃣ 执行压测

5.1 综合读写压测

bash 复制代码
sysbench \
  --db-driver=mysql \
  --time=300 \
  --threads=10 \
  --report-interval=1 \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=sbtest \
  --mysql-password=SbTest@123456 \
  --mysql-db=sbtest \
  --tables=20 \
  --table-size=1000000 \
  oltp_read_write \
  --db-ps-mode=disable \
  run
  • --time=300:压测 300 秒
  • --threads=10:使用 10 个并发线程
  • --report-interval=1:每秒输出一次统计信息

5.2 只读压测

bash 复制代码
sysbench \
  --db-driver=mysql \
  --time=300 \
  --threads=10 \
  --report-interval=1 \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=sbtest \
  --mysql-password=SbTest@123456 \
  --mysql-db=sbtest \
  --tables=20 \
  --table-size=1000000 \
  oltp_read_only \
  --db-ps-mode=disable \
  run

5.3 插入/更新/删除等专项测试

  • 删除性能:
bash 复制代码
oltp_delete
  • 更新索引字段:
bash 复制代码
oltp_update_index
  • 更新非索引字段:
bash 复制代码
oltp_update_non_index
  • 插入性能:
bash 复制代码
oltp_insert
  • 写入性能(纯写):
bash 复制代码
oltp_write_only

命令用法一致,只需把 oltp_read_write 换成对应模式即可。


6️⃣ 清理测试数据

bash 复制代码
sysbench \
  --db-driver=mysql \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=sbtest \
  --mysql-password=SbTest@123456 \
  --mysql-db=sbtest \
  --tables=20 \
  --table-size=1000000 \
  oltp_read_write \
  --db-ps-mode=disable \
  cleanup

清理后 sbtest1~sbtest20 表会被删除。


7️⃣ 压测结果说明

Sysbench 会输出每秒统计以及最终汇总报告:

每秒统计示例

复制代码
[ 22s ] thds: 10 tps: 380.99 qps: 7312.66 (r/w/o: 5132.99/1155.86/1321.35) lat (ms, 95%): 21.33 err/s: 0.00 reconn/s: 0.00
  • thds:线程数
  • tps:每秒事务数
  • qps:每秒请求数
  • (r/w/o):读/写/其他请求数
  • lat (ms, 95%):95% 请求延迟
  • err/s:每秒错误请求数
  • reconn/s:每秒重连数

总体汇总示例

复制代码
transactions: 105180 ( 350.6 per sec.)
queries: 2103977 ( 7013.26 per sec.)
Latency (ms): min: 4.32, avg: 13.42, max: 45.56, 95th percentile: 21.33
  • 总事务数、QPS、平均/最大/最小延迟、95% 请求延迟
  • 错误和重连数帮助判断数据库稳定性

压测结果会根据硬件、MySQL 配置、表大小和并发线程数不同而差异很大。


✅ 总结

  1. 安装 Sysbench 并验证
  2. 创建测试数据库 sbtest 和用户 sbtest
  3. 使用 prepare 构造数据表
  4. 使用 run 进行各种类型压测
  5. 使用 cleanup 清理数据
  6. 分析每秒统计和最终汇总报告

相关推荐
chlk1238 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑8 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件9 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号18 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
于眠牧北1 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
十日十行2 天前
Linux和window共享文件夹
linux
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql