五 主从复制 Replication(重要@!!!!!!)
5.1、介绍
基于主库二进制日志实时恢复到备库。
5.2、原理
5.2.1 主从复制的前提
(1)两台或两台以上数据库实例
(2)主库要开启二进制日志
(3)主库要有复制用户
(4)从库需要在开启复制功能之前,获取到主库之前的数据(主库备份,并且记录binlog当时位置)
(5)从库第一次开启主从复制,必须获知主库IP?port?user?password?从哪开始复制?
change master to IP?port?user?password?从哪开始复制?
(6)从库要开启复制相关线程:IO、SQL
(7)从库需要记录复制相关用户信息,还应该记录到上次已经从主库请求到哪个二进制日志
(8)从库请求过来的binlog,首先要存下来,执行binlog,执行过的信息保存下来
5.2.2 主从复制涉及到的文件和线程
主库
binlog:记录主库发生过的修改事件
dump Thread: 给从库传送(TP)二进制日志线程
从库
relay-log.000001: 存储所有主库TP过来的binlog事件。
master.info : 存储复制用户信息,上次请求到的主库binlog的位置点。
IO线程: 接收主库发来的binlog日志,也是从库请求主库的线程
SQL线程:source一下relay-log中的日志。
5.2.3 原理(见图。)
(1)通过change master to 语句告诉从库主库IP port?user?password +从哪个binlog开始自动复制
(2)从库通过 start slave 命令,开启复制必要线程IO线程和SQL线程
(3)从库通过IO线程,拿着change的用户密码相关信息,连接主库,主库验证连接的合法性,验证成功通知客户端连接ok
(4)从库连接主库成功后,会拿着 change master to 语句中提供的binlog position (3号文件120位置)号问主库,有没有比这个新的。
(5)主库接收到从库请求后,查找show master status 比较一下,如果有新的,就切割日志并通过dump thread TP给从IO。
(6)从库通过IO线程接收到主库发来的binlog,存储到TCPIP缓存中,并立即返回ACK,并更新master.info中binlog信息
(7)将TCPIP缓存中数据写入relay-log日志文件中
(8)SQL线程读取relay-log.info ,获取到上次已经执行过的relay-log的位置点,从这之后继续执行后续relay-log日志,执行完成后,更新relay-log.info到此位置一次主从复制就完成