一、最终工具包内容
mysql_tuning_toolkit/
├── scripts/ # 核心脚本
│ ├── sysbench-pro.sh # 增强版压测工具
│ └── index_advisor.py # 智能索引分析器
├── configs/ # 配置模板
│ ├── oltp_config.ini # OLTP测试配置
│ └── db_cred.conf # 数据库连接配置
├── reports/ # 报告输出目录(自动生成)
├── docs/ # 文档
└── README.md # 本文档
└── setup.sh # 初始化环境
二、工具包制作
步骤 1:创建工具包目录结构
mkdir -p mysql_tuning_toolkit/{scripts,configs,reports,docs}
cd mysql_tuning_toolkit
步骤 2:添加核心文件
- 压力测试脚本 (scripts/sysbench-pro.sh)
cat > scripts/sysbench-pro.sh <<'EOF'
#!/bin/bash
# sysbench增强版 v2.3
# 用法:./sysbench-pro.sh
CONFIG_FILE=${1:-test_config.ini}
RESULT_DIR="/tmp/bench_$(date +%s)"
mkdir -p $RESULT_DIR
DB_HOST=$(awk -F '=' '/^host/{print $2}' $CONFIG_FILE)
THREADS=$(awk -F '=' '/^threads/{print $2}' $CONFIG_FILE)
for mode in oltp_read_write oltp_order_adv oltp_user_reg; do
sysbench $mode \
--mysql-host=$DB_HOST \
--mysql-user=bench \
--mysql-password=Bench123! \
--threads=$THREADS \
--time=300 \
--report-interval=10 \
run > $RESULT_DIR/${mode}_result.log
awk '/transactions:/{print $3}' $RESULT_DIR/${mode}_result.log | \
gnuplot -e "set terminal png; set output '$RESULT_DIR/${mode}_tps.png'" \
-e "plot '-' with lines title 'TPS'"
done
tar czf sysbench_report.tar.gz $RESULT_DIR
EOF
- 索引分析器 (scripts/index_advisor.py)
cat > scripts/index_advisor.py <<'EOF'
#!/usr/bin/env python3
import mysql.connector
import pandas as pd
class IndexAnalyzer:
def __init__(self, host: str, user: str, password: str):
self.conn = mysql.connector.connect(
host=host, user=user, password=password,
database='information_schema'
)
def get_redundant_indexes(self):
query = "SELECT * FROM sys.schema_redundant_indexes"
return pd.read_sql(query, self.conn).to_dict('records')
def generate_advice(self, redundancies):
return "\n".join(
f"ALTER TABLE `{idx['table_schema']}`.`{idx['table_name']}` DROP INDEX `{idx['redundant_index_name']}`;"
for idx in redundancies
)
if __name__ == "__main__":
analyzer = IndexAnalyzer('localhost', 'root', 'password')
print(analyzer.generate_advice(analyzer.get_redundant_indexes()))
EOF
- 使用文档 (docs/README.md)
cat > docs/README.md <<'EOF'
# MySQL调优工具包使用指南
## 工具包概述
本工具包专为MySQL DBA和系统运维人员设计,提供从压力测试、配置检查到索引优化的全链路调优能力。包含经大规模生产环境验证的脚本和最佳实践模板。
## 包含工具
1. `sysbench-pro.sh` - 增强版压力测试工具
2. `index_advisor.py` - 索引冗余分析器
3. `pt-variable-advisor` - 配置检查工具(需额外安装Percona Toolkit)
## 快速开始
tar xzf mysql_tuning_toolkit.tar.gz
cd mysql_tuning_toolkit
# 初始化环境
./setup.sh --install
EOF
- 初始化环境脚本(setup.sh)
#!/bin/bash
# MySQL调优工具包初始化脚本 v1.2
# 最后更新:2024-03-20
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查root权限
check_root() {
if [[ $EUID -ne 0 && "$1" == "--install" ]]; then
echo -e "${RED}[错误] 安装依赖需要root权限,请使用sudo执行本脚本${NC}"
exit 1
fi
}
# 安装基础依赖
install_dependencies() {
echo -e "${YELLOW}[步骤1] 安装系统依赖包...${NC}"
# 检测包管理器
if command -v apt-get &> /dev/null; then
sudo apt-get update
sudo apt-get install -y mysql-client sysbench gnuplot python3-pip perl
elif command -v yum &> /dev/null; then
sudo yum install -y mysql sysbench gnuplot python3-pip perl
else
echo -e "${RED}[错误] 不支持的包管理器 (仅支持apt/yum)${NC}"
exit 1
fi
echo -e "${YELLOW}[步骤2] 安装Python依赖...${NC}"
pip3 install mysql-connector-python pandas
echo -e "${YELLOW}[步骤3] 安装Percona Toolkit...${NC}"
if ! command -v pt-variable-advisor &> /dev/null; then
sudo percona-release enable tools
sudo apt-get install -y percona-toolkit || sudo yum install -y percona-toolkit
fi
}
# 配置测试数据库用户
setup_db_user() {
echo -e "${YELLOW}[步骤4] 配置测试数据库用户...${NC}"
read -p "请输入MySQL root密码(直接回车跳过): " -s root_pass
echo ""
mysql -u root -p"$root_pass" <<-eof 2>/dev/null || echo -e "${YELLOW}[警告] 跳过数据库用户配置${NC}"
CREATE DATABASE IF NOT EXISTS sbtest;
CREATE USER IF NOT EXISTS 'bench'@'%' IDENTIFIED BY 'Bench123!';
GRANT ALL PRIVILEGES ON sbtest.* TO 'bench'@'%';
FLUSH PRIVILEGES;
EOF
}
# 设置配置文件模板
init_configs() {
echo -e "${YELLOW}[步骤5] 初始化配置文件...${NC}"
cat > configs/db_cred.conf < configs/oltp_config.ini <<EOF
[benchmark]
host = localhost
threads = 64
tables = 20
table_size = 1000000
test_mode = oltp_read_write
warmup_time = 60
EOF
}
# 设置文件权限
set_permissions() {
echo -e "${YELLOW}[步骤6] 设置脚本权限...${NC}"
chmod +x scripts/*.sh
chmod +x scripts/*.py
}
# 主流程
main() {
case "$1" in
--install)
check_root "$@"
install_dependencies
setup_db_user
;;
*)
init_configs
set_permissions
;;
esac
echo -e "\n${GREEN}[√] 初始化完成!请按以下步骤操作:"
echo -e "1. 编辑 configs/db_cred.conf 配置数据库连接"
echo -e "2. 执行测试:./scripts/sysbench-pro.sh${NC}"
}
main "$@"
三、工具包使用说明
- 快速部署
# 解压
tar xzf mysql_tuning_toolkit.tar.gz
cd mysql_tuning_toolkit
# 首次安装(需要root权限)
sudo ./setup.sh --install
# 生成配置文件(普通用户运行)
./setup.sh
# 验证安装
pt-variable-advisor --version
sysbench --version
python3 scripts/index_advisor.py --help
- Sysbench Pro 压力测试
# 使用默认配置测试OLTP性能
./scripts/sysbench-pro.sh configs/oltp_config.ini
- Index Advisor 索引优化
# 分析指定数据库(需配置configs/db_cred.conf)
python3 scripts/index_advisor.py --config configs/db_cred.conf --database order_db
- Config Auditor 配置检查
生成审计报告
pt-variable-advisor --user root --password $PWD \
--report-format markdown \
--output reports/config_audit.md \
localhost
自动修复高危项
pt-variable-advisor --user root --password $PWD \
--fix-mode critical \
--execute-changes \
localhost
- 查看报告
tar xzf sysbench_report.tar.gz
firefox /tmp/bench_*/oltp_read_write_tps.png
注意事项
- 生产环境执行前务必在测试环境验证
- 索引删除操作默认生成ALTER INDEX ... INVISIBLE语句
- 压力测试会清空测试库数据,勿在业务库运行