MySQL主从复制原理深入解析与练习
MySQL主从复制画图描述:
MySQL主从复制原理上图详解:
① 用户做crud操作,写入数据库,更新结果记录到binlog中;
② 主从同步是主找从的,从库IO发起请求,主库的主进程看从库的master change中给的参数是否合法,如果合法主进程交给IO进程进行3操作,否则拒绝;
③ 主库根据master的位置点,从这个位置点的binlog日志一直到binlog最后,将其准备发送给从库;
④ 将找到的binlog日志发给从库,并且还会发送新的日志点;
⑤ 从库收到binlog日志,将其写入relay-log(中继日志)中;
⑥ 从库IO进程再向master info保存主库传过来的最后的binlog日志的位置点;
⑦ 从库IO是循环发起请求的,发了再要,不会顾及SQL读取中继的操作。
从库IO根据新的日志点,向主库发起请求,主库执行3操作再,再发送新的binlog给从库,从库再执行5操作;
⑧ 其实当第一次向relay-log中放数据时,SQL进程就已经知道,SQL进程将relay-log中的sql语句转换成数据,写入从库,从而实现同步;(relay-log和master info也不会交互)
⑨ SQL读取中继日志,并不会一次性全部读完,会把读取到的日志点存放到relay-log.info中。
主从同步实现之前应该具备的条件和做的准备:
① 从库有IO和SQL两个线程,主库有IO一个线程
② 开启主从同步之前,主从库相对与一个日志点之前的数据是一致的;
(即先要将主库全备,并且记录全备的binlog:show master status;然后将全备的内容放入从库,即可完成)
③ 开启主从同步之前,要在主库建立从库进行同步的账号;
(3306mysql>grant replication slave on *.* to ‘rep’@’192.168.168.101’ identified by ‘123’;)
④ 主库要打开binlog开关;
⑤ 从库要与主库进行主从同步,要做一下配置
(
3307mysql>CHANGE MASTER TO
MASTER_HOST=’192.168.168.101’,
MASTER_PORT=’3306’,
MASTER_USER=’rep’,
MASTER_PASSWORD=’123’,
MASTER_LOG_FILE=’mysql-bin.000002,’
MASTER_LOG_POS=’238’;
)
注:master_host参数里面最好不要是域名或者localhost,最好是IP;对于最后两个参数,如果主库做全备的时候加了参数--master-data=1,最后两条就不用指定了,如果没有,主库做全备之前之后要mysql>show master status;查看日志点,并保证之前之后一致
⑥ 在从库mysql>start slave;开启从库的IO和SQL进程,并且查看mysql>show slave status\G;查看(slave_IO_Running:yes slave_SQL_Rnning:yes scends_behind_master:0)如果这三个参数是这样,基本上,主从复制配置完成。
本文出自 “qb的博客” 博客,谢绝转载!
原文地址:http://qinbin.blog.51cto.com/11773640/1929063