MYSQL内建的复制功能是构建基于MYSQL的大规模、高性能应用的基础,这类应用使用了所谓的“水平扩展”的架构。

复制解决的基本问题是:让一台服务器的数据与其他服务器保持同步。
MYSQL支持两种复制方式:基于行的复制和基于语句(逻辑复制)的复制。基于语句的复制比基于行的早出现。他们各自存在优缺点。具体场景,具体选择。

  • 复制解决的问题:
    复制常见的用途:
  1. 数据分布
    在不同的地理位置来分布数据备份,例如不同的数据中心。
  2. 负载均衡
    通过MYSQL复制可以将读操作分布到多个服务器上,实现对读密集型应用的优化,并且实现方便,通过简单的修改应用代码的数据库连接就能实现基本的负载均衡。
  3. 备份
    对于备份来说,复制是一项很有意义的技术补充,但是复制不是备份也不能够取代备份。(不要因为有了复制,就不再对数据库进行备份)
  4. 高可用性和故障切换
    复制能够帮助应用避免MYSQL单点失败。
  5. MYSQL升级测试
    这种做法比较普遍,使用一个更高版本的MYSQL作为备库,保证在升级全部实例前,查询能够在备库按照预期执行。
    注意:MYSQL的复制是向后兼容的,新版本的服务器可以作为老版本服务器的备库,但是反之,则不可行,因为老版本的服务器作为新版本的备库时,老版本的服务器不能解析新版本采用的新的特性和语法,另外使用的二进制文件的文件( binary log)也可能不同。
  • 复制如何工作(复制的原理)

MYSQL的复制总的来说,复制有三个步骤:

  1. 在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被成为二进制日志事件)。
  2. 备库将主库上的日志复制到自己的中继日志(Relay Log)中。
  3. 备库读取中继日志中的事件,将其重放到备份数据之上。

如下图:

MySQL无损复制Ack mysql复制方式_服务器

  • 配置复制
    具体参见:《高性能MYSQL》的10.2章节。

参考:《高性能MYSQL》