
环境准备:
系统 | 主机名 | IP | 端口号 | MySQL 版本 | 虚拟IP |
CentOS 6.9 | mysqldb1 | 192.168.56.60 | 3306 | 5.7.18 | 192.168.56.100 |
CentOS 6.9 | mysqldb2 | 192.168.56.59 | 3306 | 5.7.18 | |
CentOS 6.9 | mysqldb3 | 192.168.56.58 | 3306 | 5.7.18 |

1.1 配置mysql配置文件(每个节点)
开启binlog并设置为row格式
设置server-id(每个节点不同)
设置为gtid模式
1.2 创建复制账号
在mysqldb1上
登陆数据库: mysql -S tmp/mysql3306.sock -uroot –pwanbin 创建账号: create user 'repl'@'%' identified by 'wanbin'; 赋予复制权限: grant replication slave on *.* to 'repl'@'%' ; |
1.3 创建备份并传输至mysqldb2
在mysqldb1上
innobackupex --defaults-file=/etc/my3306.cnf -S /tmp/mysql3306.sock -uroot -pwanbin --stream=tar ./ | ssh root@mysqldb2 "cat - > data/backup/dbback`date +%Y%m%d_%H%M%S`.tar" |
1.4 解压备份文件
在 mysqldb2上
tar -xvf dbback20170704_115934.tar -C dbback20170704_115934 |
1.5 删除数据文件
在 mysqldb2上
mysqladmin -S tmp/mysql3306.sock -p shutdown cd /data/mysql/mysql3306/data rm –rf * cd /data/mysql/mysql3306/logs rm –rf * cd /data/mysql/mysql3306/tmp rm –rf * |
1.6 日志应用到备份中的数据文件
在 mysqldb2上
innobackupex --apply-log data/backup/dbback20170704_115934/ |
运行结束时提示"completed OK!"就代表应用成功.
1.7 数据恢复
在 mysqldb2上
innobackupex --defaults-file=/etc/my3306.cnf --copy-back /data/backup/dbback20170704_115934/ |
在运行结束时提示"completed OK!"就代表恢复成功.
恢复成功后,修改文件权限:
chown -R mysql:mysql data chown -R mysql:mysql logs chown -R mysql:mysql tmp |
启动MySQL
mysqld --defaults-file=/etc/my3306.cnf & |
查看xtrabackup_info文件,得到gtid:
more /data/mysql/mysql3306/data/xtrabackup_info |

进入数据库中,查看gtid:
show variables like '%gtid%'; |

若为空,使用以下命令进行更改:
set global gtid_purged='357bb198-2b0b-11e7-95ab-0800278a63b6:1'; |
1.8 配置slave
在mysqldb2上
CHANGE MASTER TO master_host='192.168.56.60', master_port=3306, master_user='repl', master_password='wanbin', master_auto_position=1; |
启动slave 服务
start slave |
检查状态:
show slave status\G |
在mysqldb1上:
CHANGE MASTER TO master_host='192.168.56.59', master_port=3306, master_user='repl', master_password='wanbin', master_auto_position=1; |
启动slave 服务
start slave |
检查状态:
show slave status\G |
1.9 安装keepalived(每个环境都需安装配置)
安装keepalived
yum install -y keepalived |
配置keepalived.conf文件
#全局配置 global_defs { #表示keepalived在发生诸如切换操作时发送Email给哪些地址,邮件地址可以多个,每行一个 notification_email { wanbin@suninfo.com } #表示发送通知邮件时邮件源地址是谁 notification_email_from keepalived@suninfo.com #表示发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现 smtp_server 127.0.0.1 #连接smtp连接超时时间 smtp_connect_timeout 30 #机器标识 router_id VI-82 } vrrp_instance VI-82 { state BACKUP #state指定instance的初始状态,但这里指定的不算,还是得通过优先级竞选来确定。两台配置此处均是BACKUP。 interface eth1 #实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的 virtual_router_id 82 #这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址 priority 90 #设置本节点的优先级,优先级高的为master advert_int 1 #检查间隔,默认为1秒 authentication { #这里设置认证 auth_type PASS auth_pass 1111 } virtual_ipaddress { #这里设置的就是VIP,也就是虚拟IP地址 192.168.56.100 } } virtual_server 192.168.56.100 3306 { delay_loop 2 #每个2秒检查一次real_server状态 lb_algo wrr lb_kind DR persistence_timeout 60 #会话保持时间 protocol TCP real_server 192.168.56.59 3306 { #设置每个节点真实IP weight 3 notify_down etc/keepalived/MySQL.sh #检测到服务down后执行的脚本 TCP_CHECK { connect_timeout 10 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 3306 #健康检查端口 } } } |
编辑MySQL.sh文件:
pkill keepalived |
赋予执行权限:
chmod +x MySQL.sh |
启动keepalived
keepalived –D |
1.10 测试
观察/var/log/messeges文件,确认虚IP所在节点,然后测试以下:
tail -100f var/log/messeges |

虚拟ip在mysqldb1上。
1)停掉eth1网卡,观察虚IP是否自动切换。
ifconfig eth1 down |

虚拟IP自动切换到59服务器上
2)kill keepalived进程,观察虚IP是否自动切换。
pkill keepalived |

虚拟IP自动切换到60服务器上
3)停掉mysql数据库,观察虚IP是否自动切换。
mysqldb1上执行
mysqladmin -S tmp/mysql3306.sock -pwanbin shutdown |

虚拟IP自动切换到mysqldb1上

2.1 配置slave服务
1)mysqldb1上执行
# mysql -S tmp/mysql3306.sock -uroot -pwanbin mysql>change master to master_host='192.168.56.59', master_port=3306, master_user='repl', master_password='wanbin',master_auto_position=1 for channel '192_168_56_59_3306'; mysql>change master to master_host='192.168.56.58', master_port=3306, master_user='repl', master_password='wanbin',master_auto_position=1 for channel '192_168_56_58_3306'; mysql>start slave; mysql>show slave status\G |
2)mysqldb2上执行:
mysql -S tmp/mysql3306.sock -uroot -pwanbin mysql>change master to master_host='192.168.56.60', master_port=3306, master_user='repl', master_password='wanbin',master_auto_position=1 for channel '192_168_56_60_3306'; mysql>change master to master_host='192.168.56.58', master_port=3306, master_user='repl', master_password='wanbin',master_auto_position=1 for channel '192_168_56_58_3306'; mysql>start slave; mysql>show slave status\G |
3)mysqldb3上执行:
mysql -S tmp/mysql3306.sock -uroot -pwanbin mysql>change master to master_host='192.168.56.60', master_port=3306, master_user='repl', master_password='wanbin',master_auto_position=1 for channel '192_168_56_60_3306'; mysql>change master to master_host='192.168.56.59', master_port=3306, master_user='repl', master_password='wanbin',master_auto_position=1 for channel '192_168_56_59_3306'; mysql>start slave; mysql>show slave status\G |
2.2 配置keepalived
同双主配置中的keepalived
2.3 启动keepalived
keepalived –D |
2.4 测试
观察/var/log/messages文件
tail -100f var/log/messages
|
虚拟IP在mysqldb3上。
1)mysqldb3停掉eth1网卡,观察虚IP是否自动切换。
ifconfig eth1 down
|
虚拟IP自动切换至mysqldb1上
2)mysqldb1上kill keepalived进程,观察虚IP是否自动切换。
pkill keepalived
|
虚拟IP自动切换至mysqldb2上
3)mysqldb2上停掉mysql数据库,观察虚IP是否自动切换。
mysqladmin -S /tmp/mysql3306.sock -pwanbin shutdown
|
虚拟IP自动切换至mysqldb1上










