简介:MySQL主从复制实现分布式数据库
上一篇文章我们已经介绍了MySQL主从复制原理及基于binlog日志的实操过程,但是基于事务的主从复制还没有介绍,今天我们再来说说MySQL基于事务的主从复制吧
基于事务的主从复制也叫GTID主从复制。GTID是一个已提交事务的编号,并且是一个全局唯一的编号。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识,保存在mysql数据目录下的auto.cnf文件里。TID是已经提交的事务数量,并且随着事务提交单调递增。
MySQL基于日志的复制在线变更基于事物的复制:
A. 要求MySQL的版本必须高于5.7.6
B. 在主库上执行一下步骤:
set @@global.enforce_gtid_consistency = on;
set @@global.gtid_mode = on;
C. 在从库上执行一下步骤:
#设置gtid_mode为on:
set @@global.gtid_mode = on;
# 设置enforce_gtid_consistency为on
set @@global.enforce_gtid_consistency = on;
# 在主从库执行一下命令,查看状态是否一致:
show status like 'ongoing_anonymous_transaction_count';
#停止slave:
top slave;
#设置复制slave复制类型(默认为0基于binlog日志,1基于事务的复制):
change master to master_auto_position = 1;
# 重启slave:
start slave;
提示:mariadb数据库不能用以上方法变更,因为mariadb数据库的全局变量名称不一样。
多线程复制设置:
-- 在slave服务器端停止所有的复制链路:
stop slave;
-- 设置多线程复制:
set global slave_parallel_type = 'logical_clock';
到此就完成在线变更主从复制模式了。上述操作有一个问题,MySQL重启后上述设置都会失效,如果想要永久生效可以将上述参数在MySQL配置文件(一般为:/etc/my.cnf)中修改。
基于事务主从复制的MySQL配置文件配置结果如下:
# 启动日志
log_bin=mysql-bin
# 日志存储格式(默认为mixed,可以根据自己下情况进行修改)
binlog_format=mixed
# 设置server_id(注意主库和从库的server_id不能相同而且必须唯一)
server_id=1
# 指定同步的数据库,如果不写或者注释掉,默认是同步所有数据库(此参数在主库设置)
binlog-do-db = 数据库
# 指定忽略的数据库(如果没有直接注释掉就可以,此参数在主库设置)
binlog-ignore-db=mysql
# 追加忽略同步的数据库
binlog-ignore-db=数据库
# binlog日志的保留时间(这里以7天为例)
expire_logs_days=7
# 设置复制连接超时时间
slave_net_timeout = 30
# 设置复制并发数
slave_parallel_workers = 8
#跳过错误,继续执行复制操作(否:直接注释此参数即可)
slave-skip-errors
有遗漏或者不对的可以在我的公众号留言哦