14.7.7 备份与配置版本管理

在ProxySQL运维中,备份与配置版本管理用于保障配置可追溯、可恢复,减少误操作风险。本节给出备份对象、导出恢复、版本管理、排错与演练的可执行流程示例。

文章图片

备份范围与策略
- 管理配置:global_variablesmysql_serversmysql_usersmysql_query_rules
- 管理库:proxysql 管理库结构与数据。
- 运行日志:审计日志、错误日志、慢日志。
- 频率:日常全量 + 关键变更前即时备份;高变更环境可每小时导出。

安装与前置准备
- 需要:proxysql-adminmysql-clientgitcron
- 目录约定:
- 备份目录:/var/backups/proxysql/
- 版本库目录:/srv/proxysql-config/

# 依赖检查
which proxysql-admin mysql git || sudo apt-get install -y proxysql-admin mysql-client git

# 创建备份目录与版本库
sudo mkdir -p /var/backups/proxysql /srv/proxysql-config
sudo chown -R $USER:$USER /var/backups/proxysql /srv/proxysql-config

# 初始化Git仓库
cd /srv/proxysql-config
git init

运行时持久化与导出备份(完整流程示例)

# 1) 将运行时配置保存到磁盘(避免重启丢失)
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e \
"SELECT 'Saving runtime to disk'; \
SAVE MYSQL USERS TO DISK; \
SAVE MYSQL SERVERS TO DISK; \
SAVE MYSQL QUERY RULES TO DISK; \
SAVE ADMIN VARIABLES TO DISK; \
SAVE MYSQL VARIABLES TO DISK;"

# 2) 导出管理库(推荐mysqldump)
ts=$(date +%F_%H%M)
mysqldump -uadmin -padmin -h127.0.0.1 -P6032 --databases proxysql \
> /var/backups/proxysql/proxysql_${ts}.sql

# 3) 保存一份结构化配置(便于审阅)
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e \
"SELECT * FROM mysql_servers\G" \
> /srv/proxysql-config/mysql_servers_${ts}.txt

# 4) 提交到Git
cd /srv/proxysql-config
git add .
git commit -m "backup: proxysql config snapshot ${ts}"

配置恢复与生效

# 1) 恢复管理库
mysql -uadmin -padmin -h127.0.0.1 -P6032 < /var/backups/proxysql/proxysql_2024-01-01_1200.sql

# 2) 将磁盘配置加载到运行时
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e \
"LOAD MYSQL USERS TO RUNTIME; \
LOAD MYSQL SERVERS TO RUNTIME; \
LOAD MYSQL QUERY RULES TO RUNTIME; \
LOAD ADMIN VARIABLES TO RUNTIME; \
LOAD MYSQL VARIABLES TO RUNTIME;"

# 3) 快速验证
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "SHOW RUNTIME MYSQL SERVERS;"

关键命令解释
- SAVE ... TO DISK:将运行时配置写入磁盘,确保重启后保留。
- LOAD ... TO RUNTIME:将磁盘配置加载到运行时使其生效。
- mysqldump --databases proxysql:导出管理库,保留结构与数据。

版本管理规范(示例)
- 变更前后生成快照,以时间+变更单命名。
- Git分支策略:dev/test/prod
- MR/PR记录变更原因与回滚点。

# 创建变更分支并提交
git checkout -b change/read-write-split
# 修改配置导出文件后提交
git add mysql_query_rules_2024-01-02_0930.txt
git commit -m "feat: update rw split rule for app-a"

自动备份脚本与定时任务

# /usr/local/bin/proxysql_backup.sh
#!/usr/bin/env bash
set -euo pipefail
ts=$(date +%F_%H%M)
backup_dir="/var/backups/proxysql"
repo_dir="/srv/proxysql-config"

mysql -uadmin -padmin -h127.0.0.1 -P6032 -e \
"SAVE MYSQL USERS TO DISK; SAVE MYSQL SERVERS TO DISK; SAVE MYSQL QUERY RULES TO DISK;"

mysqldump -uadmin -padmin -h127.0.0.1 -P6032 --databases proxysql \
> ${backup_dir}/proxysql_${ts}.sql

mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "SELECT * FROM mysql_servers\G" \
> ${repo_dir}/mysql_servers_${ts}.txt

cd ${repo_dir}
git add .
git commit -m "backup: ${ts}" || true
# 定时任务:每天凌晨2点
sudo chmod +x /usr/local/bin/proxysql_backup.sh
echo "0 2 * * * /usr/local/bin/proxysql_backup.sh" | crontab -

排错与验证
- LOAD后配置不生效:检查是否导入了正确库、是否执行了对应 LOAD ... TO RUNTIME
- 重启后配置丢失:确认是否执行过 SAVE ... TO DISK
- 导出失败:确认proxysql-adminmysql-client连到6032管理端口。
- 版本回滚失败:检查mysqldump文件是否完整,是否被二次编辑。

# 常见排错命令
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "SHOW GLOBAL VARIABLES LIKE 'datadir';"
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "SELECT * FROM global_variables WHERE variable_name LIKE 'admin%';"

演练与练习
1. 练习:新增一条mysql_query_rules,保存到磁盘并导出。
2. 练习:从备份SQL恢复,执行LOAD并验证路由是否生效。
3. 练习:用diff对比两次快照,写出差异摘要。

# 练习:对比两次快照差异
diff -u mysql_servers_2024-01-01_1200.txt mysql_servers_2024-01-02_0930.txt | less

最佳实践
- 运行时变更后立即SAVE,变更前后必做快照。
- 配置文件与SQL备份分开保存,避免单点损坏。
- 与监控联动:配置变更后触发连接数、查询延迟基线对比。