暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MYSQL主从库复制原理

蜜蜂点滴 2020-01-15
183

MYSQL主库从库复制原理

一、文件同步

1、文件级别同步方案

scp,Nftp,http,samba,rsync,csync2,union

http://oldboy.blog.51cto.com/2561410/775056

思想:①文件级别也可以利用mysql,MongoDB等软件。

      ②两个服务器同时写数据,双写就是一个同步机制。

2、文件系统级别同步

drbd(基于文件系统同步网络RSID1),同步几乎任何业务数据。

mysql数据库的官方推荐drbd同步数据,所有单点服务如:NFS,MFS(DRBD)等都可以用drbd。

3、数据库同步方案

a.自身同步机制:

mysql replication,mysql主从复制(逻辑的SQL从写)。

oracle dataguard(物理的磁盘块,逻辑的SQL语句从写)。

b.第三方drbd,参考

http://oldboy.blog.51cto.com/2561410/1240412

二、MYSQL主从复制介绍

MYSQL支持单向、双向、链式级联、实时、异步复制。在复制过程中,一台服务器充当主服务器(master),而一个或多个其他的服务器充当从服务器(slave)。复制可以是单向,双向,环状。

1、主从服务器互为备份

主从服务器架构的设置,可以大大加强数据库架构的健壮性,主从同步本身就是备份。

主从备份方式:

①主库的binlog放到从库,应用到从库里;

②双写;

③用应用程序写1分钟的log放到内存里;

④异步同步换成实时同步;谷歌的半同步插件,要成功都成功,从向主反馈信息;

2、主从服务器读写分离分担网站压力

主从服务器架构可通过程序(php,java)或代理软件(mysql-proxy,amoeba)对用户(客户端)的请求实现读写分离,即通过在从服务器上仅仅处理用户的select查询请求,降低用户查询相应时间及读写同时在主服务器带来的压力。如何分离:大公司通过程序分离;测试环境:代理软件(mysql-proxy,amoeba);门户网站:分布式dbproxy(读写分离,hash负载均衡,健康检查)。

3、根据业务拆分从库

三、理论

1、从库配置连接主库:

CHANGE MASTER TO

MASTER_HOST='10.10.11.163',

MASTER_PORT=3306,

MASTER_USER='用户名',

MASTER_PASSWORD='密码';

MASTER_LOG_FILE='mysql-bin.000010',

MASTER_LOG_POS=4226;

start slave:开启同步;

从库:中继日志,relay-log;master.info

①配置从库

②master-data=1,做从库;

③开启开关之前,主从库一致;

④建立主库账号专门用于从库的账号;

⑤主库要打开binlog开关,否则无法实现同步;

⑥从库打开开关的过程实际是让IO和SQL工作的工程。

2、主从复制原理过程

简单描述MYSQL replication的复制过程

①Slave服务器上执行start slave,开启主从复制开关。

②此时,Slave服务器的IO线程会通过在Master上授权的复制用户权限请求连接Master服务器,并请求从指定Binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令时指定的)之后发送Binlog日志内容;

③Master服务器接收到来自Slave服务器的IO线程的请求后,Master服务器上负责复制的IO线程根据slave服务器的IO线程请求的信息读取指定Binlog日志文件指定位置之后的Binlog日志信息,然后返回给slave端的IO线程。返回的信息中除了Binlog日志内容外,还有本次返回日志内容后在Master服务器端的新的Binlog文件名称以及在Binlog中的下一个指定更新位置;

④当slave服务器的IO线程获取到来自master服务器上IO 线程发送日志内容及日志文件及位置后,将binlog日志内容依次写入到slave端自身的relay log(中继日志)文件(MYSQL-relay-bin.XXXXXX)的最末端,并将新的Binlog文件名和位置记录到master-info文件中,以便下一次读取maser端新的binlog日志时能够告诉maser服务器需要从新binlog日志的哪个文件位置开始请求新的binlog日志内容。

⑤slave服务器端的sql线程会实时的检测本地relay log中新增加的日志内容,然后及时的把log文件中的内容解析程在master端曾经执行的sql语句的内容,并在自身slave服务器上按语句顺序执行应用这些SQL语句,应用完毕后清理应用过的日志。

⑥经过上面的过程,就可以确保master端和slave端执行了同样的sql语句。当复制状态正常的情况下,master端和slave端的数据是完全一样的,mysql的同步机制是有一些特殊的情况的。


文章转载自蜜蜂点滴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论