6.3MySQL一主一从

主从复制原理

1、slave服务器上执行start salve命令开启主从复制开关,主从复制开始进行;

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.xxxxxx)的最末端,并将新的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

2、修改server-id

server-id=1

3、建立授权账号

grant replication slave on *.* to 'repl'@'192.168.0.%' identified by '123456';

4、查看数据库状态

show master status;

查看binlog文件和position

slave从库操作:

1、关闭二进制日志

2、修改server-id

3、执行同步

change master to master_host='192.168.0.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='log_bin.000001',master_log_pos=446;

写入脚本

mysql<< EOF

change master to master_host='192.168.0.100',

master_port=3306,

master_user='repl',

master_password='123456',

master_log_file='log_bin.000001',

master_log_pos=446;

EOF

posted @ 2022-07-12 14:48  胖丿虎  阅读(26)  评论(0编辑  收藏  举报