6.3 MySQL一主一从

主从复制原理:

1.Slave 服务器上执行 start slave 命令开启主从复制开关,主从复制开始进行
2.此时,Slave 服务器的 I/O 线程会通过在 Master 上已经授权的复制用户权限请求连接 Master服务器,并请求从指定 binlog 日志文件的指定位置(日志文件名和位置就是在配置主从复制时执行change master 命令指定的)之后开始发送 binlog 日志内容
3.Master服务器接收到来自 Slave 服务器的I/O 线程的请求之后,其上负责复制的线程会根据 Slave 服务器的I/O线程请求的信息,分批读取指定 binlog 日文件所指定位置之后的 binlog 日志信息,然后返回给 Slave 端的I/O线程。返回的息中除了binlog 日志内容之外,还包括在 Master服务器端记录的新binlog 文件件名称,以及在新的 binlog 中的下一个指定的更新位置。
4.当Slave服务器的I/O线程获取到Master 服务器上I/O 线程发送的日志内容及志文件和位置点之后,会将 binlog 日志内容依次写入到Slave 端自身的 Relay Log(即中继日志)文件(MySQL-relay-bin.xxxxx)的最末端,并将新的 binlog 文件名和位置记 master-info 文件中,以便下一次读取 Master 端新 binlog 日志时,能够告诉 Master务器需要从新 binlog 日志的指定文件及位置开始请求新的 binlog 日志内容。
5.slave 服务器端的 SQL线程会实时地检测本地 Relay Log 中I/O线程新增加的日志内容,然后及时地把Relay Log 文件中的内容解析成SQL语句,并在自身 Slave服务器上按解析 SQL语句的位置顺序执行和应用这些 SQL语句,并将当前应用中继日志的文件名及位置点记录在 relay-log.info 中。

 

MySQL主从复制原理的重点小结:

1.主从复制是异步的逻辑的SQL语句级的复制

2.复制时,主库有一个binlog dump线程,从库有两个线程:I/O线程 SQL线程

3.从MySQL5.6开始,SQL线程可以有多个

4.主库必须要开启binlog的功能

5.用户复制的所有MySQL节点的server-id都不能相同

6.binlog只记录对数据库有更改的SQL语句,select show等未对数据库做出改变的语句不记录

 

一主 一从实战:

Master主库操作:

1.开启二进制日志
log_bin=/var/lib/mysql/log_bin
binlog_format=MIXED
2.修改server-id
server-id=1
3.建立授权账号
grant replication slave on *.* to 'rep'@'10.211.55.5' identified by 'SlR567#!3';
4.查看数据库状态
show master status;
查看binlog文件和 position
(如何在线和离线查看?)

 

  

Slave从库操作:

1.关闭二进制日志
2.修改server-id
3.执行同步
change master to master_host='10.211.55.4', master_port=3306,master_user='rep',master_password='S1R567#!3',master_log_file='log_bin.000005',master_log_pos=446;

写入脚本
mysql<< EOF
change master to 
master_host='10.211.55.4', 
master_port=3306,
master_user='rep',
master_password='S1R567#!3',
master_log_file='log_bin.000005',
master_log_pos=446;
EOF

 

posted @ 2021-03-17 18:48  huakai201  阅读(201)  评论(0)    收藏  举报