简述
MySQL从3.23版本开始提供复制的功能。复制是指将主数据库的DDL和DML操作通过二进制日志传到复制服务器(也叫从服务器)上,然后在从服务器上对这些日志重新执行(也叫重做),从而使得从服务器和主服务器的数据保持同步。
MySQL支持一台服务器同时向多台从服务器进行复制,从服务器同时也可以作为其他服务器的主服务器,实现链状的复制。
优点
1. 如果主服务器出现问题,可以快速切换到从服务器提供服务;
2. 可以在从服务器上执行查询操作,降低主服务器的访问压力;
3. 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。
工作原理
MySQL的复制有三个步骤:
1. 在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被称为二进制日志事件);
2. 备库将主库上的日志复制到自己的中继日志(Relay Log)中;
3. 备库读取中继日志中的事件,将其重放到备份数据之上。
如图所示,显示了在备库中有两个运行的线程,在主库上也有一个运行的线程:和其他普通连接一样,由备库发起的连接,在主库上同样拥有一个线程。
这种复制架构实现了获取事件和重放事件的解耦,允许这两个过程同时进行。I/O线程能够独立于SQL线程之外的工作。
安装配置
(1)确保主从服务器上安装了相同版本的数据库;
(2)在主服务器上,设置一个复制使用的账号,并授予REPLICATION SLAVE权限。
grant replication on *.* to rep1@192.168.1.171 identified by '123456'
(3)修改主数据库服务器的配置文件my.cnf,开启BINLOG,并设置server-id的值。这两个参数的修改需要重新启动数据库服务才可以生效。
server-id=1
(4)在主服务器上,设置读锁定有效,这个操作是为了确保没有数据库操作,以便获得一个一致性的快照;
sql>flush tables with read lock
(5)