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. 分析每秒统计和最终汇总报告

相关推荐
AlfredZhao18 小时前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
唐青枫20 小时前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
小满87820 小时前
5.Mysql事务隔离级别与锁机制
mysql
元Y亨H2 天前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql
戴为沐2 天前
Linux内存扩容指南
linux
zylyehuo2 天前
Linux 彻底且安全地删除文件
linux
这个DBA有点耶3 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵3 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
用户805533698033 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297913 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux