MySQL:简述数据库的主从复制
MySQL主从复制是指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。
MySQL默认采用异步复制方式,这样从节点不用一直访问主节点来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主节点中的所有数据库或者特定的数据库,或者特定的表。
一、MySQL主从复制的原理
1、当master主节点上的数据发生改变时,会将其改变写入binlog文件中。
2、slave从节点会在一定时间间隔内,探测master主节点的binlog文件是否发生改变,如果发生改变,则启动一个I/O线程请求master主节点的二进制事件。同时,master节点为每个I/O线程启动一个log dump线程,用于向其发送二进制文件。
3、slave从节点获取二进制文件后,会保存至从节点本地的relay log(中继日志)中。随后,slave从节点将启动SQL线程从中继日志中读取二进制日志,并解析成sql语句逐一执行,使得其数据和主节点的保持一致,最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。
注意:
1、master主节点需要开启binlog二进制日志功能,然后需要授予slave从节点远程连接的权限(通常为了数据安全考虑,slave从节点也开启binlog功能)。
2、Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
3、Mysql复制最好确保master主节点和slave从节点上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)。
4、master主节点和slave从节点间的时间需同步。
二、MySQL主从复制的具体步骤
1、从节点通过手工执行change master to 语句连接主节点,提供了连接的用户一切条件(user 、password、port、ip),并且让从节点知道,二进制日志的起点位置(file名、position号); start slave。
2、从节点的IO线程和主节点的dump线程建立连接。
3、从节点IO线程根据change master to语句提供的file名和position号,向主节点发起binlog的请求。
4、主节点dump线程根据从节点的请求,将本地binlog以events的方式发给从节点IO线程。
5、从节点IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中。
6、从节点SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge。