网络故障对主从复制的影响
注意事项
实验环境
mysql-master centos7 192.168.20.30
mysql-slave centos7 192.168.20.31
环境配置
关闭防火墙

关闭selinux


配置固定ip


安装为主从mysql服务器安装mysql服务
为主数据库开启binlog
创建存放binlog日志的目录并赋予相应的权限

修改mysql配置文件my.cnf


重启数据库并查看binlog是否生成日志文件

创建主从复制时使用的用户并赋予REPLICATION SLAVE权限


查看主数据库的binlog信息

备份主数据库所有数据

mysqldump -uroot -p --all-databases --triggers --routines --events --master-data=2 --flush-logs > /root/all-master-dbs.sql
#--master-data=2 记录主数据库binlog日志文件位置将主数据库备份文件还原到从数据库


为从数据库设置server-id



为从数据库指定主数据库(此时数据库用户和密码为主数据库用户及密码)

change master to
master_host='192.168.20.30',master_user='repl',master_password='L1g2asd.',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=617;
#change master to 设置连接主数据库信息
#master_host='192.168.20.30' 指定主数据库的地址
#master_user='repl' 连接所使用的用户
#master_password='L1g2asd.' 用户密码
#master_port=3306连接端口
#master_log_file='mysql-bin.000001' 指定开始复制的binlog起始文件
#master_log_pos=617; 指定开始复制的binlog起始文件头注释号
#若主数据库服务器连接信息出现变化需要重新设置启动从数据库的复制并查看状态

若出现Slave_SQL_Running为No,解决方法如下

start slave; #开启主从复制
stop slave #停止主从复制
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; #跳过指定数量的错误事务,这里为1
#Slave_IO_Running 负责与主机的io通信
#Slave_SQL_Running 负责自己的slave mysql进程
#其他相关命令
#reset slave 直接删除master.info和relay-log.info文件,并删除所有的relay log,然后重新生成一个新的relay log,但不删除内存中保存的信息
#reset slave all 和reset slave相比会删除内存中的连接信息,使用reset slave all之前先使用stop slave命令
#reset master 删除所有index file中记录的所有binlog文件,将日志索引文件清空,创建一个新的日志文件查看中继日志

查看连接主数据库配置信息

查看主从同步信息日志

修改配置文件,将master.info与relay-log.info保存到表中便于查看





relay_log_info_repository=table
master_info_repository=table
systemctl restart mysqld
----------------------------------------
mysql -uroot -p
use mysql
select * from slave_master_info\G
select * from slave_relay_log_info\G测试
主数据库上创建测试库和表并插入数据


查看从库是否同步


全局事务标识符
启用全局事务标识符
修改主从数据库配置



gtid-mode=ON #启用GTID,binlog中每个事务一起记录唯一的 GTID
enforce-gtid-consistency #禁止无法以事务安全方式记录的事件从库关闭数据库复制并清空连接参数

重新设置连接参数

change master to
master_host='192.168.20.30',master_user='repl',master_password='L1g2asd.',master_port=3306,master_auto_position=1;重新启动主从复制并查看状态


测试
主库创建新的数据库和表

查看从库是否同步


实验环境
数据库的安装参考Mysql之数据库的安装与基本操作
修改masterA的mysql主配置文件如下


停止之前设置的主从复制并清空日志


修改masterC mysql服务配置如下



user=mysql
character-set-server=utf8
explicit_defaults_for_timestamp
server-id=32
log-bin=/binlogs/mysql-bin
gtid-mode=ON
enforce-gtid-consistency
log-slave-updates将masterA主库的备份还原至masterC 服务器上


修改masterB mysql配置



将masterA的主库设置为masterC

change master to
master_host='192.168.20.32',master_user='repl',master_password='L1g2asd.',master_port=3306,master_auto_position=1;
将masterB的主库设置为masterA

change master to
master_host='192.168.20.30',master_user='repl',master_password='L1g2asd.',master_port=3306,master_auto_position=1;
将masterC的主库设置为masterB

change master to
master_host='192.168.20.31',master_user='repl',master_password='L1g2asd.',master_port=3306,master_auto_position=1;
启动A、B、C数据库的主从复制




测试





GTID跳过事务冲突:
用于代替原来的set global sql_slave_skip_counter = 1
由于在这个GTID必须是连续的,正常情况同一个服务器产生的GTID是不会存在空缺的。所以不能简单的skip掉一个事务,只能通过注入空事物的方法替换掉一个实际操作事务
注入空事物的方法:
stop slave;
set gtid_next='xxxxxxx:N'; #'xxxxxxx:N'为原先要跳过的事务的日志文件和起始头注释号
begin;commit; #使用空事务替代要跳过的事务
set gtid_next=automatic;
start slave;原文:https://www.cnblogs.com/lastyear/p/11992406.html