MYSQL主从复制
类别
基于日志点的复制
支持MMM和MHA架构
基于GTID方式的复制
GTID= source_id:transaction_id
Slave增量同步Master的数据依赖于其未同步的事务ID
支持MHA架构
在5.7版本之上,建议使用GTID方式。
方式
异步复制
异步复制.png
文字解释
在主数据库数据库修改提交后记录到二进制日志中,通知从服务器进行复制操作。
半同步复制
半同步复制.png
文字解释
在主服务器数据库修改,并记录到二进制日志中,从服务器将主服务器修改的日志同步到中继日志中,然后向主服务器发送确认信息,然后主服务器提交修改。
主服务器有一个过期时间 ,超过该时间后,主服务器不会等待从服务器发回的确认信息,直接提交。
基于日志点的复制
流程图
主从复制的原理.png
流程解释
主数据库服务器要把数据的修改记录到二进制日志中(binary_log),需要注意的是 查看是否开启了二进制日志。
在从服务器上启动配置一个IO_THREAD,该线程在master打开一个普通连接,主要工作是binlog dump process。
如果读取的进度已经跟上了master,就进入睡眠状态并等待master产生新的事件。
根据Logfile:pos(同步的日志偏移量) 将主服务器的中新的修改日志传回到从服务器。
从服务器接受日志,写入到中继日志中。
从服务器通过SQL_THREAD 读取中继日志中的事件,并对从服务器上对这些事件写入到自己的数据库中。
配置主从复制步骤
主服务器
异步复制
必须开启binlog 日志,开启gtid(可选)
建立同步所用的数据库账号
使用master_data参数备份数据库
我们知道在同步之前,从服务器需要给主服务器传送一个日志偏移量或gtid值,这个值的来源就是现将备份的master_data备份的数据库复制到从服务器时的偏移量值。
将备份文件传输到从服务器上,恢复数据库,为主从复制做准备。
半同步复制
安装插件: rpl_semi_sync_master soname 'semisync_master.so'
设置半同步超时时间: set persist rpl_semi_sync_master_timeout = 500
启动半同步: set persist rpl_semi_sync_master_enable = on
从服务器
异步复制
开启binlog日志(可选),开启gtid(可选)。
恢复主服务器上的备份数据库(最后是同一版本)
配置复制链路参数(change master命令)
启动复制 start slave
半同步复制
安装插件:rpl_semi_sync_slave soname 'semisync_slave.so'
开启半同步: set persist rpl_semi_sync_slave_enable = on
重启线程:stop slave io_thread; start slave io_thread user = 'xxx' password='xxxx';
几个基本命令
查看是否开启二进制日志:show variables like 'log_bin%';
查看是否启用了gtid: show variables like 'gtid_mode'; 如果启用gtid,必须配置全局变量 xx.cnf中的几个配置
gtid全局配置.png
数据库备份:mysqldump导出命令
赋复制权限:grant replication slave on \*.\* to user@ip
数据库导入:mysql -uroot -p < xx.sql
从服务器配置命令 :change master
changmaster.png
启动复制:start slave user='xxx' password='xxx';
主从复制架构
目前MYSQL主流支持的架构方式有
MMM架构
MHA架构
MGR架构
作用
对主从复制的集中的MASTER进行健康监控
当MASTER宕机后,把VIP迁移到新MASTER
VIP:独立于数据库物理IP之外的IP。
前端应用通过VIP绑定数据库
重新配置集群中的其他slave对新的master同步
MMM架构(master master mysql)
优缺点
优点
提供读写VIP配置,达到高可用
工具包相对完善。
故障转移后,可对MYSQL继续监控。
缺点
故障转移时,无法保重数据的完整性。
不支持GTID
原理图解
MMM图解.png
宕机后.png
文字解释
首先 主服务器和主备服务器是相互复制,同时主的服务器下有从服务器。MMM架构会为主服务器分配一个写VIP,会为多个从服务器分配多个读VIP。
当主服务器宕机时,MMM机制会将从服务器迁移至主备服务器上,并且将写VIP迁移至主备服务器。
从服务器宕机时,会将该服务器上的VIP迁移至其他的从服务器上。
最后需要一台监控服务器,安装 MMM的监控组件。
架构资源
MMM架构资源.png
适用场景
基于日志点的主从复制方式
主主复制的架构
考虑读高可用的场景
MHA架构
优缺点
优点
支持GTID和基于日志的复制方式
保证数据的完整性
缺点
需要自行开发写VIP迁移脚本
只监控MASTER而没有对Slave实现高可用的读。
原理图解
MHA1.png
MHA2.png
文字解释
我们可以看到 主从服务器只需要安装MHA的 mha_node组件,而我们需要一个另外的监控服务器,我们需要安装mha_manage和mha_node组件
如果主服务器宕机,则从 从服务器中选择一台最接近主服务器的机器升级为主服务器,同时将写VIP迁移至这台服务器上。
架构架构资源
MHA架构资源.png
使用场景
使用GTID复制方式
使用一主多从的主从复制方式。
更少的数据丢失。
MGR架构
架构图解
mgr架构.png
MGR已经不存在从服务器的角色了,可以支持客户端通过多个主服务器,同时修改数据。
复制原理
MGR原理.png
文字解释
由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。如上图所示,由3个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发生组间通讯,由2个节点决议(certify)通过这个事务,事务才能够最终得以提交并响应。
两种模式
单主模式
MGR单主模式.png
只有一个主服务器可以读写操作,另外的只可以读。具体哪个节点是primary节点 是读写服务器,这个需要MGR自己去判定,如果出现宕机,则会选择另外一台作为primary节点。
PS:需要把 group_replication_single_primary_mode = ON 开启。
多主模式
mgr多主模式.png
与单主模式相反,可以由多个主服务器进行读写操作,但是由于事务的顺序不一致,会导致死锁或者数据冲突。如果产生冲突,MGR会选择其中一个节点的数据进行回滚。目前暂时不推荐。
其他问题
如何解决读负载过大问题?
读写分离,使用从服务器进行读操作,主服务器尽量只进行写操作。
如何解决写负载过大问题?
分库分表,最好使用数据库中间件来实现(MyCat,ProxySql,Maxscale)
监控指标
由于不是专业的DBA,所以只是列出了需要监控的指标。具体的语句可以google以及baidu。
功能指标.png
性能指标.png