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

相关推荐
Apipi*8 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP9 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC12 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday12 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
BLUcoding12 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK12 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Yyyyyy~12 小时前
[ Mysql ] 库的操作
mysql
Nil20812 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)12 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter62512 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器