MySQL GTID 双主方案

引言

为了保证MySQL的高可用性,避免MySQL服务挂掉导致更严重的生产事故,因此需要保证多台机器数据均一致,并且降低恢复成本,采用GTID双主服务。实际上GTID也是以来binlog来实现的。

测试机器

  • centos8
  • mysql 8.0.20

配置过程

分别配置双机的my.cnf

server-id=129 -- 注意这个地方需要保证不一致,我这里是ip地址的后部分
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=on
log-bin-index=mysql-bin.index
log_bin=mysql-bin
binlog-format=mixed

如果需要排除部分库,可添加配置

replicate_ignore_db = db1
replicate_ignore_db = db2
replicate_ignore_db = db3

其中db1,db2为库名

修改auto.cnf

切换到data目录,这里可以在my.cnf中找到
image.png

切换到data目录 /home/mysql/data
修改auto.cnf文件内容,这里保证两台机器的uuid不一致

vi auto.cnf
vi 快捷键

i编辑
上下左右光标
若要保存,先esc键,输入:wq

image.png

重启MySQL服务

因为修改了MySQL的配置,需要重启一下MySQL服务,如果提示错误,看日志,如果不是配置文件的问题,考虑一下是不是selinux,通过 setenforce 0暂时关闭selinux

image.png

创建 syncer账号

这里仅提供样例,用户名和密码需自行设置

CREATE USER 'syncer'@'%' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';
GRANT REPLICATION SLAVE ON *.* TO 'syncer'@'%';
flush privileges;

启动slave服务

⚠ 注意,这里的IP,用户名、密码、端口,需要以实际情况进行设置

第一台服务

change master to
MASTER_HOST='192.168.204.132',
MASTER_USER='syncer',
MASTER_PASSWORD='P@ssw0rd',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;

第二台服务

change master to
MASTER_HOST='192.168.204.129',
MASTER_USER='syncer',
MASTER_PASSWORD='P@ssw0rd',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;

分别在两台机器上执行start slave;启动同步服务

检查服务状态

show slave status\G

image.png

当框框里面的都是YES即为设置成功。

验证

左侧添加,右侧自动添加
右侧添加,左侧自动添加

image.png
左侧删除,右侧自动删除
右侧删除,左侧自动删除

image.png

模拟数据库服务A挂掉,在B服务器上操作,当A再次上线,回复B上的操作
image.png

备注

备份数据库

mysqldump -uroot -p --set-gtid-purged=ON –databases db1 db2 db3 --single-transaction --master-data=2 --triggers --routines --events > database.sql

清除slave配置

reset slave all;

清除binlog

reset master;

重启slave

stop slave;
start slave;
show slave status\G

备忘录

测试时执行的命令,此处并非文章内容,仅供高效率执行。(C)

登录后可见

这段内容需要登录后才能查看。

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。