(我承认这是在水文章,不过大家温故而知新哈,我会继续更的)
复制(Replication)是MySQL官方提供的一种高可用高性能方案。
复制三步走
1、主服务器(master)把数据更改记录到binlog中;
2、从服务器(slave)把主服务器的binlog复制到自己的中继日志(relay log)中;
3、从服务器(slave)重做relay log中的日志,更改更新到自己的数据库中,从而达到数据一致性。
(至于binlog存储的究竟是什么,可以看看很早之前发的这篇文章:揭开binlog的神秘面纱
完成复制过程,需要三个线程参与: master 有一个线程,I/O 线程 负责将更改记录到binglog; slave 有两个线程,一个是I/O线程,负责读取主服务器的binlog; 另一个是SQL线程,复制执行中继日志。
复制功能
复制可用于备份,但不仅限于备份,还包括:
- 数据分布。复制功能不需要很大的带宽需求,因此可以在不同的数据中心之间实现数据复制。阿里的产品Canal,其实就是伪装成了一个slave,github地址在这。
- 读取负载均衡。建立多个从服务器,将读取的请求分配到从服务器,从而减少主库的压力。
- 数据库备份。
- 高可用性和故障转移。
另外
建议在从库上启用read-only选项,这样保证从库的数据仅来源与主库,避免其他线程修改数据。