1 复制概述
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台服务器上,从库本身也可以被配置为另外一台服务器的主库。
MySQL 支持两种复制方式:基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录二进制日志,在从库重放日志的方式来实现异步的数据复制。这意味着,在同一时间点从库上的数据可能与主库存在不一致的问题,并且无法保证主从之间的数据延迟。
1.1 复制解决的问题
- 数据分布
MySQL 复制通常不会对带宽造成很大压力,且你可以随意停止或开始复制,并在不同的地理位置来分布数据备份,如不同的数据中心。 - 负载均衡
通过 MySQL 复制可以将度操作分布到多个服务器上,实现对读密集型应用的优化。可以使用 DNS 轮询或其他负载均衡算法将读请求分发到多个 MySQL 实例上,减少每个实例的负载,提高并发。 - 备份
对于备份来说,复制是一项很有意义的技术补充。但复制并不是备份也不能取代备份。 - 高可用和故障切换
复制能够帮助应用避免 MySQL 单点故障,一个包含复制的设计良好的故障切换能够显著缩短宕机时间。 - MySQL升级测试
使用一个高版本的 MySQL作为备库,保证在升级全部实力前,查询能够在从库按照预期执行。
1.2 复制如何工作
总的来说,复制有是哪个步骤:
- 在主库上把数据更改记录到二进制日志(Binary Log)中。
- 从库将主库上的日志复制到自己的中继日志(Relay Log)中。
- 从库读取中继日志中的事件,将其重放到从库数据库。
示意图如下所示
2 复制配置
2.1 基本配置
为 MySQL 服务器配置复制非常简单,但由于场景不同,基本的步骤还是有所差异。假设有服务器 server1(IP:192.168.2.3)和 server2(IP: 192.168.2.4)
,最基本的场景是新安装的主库和备库,总的来说分为以下几步:
- 在每台服务器上创建复制帐户
通过如下语句创建复制帐号,并赋予其一定的权限
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT <