MYSQL内建的复制功能是构建基于MYSQL的大规模、高性能应用的基础,这类应用使用了所谓的“水平扩展”的架构。
复制解决的基本问题是:让一台服务器的数据与其他服务器保持同步。
MYSQL支持两种复制方式:基于行的复制和基于语句(逻辑复制)的复制。基于语句的复制比基于行的早出现。他们各自存在优缺点。具体场景,具体选择。
- 复制解决的问题:
复制常见的用途:
- 数据分布
在不同的地理位置来分布数据备份,例如不同的数据中心。 - 负载均衡
通过MYSQL复制可以将读操作分布到多个服务器上,实现对读密集型应用的优化,并且实现方便,通过简单的修改应用代码的数据库连接就能实现基本的负载均衡。 - 备份
对于备份来说,复制是一项很有意义的技术补充,但是复制不是备份也不能够取代备份。(不要因为有了复制,就不再对数据库进行备份) - 高可用性和故障切换
复制能够帮助应用避免MYSQL单点失败。 - MYSQL升级测试
这种做法比较普遍,使用一个更高版本的MYSQL作为备库,保证在升级全部实例前,查询能够在备库按照预期执行。
注意:MYSQL的复制是向后兼容的,新版本的服务器可以作为老版本服务器的备库,但是反之,则不可行,因为老版本的服务器作为新版本的备库时,老版本的服务器不能解析新版本采用的新的特性和语法,另外使用的二进制文件的文件( binary log)也可能不同。
- 复制如何工作(复制的原理)
MYSQL的复制总的来说,复制有三个步骤:
- 在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被成为二进制日志事件)。
- 备库将主库上的日志复制到自己的中继日志(Relay Log)中。
- 备库读取中继日志中的事件,将其重放到备份数据之上。
如下图:
- 配置复制
具体参见:《高性能MYSQL》的10.2章节。
参考:《高性能MYSQL》