MySQL主从复制(1)基于binlog的传统主从复制

TangLu 6118 2021-03-15

一、MySQL主从复制介绍

MySQL主从复制功能是对MySQL的一种横向扩展方案,主从复制依赖于MySQL自身的binlog实现。主节点的Binlog记录了数据库所有DDL与DML操作(SELECT、SHOW等语句不对数据产生变化,不会有记录,另外临时表也不会有记录),从库将binlog日志复制到自己的中继日志Relaylog中,然后根据Relaylog做相同的操作,实现了数据的同步(对binlog日志的介绍与管理可以参考《【MySQL运维】binlog日志介绍、管理与数据恢复》)。

通过“数据变更在主库执行,查询请求在从库执行”这样的形式可以在一定程度上实现读写分离。如果配置了无损复制,从库一定程度上还可以当做备份使用,甚至配置一台节点为延迟从库。有了主从复制后,还可以实现服务滚动升级(先升级从库进行测试,然后手动切换主从后升级其他从库)。主从结构通常可以分为一主一从、一主多从、级联复制等,如果是一主多从的架构需要注意从服务器的数量不能太多,否则会因为日志的传输给主库带来过多的带宽消耗(曾遇到主库网卡异常导致从库一直卡住的原因,当时一直思考的是大事务原因,结果是硬件导致)。


二、MySQL主从复制配置

在部署主从架构前先确保主从节点的MySQL版本一致、时间一致

mysqlzc1.png


1、binlog主从相关配置选项(由于从库也随时有可能提升为主,所以建议都配成一样的)

配置文件内容可以参考——《【MySQL运维】MySQL配置文件示例与说明


2、主库建立一个账号并给与数据复制权限

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'192.168.36.11' IDENTIFIED BY '123456789';


3、查看主库当前的position信息,从库会从该位置点进行复制

mysql > show master status \G


4、从库使用主库上配置好的复制用户,并且指定好主库的position信息

stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.145.85',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-bin.000004',MASTER_LOG_POS=0;

#MASTER_HOST:MASTER服务器的IP
#MASTER_USER:有slave权限的用户,就是GRANT所授权的用户
#MASTER_PASSWORD:从库用户的密码
#MASTER_LOG_FILE:在主库上执行show master status语句可以查看日志名
#MASTER_LOG_POS=333:这个位置决定了从库从哪个位置开始复制,实测写0也可以,从头复制


5、启动从库复制线程,需要为两个yes

mysql > start slave;  #启动从库
mysql > show slave status \G  #查看从库状态


三、主从状态查看

1、查看主库Position信息与从库状态

show master status \G  #查看主库binlog position信息
show slave status \G     #查看从库状态


2、从库状态关键指标

· Read_Master_Log_Pos:从库读取到主库二进制日志到哪个位置

· Exec_Master_Log_Pos:从库执行到主库二进制日志到哪个位置。如果和Read_Master_Log_Pos一致代表数据是同步的

· Relay_Log_File:从库会将binlog记录到中继日志中,这里标识了当前中继日志是哪一个

· Relay_Master_Log_file:当前中继日志文件所对应的binlog日志文件

· Seconds_behind_master:从服务器比主服务器慢了多少秒,为0代表没有延迟。这里的计算方式为“从库当前系统时间-从库SQL线程正在执行的事务时间戳-主从节点之间的系统时间差”。如果在复制过程中修改了系统时间会导致主从延迟不可靠的问题,除非重启IO线程

· Slave_IO_Running、Slave_SQL_Running:如果有一项为No都表示主从异常。IO Thread的作用是从Master端请求二进制日志并存放到Slave端的中继日志中;SQL Thread的作用是将中继日志里的事件导入到SQL语句中,下图是启动slave之前的状态:

mysqlzc4.png


3、从库服务的重启

无论使用何种复制方式,如果需要重启服务,建议先stop slave再重启MySQL服务,避免复制出错

版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:【MySQL运维】/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by mysql)​问题解决
下一篇:MySQL主从复制(2)半同步复制(无损复制)与异地容灾应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码