MySql之MHA集群故障恢复【实战】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sj349781478/article/details/79493344

MHA集群的理论和搭建不在这里说明,详见http://blog.csdn.net/sj349781478/article/details/78829711

这里说的是MHA集群中主(master)数据库故障的恢复。

背景介绍:

MHA集群共计四台服务器

master(主):192.168.66.141

backup(备):192.168.66.142

slave(从):192.168.66.143

manager(管理):192.168.66.144

MHA-VIP(数据库对外提供的IP):192.168.66.149

环境搭建:

1、备份数据,将数据传输至管理节点,数据约5G。

扫描二维码关注公众号,回复: 3526554 查看本文章

完整备份并打包压缩: 

  1. innobackupex --defaults-file=/etc/my.cnf  --host=localhost --user=root --password=MySQLPASSWORD --socket=/data/mysql/mysql.sock --port=3306  --slave-info --stream=tar  /data/backup/$(date +%F) | gzip > /data/xtrabackup/$(date +%F).tar.gz  && rm -rf /data/backup/*

#scp  /data/xtrabackup/2018-03-09.tar.gz  [email protected]:/backup/

2、将备份在管理节点上的数据,同时推送至三台数据库。

#yum install  salt-ssh -y

#vi /etc/salt/abcdb (注意空格)

    141:

        host: 192.168.66.141

        user: root

        passwd: PASSWD

        port: 22

#salt-ssh  --roster-file='abcdb' '*' -r 'scp [email protected]:/backup/2018-03-09.tar.gz /data/backup/2018-03-09.tar.gz' (把文件从远程主机copy到当前系统

3、三台数据库同时还原备份数据。

#salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r 'service mysql stop'(停三台库)

# salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r 'cd /data/mysql/ && rm -rf *'  (清空目录内容)

# salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r 'cd /data/backup/  && tar  -izxvf 2018-03-09.tar.gz  ' (解压备份)

#salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r ‘innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --port=3306 --apply-log /data/backup/’  (应用日志文件)

#salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r  ‘innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --port=3306 --copy-back /data/backup/’ (数据恢复)

#salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r 'chown mysql:mysql -R /data/mysql' (修改权限)

 #salt-ssh  --roster-file='/etc/salt/abcdb' '*' -r 'service mysql start' (启动mysql)

4、三台库建立主从关系。

master(主):192.168.66.141    

mysql> show master status;

backup(备):192.168.66.142

slave(从):192.168.66.143

mysql> CHANGE MASTER TO
 MASTER_HOST='192.168.66.141',
 MASTER_USER='repl',
 MASTER_PASSWORD='PASSWD',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='mysql-bin.000001',
 MASTER_LOG_POS=120,

 MASTER_CONNECT_RETRY=20;

mysql> start slave;

状态双Yes

5、建立MHA集群。

manager(管理):192.168.66.144

# masterha_check_ssh -conf=/etc/masterha/app1.cnf (ssh互信检测)

#masterha_check_repl -conf=/etc/masterha/app1.cnf  (复制检测)

#nohup masterha_manager --conf=/etc/masterha/app1.cnf  &> /var/log/masterha/app1.log/manager.log &  (启动MHA)

#masterha_check_status -conf=/etc/masterha/app1.cnf (检查MHA启动状态是否为running)

6、为主数据库添加VIP

# /sbin/ifconfig eth0:1 192.168.66.149 netmask 255.255.255.0  up

7、模拟主库故障,备库提升为主。

1)service mysql stop (关闭主库)

2)备库自动提升为主,IP地址同时漂移至备机

3)从库自动同步备库

8、修复原主库,将角色变为备,连接至现主库。

假设在01点为全量备份点,02为故障点,03为新增数据后的点。

理想情况下,启动原主库,change master至02点位即可。

但是现实很骨感,没法精确到02的Position位,那么我就从01位恢复。

mysql> CHANGE MASTER TO
 MASTER_HOST='192.168.66.142',
 MASTER_USER='repl',
 MASTER_PASSWORD='PASSWD',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='mysql-bin.000001',
 MASTER_LOG_POS=120,

 MASTER_CONNECT_RETRY=20;

mysql> start slave;

9、重建MHA集群。

三台主从又恢复了正常,重新建立MHA

1)原主库开启read-only 

mysql> show variables like '%read_only%';     mysql>set global read_only=on;

2)管理节点需要在/var/log/masterha/app1.log 目录下清除app1.failover.complete 这个文件

3)使用第5步检查启动

【完】

猜你喜欢

转载自blog.csdn.net/sj349781478/article/details/79493344