前言:
之前我们生产环境(物理机)是两台数据库做的主主复制并用keepllive做的高可用,当时业务少性能是没问题的,最近又有别的系统接入了我们项目顿时压力大增就申请新增了两台数据库(私有云),大概流程如下,可能有点乱但是有点底子的人还是能看懂的。
1、执行命令备份数据库
xtrabackup --backup --slave-info --user=root --password=‘*****’
--parallel=4 --socket=/data/mysql/var/mysql.sock --no-timestamp --stream=xbstream | xbstream -x -C /data/mysqlbak/mysql_bak
2、把/data/mysqlbak/mysql_bak发送到64.164和64.165上面
使用自己熟悉的命令即可
3、备份完毕后,在64.164上执行恢复命令
xtrabackup --prepare --apply-log --target-dir=/zdata/mysql_bak/mysql_bak
4、停止64.164.8和64.9165上的MySQL服务。将mysql的data目录重命名,将备份恢复的数据目录mysql_bak改为data。也可以先停止64.164和64.165上的MySQL服务,清空data目录。
cd /zdata/
mv mysql_data mysql_data_20190521
5、同步一份恢复后的数据到64.165(在64.164上执行),使用rsync、scp等自己熟悉的工具均可。
rsync -avprP /zdata/mysql_data/ mysql@**.**.64.165:/zdata/mysql_data/
6、备份并修改修改64.164和64.165的my.cnf文件,在mysqld配置项下加入skip_slave_start配置项,不要mysql启动时自动拉起复制进程(后边需要配置好后再启动)。
7、在64.164/165上启动mysql检查mysql目录的属性,确保是mysql用户,可以使用chown -R mysql. /zdata/改一次,然后使用root用户运行启动命令。
service mysqld start
8、查看/zdata/mysql_data/xtrabackup_slave_info目录下xtrabackup_binlog_info文件内容,此文件记录了步骤1中备份完成时的事务点,下一步会使用,或者xtrabackup_slave_info内容也是一样,里边已经写好了需要配置的语句,步骤1中–slave-info参数生成。
cat /zdata/mysql_data/xtrabackup_slave_info
SET GLOBAL gtid_purged='4f271216-497c-11e9-ab06-fa163eaeb12d:1-197, ad72360b-497b-11e9-b3e6-fa163ed7da68:1-17271284:118159792, c44e4998-9b61-11e5-82bf-141877341ec6:1-2247, d393d2e3-9b61-11e5-82bf-141877342ba0:1-14563313';
9、登录64.164.8和64.165MySQL,配置已执行事务集合,不能登录错主机,一定是刚用备份恢复后启动的MySQL机器执行步骤8中得到的语句,告诉恢复的MySQL步骤8中的事务已经执行完毕,可能gtid_purged不为空,需要先reset master后才可更改。
SQL> reset master;
SQL> SET GLOBAL gtid_purged='4f271216-497c-11e9-ab06-fa163eaeb12d:1-197, ad72360b-497b-11e9-b3e6-fa163ed7da68:1-17271284:118159792, c44e4998-9b61-11e5-82bf-141877341ec6:1-2247, d393d2e3-9b61-11e5-82bf-141877342ba0:1-14563313';d393d2e3-9b61-11e5-82bf-141877342ba0:1-14226720';
SQL> show master status; #应与上边set的值一致。
64.164和64.164都执行,因为39.8和9是同一份备份恢复的。
10、分别清空64.164、64.165、39.8、39.9的主从关系,5.7的多源复制功能,配置物理环境互为主备、云环境互为主备、物理环境和云环境互为主备。
10.1、在云环境39.8和39.9上配置一个channel,标识云环境互为主备的复制关系。
10.2、在39.9上配置从39.8复制关系。
SQL> stop slave;
SQL> reset slave all;
SQL> CHANGE MASTER TO MASTER_HOST='**.**.39.8',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='*********',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'cloud';
SQL> start slave;
SQL> show slave status\G;
10.3、在39.8上配置从39.9复制关系,channel为cloud。标识为云环境复制。
SQL> stop slave;
SQL> reset slave all;
SQL> CHANGE MASTER TO MASTER_HOST='**.**.39.9',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='*********',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'cloud';
10.4、在39.8上配置从64.168复制关系,channel为cloud-metal。标识为与环境和物理环境复制。
SQL> CHANGE MASTER TO MASTER_HOST='**.**.64.168',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='*********',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'cloud-metal';
SQL> start slave;
SQL> show slave status\G;
10.5、在物理环境64.164和64.165上配置一个channel,标识物理环境互为主备的复制关系。
10.6、在64.165配置从64.164复制关系,channel为metal,标识为物理环境复制。
SQL> stop slave;
SQL> reset slave all;
SQL> CHANGE MASTER TO MASTER_HOST='**.**.64.164',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='*********',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'metal';
10.7、在64.165上配置从39.235复制数据,channel为cloud-metal,标识为与环境和物理环境复制
SQL> CHANGE MASTER TO MASTER_HOST='**.**.39.235',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='*********',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'cloud-metal';
SQL> start slave;
SQL> show slave status\G;
10.8、在64.164上配置从64.165复制数据,channel为metal。标识为物理环境复制
SQL> stop slave;
SQL> reset slave all;
SQL> CHANGE MASTER TO MASTER_HOST='**.**.64.165',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='*********',
MASTER_AUTO_POSITION = 1 FOR CHANNEL 'metal';
SQL> start slave;
SQL> show slave status\G;
11、捋一捋复制关系
现网:
64.164=A、64.165=B、64.168=C(现网环境Mysql-VIP地址)
云环境:
39.8=D、39.9=E、39.235=F(云环境Mysql-VIP地址)
A和B是互为主从
D和E是互为主从
C是D的从
F是B的从
注:
写的有点粗糙对新手可能不太友好,等过段时间我在贴出来一个完整的流程