场景:
ProxySQL需要从2台扩展到N台,但是当前ProxySQL没有使用cluster模式部署,而是使用SLB 多个独立的ProxySQL节点的方式承载流量。
推荐的方法:
导出运行中ProxySQL的配置文件,然后到新的ProxySQL实例里面加载。
具体步骤如下:
1、使用sqlite3命令导出为sql文件
代码语言:javascript复制sqlite3 /var/lib/proxysql/proxysql.db .dump > /root/proxysql-dump.sql
可使用less命令查看下导出的sql内容,可以看到和mysql的大体类似
less /root/proxysql-dump.sql
2、编辑 /root/proxysql-dump.sql
代码语言:javascript复制做这一步的是为了修复数据,不然导入进去有些报错,会导致数据丢失
1、把里面的INSERT INTO 批量替换为 INSERT OR REPLACE INTO (不然导入的时候会因为键冲突导致一些global_variables表里面的值没有写进去)
sed -i 's#INSERT INTO#INSERT OR REPLACE INTO#g' /root/proxysql-dump.sql
2、把里面的CREATE TABLE批量替换为 -- CREATE TABLE (不然导入的时候会因为表已存在冲突,这种报错问题倒是没有,但是不太好看,建议也注释掉create table语句)
sed -i 's#CREATE TABLE#-- CREATE TABLE#g' /root/proxysql-dump.sql
3、到新的PorxySQL实例去导入
代码语言:javascript复制systemctl restart proxysql 使其生成一份初始化的proxysql.db文件
systemctl stop proxysql 停掉proxysql进程,便于后面的导入操作
执行导入命令
sqlite3 /var/lib/proxysql/proxysql.db < /root/proxysql-dump.sql
4、启动proxySQL
代码语言:javascript复制systemctl start proxysql
systemctl enable proxysql
5、测试
###############################################################################
update 2024-01-10
percona blog上提到的备份方法
https://www.percona.com/blog/the-various-methods-to-backup-and-restore-proxysql/
方法1 【推荐用这种】
代码语言:shell复制 登录proxsql admin控制台
select config into outfile /var/lib/proxysql/proxybkp.cnf;
用 proxybkp.cnf 这个生成的配置文件即可放到其它实例上去启动
方法2
代码语言:shell复制 $ mysqldump -u admin -p -h 127.0.0.1 -P6032 --no-tablespaces --no-create-info --no-create-db --skip-triggers --skip-column-statistics main mysql_servers > proxy_mysql_servers_bkp.sql
注意如果mysqldump 版本是 8.0,则导出的时候还需要加参数 –skip-column-statistics , It only works from ProxySQL version 2.0.8 and above