mysql主从复制集群搭建及原理

本文详细介绍了如何在CentOS7中配置MySQL 5.6的主从复制,包括master和slave节点的配置,以及如何解决同步问题。此外,还探讨了全库和部分数据库同步、GTID同步和半同步复制的实现。最后,提到了MySQL主从复制在高可用架构中的应用,如MMM、MHA和MGR。
摘要由CSDN通过智能技术生成

在centos7中安装了5.6版本的mysql——两台机器

配置master主节点

编辑文件my.cnf:vim /etc/my.cnf

#server-id表示该mysql节点在集群中的唯一标识
server-id=11
#开启binlog
#指定文件名
log_bin=master_bin
#binlog日志文件
log_bin-index=master_bin.index
skip-name-resolve

 重启mysql服务:systemctl restart mysqld,查看master状态:show master status;

 配置从节点slave

vim /etc/my.cnf

server-id=48
#打开从服务的relay-log日志。
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
#打开从服务二进制日志 
log-bin=mysql-bin
#使得更新的数据写进二进制日志中 
log-slave-updates=1
#将binlog格式配置为row防止出现错误
binlog_format=row

重启mysql服务:systemctl restart mysqld。进入mysql设置主从同步执行以下命令,这里设置了主节点的ip,端口,用户名,密码以及binlog文件名和位置。

CHANGE MASTER TO MASTER_HOST='192.168.43.11', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master_bin.000001', MASTER_LOG_POS=194;

查看slave状态:show slave status \G

注意:第一个红色框圈起来的表示同步master的binlog日志以及从哪个位置开始同步,它必须master中binlog文件名和日志位置一样;第二个红色框表示slave的读写线程和sql执行线程工作状态,如果为no则不可以工作,需要检查设置主从同步的命令是否正确或者存在其他问题。

测试

到此为止mysql主从复制集群就搭建完成了,可以通过创建数据库mdemo和表user进行测试。这里博主已经创建好了,然后再master插入一条数据试试。

insert into user values(1,'james',22);

master

slave

一般地,如果在主从过程中遇到从节点sql执行失败问题

可以通过以下命令解决问题

stop slave;  #停止同步
set global sql_slave_skip_counter=1;   #跳过执行错误的行
start slave;  #开始同步

 我这里是因为master删除表数据,slave不存在该数据,需要在slave中补回这条数据,然后做以上命令解决问题。

全库同步或者部分同步

以上完成的就是主从全库同步,而我们实际业务可能需要同步部分重要的数据库。例如配置只同步mdemo这个库

master节点:vim /ect/my.cnf

#需要同步的数据库
binlog-do-db=mdemo
#只保留7天的binlog日志
expire-logs-days=7
#不备份的数据库 
binlog-ignore-db=information_schema 
binlog-ignore-db=performation_schema 
binlog-ignore-db=sys

slave节点:

#如果salve库名称与master库名相同,使用本配置 
replicate-do-db=mdemo 
#如果master库名[mastdemo]与salve库名[mastdemo01]不同,使用以下配置[需要做映射] 
#replicate-rewrite-db = mdemo -> mdemo01
#还可以指定同步的表,默认全部同步
#replicate-wild-do-table=mdemo.user

配置完成后重启mysql,查看master 状态,Binlog_Do_DB和Binlog_ignore_DB分别表示同步的db和忽略的db。

GTID同步

GTID即全局事务ID,GTID同步也是基于binlog日志实现,在5.6中引入的同步方式。其原理是通过基于一个全局事务ID来标识同步进度,而全局事务ID全局唯一并且趋势递增,它保证master中提交执行的事务在主从集群中生成全局唯一的ID。GTID可以保证主节点上执行的事务在从节点中只执行一次,可以防止因为偏移量的问题导致数据不一致。

配置GTID同步

master

gtid_mode=on
enforce_gtid_consistency=on
log_bin=on
server_id=1
binlog_format=row

slave

gtid_mode=on 
enforce_gtid_consistency=on 
log_slave_updates=1 
server_id=2

重启mysql,并进入slave节点执行以下命令即可

stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.43.11', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='on.000009', MASTER_LOG_POS=194;
start slave;

mysql主从复制原理

相信大家都知道mysql主从复制主要通过binlog日志来实现的,具体来说,master节点将提交的更新事务记录到binlog中,slave通过IO线程去master节点读取binlog日志到relaylog,然后sql线程会回放relaylog,将更新操作同步到slave数据库中。

另外,我们可以通过binlog来恢复丢失的数据或者拓展新的slave,具体通过msyqldump命令将全局数据导出到sql文件,

mysqldump -uroot -p --all-databases > all.sql

 然后执行以下命令导入数据

mysql -uroot -p < all.sql

半同步复制

异步复制是在更新完master节点数据后就响应客户端,不在等待任何slave节点的同步更新数据,这样可能出现master没有写入binlog日志就宕机了,从而导致数据丢失,这是mysql默认的同步方式;半同步复制就是master更新完数据并且至少一个slave节点更新完数据后再响应客户端,如果master在给定的时间还没有收到任何来自slave的更新数据响应,则会变为异步复制不在等待slave更新操作响应就直接响应客户端

搭建半同步复制集群

master通过两个命令就可以实现

#通过拓展库安装半同步复制模块,并指定名称
install plugin rpl_semi_sync_master soname 'semisync_master.so';
#开启半同步复制
set global rpl_semi_sync_master_enabled=ON;
#查看半同步复制模块是否开启成功
show global variables like 'rpl_semi%';

slave

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = on;
stop slave;
start slave;
show global variables like 'rpl_semi%';

高可用架构

MMM,MHA,MGR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值