您的位置:首页 > 数据库 > MySQL

Mysql复制(Master/Slave实现)

2015-01-23 16:19 162 查看
1、Mysql复制方式:

* 基于行的复制(5.1中引入)

* 基于语句的复制

注:都是通过在主库上记录binlog、在备库上重放日志的方式来实现异步的数据复制的。这意味着,在同一时间点备库上的数据可能与主库存在不一致性,并且无法保证主备之间的延迟。

2、应用场景:

* 数据分布: Mysql复制通常不会对带宽造成很大的压力,但是基于行的复制会比传统的基于语句复制模式的带宽压力更大些。

* 负载均衡: 通过Mysql复制可以装读操作分布到多个服务器上,实现对读密集型应用的优化,并且实现方便,通过简单的代码就可以实现基本的负载均衡。(如:对机器人名做硬编码或将一个机器名指向多个IP地址。等等)

* 备份数据

* 高可用性和故障切换

* Mysql升级测试

3、复制工作流:

1)在主库上把数据更改记录到二进制日志中。

每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中。Mysql会按事务提交的顺序而非每条语句的执行顺序来记录二进制日志。记录完 成后,主会告诉存储引擎可以提交事务;

2)备库将主库上的日志复制到自己的中继日志中。

由备库启动一个工作线程,称为I/O线程, 跟主库建立一个连接,然后在主库上启动一个特殊的二进制转储(binlog dump)线程(该线程没有对应的sql命令),这个二进制转储线程会读取主库上二进制日志中的事件。它不会对事件进行轮询。如果该线程追赶上主库,将进入休眠状态,直到主库发送信号通知其有新的事件产生才会被唤醒,备库IO线程会将接收到的事件记录到中继日志中。

3)备库读取中继日志中的事件,将其重放在备库数据之上。

4、XXOO:

Mysql基于语句与行复制,感觉与Redis的RDB与AOF实现都差不多。 估计Master与Slave这样的架构都这么实现吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: