linux MySql 的主从复制部署

MySql 复制

mysql 复制:将某一台主机上的 Mysql 数据复制到其它主机(slaves)上,并重新执行一遍从而实现 当前主机上的 mysql 数据与(master)主机上数据保持一致的过程我们可以称为复制。

复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新 写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器 的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功 更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。


105

MySql 复制能够解决什么问题

1、数据的分布(Data Distribution)

扫描二维码关注公众号,回复: 6990506 查看本文章

2、负载均衡(Load balancing) | mysql 读写分离

3、可以实现数据的备份(Backups),但是不能当真正意义上数据备份来用

4、高可用性和容错行(比如双主模型中的互为主从能实现高可用)

MySql 复制原理

1.工作原理图


106

从上图来看,Mysql 的复制就三个步骤:

1)在 Master 服务器将改变的数据记录到二进制日志(binary log)中(这些记录叫做二进制日志事件)

2)Slave 服务器将 Master 服务器上的二进制日志拷贝到自己的中继日志(relay-log)中

3)Slave 服务器读取中继日志中的事件,然后将改变的数据写入到自己的数据库中

2.说明三步流程

第一步:是在 Master 服务器上记录二进制日志。在每个更新数据的事务完成之前,Master 服务器 都会将数据更改记录到二进制日志中。即使事务在执行期间是交错的,Mysql 也会串行地将事务写 入到二进制日志中。在把事件写入二进制日志之后,Master 服务器告诉存储引擎可以提交事务了 第二步:是 Slave 服务器把主服务器的二进制日志拷贝到自己的硬盘上,进入所谓的“中继日志” 中。首先,它启动一个工作线程,叫 I/O 线程,这个 I/O 线程开启一个普通的客户端连接,然后启 动一个特殊的二进制日志转储进程(它没有相应的 SQL 命令)。这个转储进程 Master 服务器的二 进制日志中读取数据。它不会对事件进行轮询。如果 3 跟上了 Master 服务器,就会进入休眠状态 并等待有新的事件发生时 Master 服务器发出的信号。I/O 线程把数据写入 Slave 服务器的中继日志 中

第三步:SQL 线程读取中继日志,并且重放其中的事件,然后更新 Slave 服务器的数据。由于这个

线程能跟上 I/O 线程,中继日志通常在操作系统的缓存中,所以中继日志的开销很低。SQL 线程执 行事件也可以被写入 Slave 服务器自己的二进制日志中,它对于有些场景很实用

上图中显示了在 Slave 服务器有两个运行的线程,在 Master 服务器上也有一个运行的线程:和其 他普通连接一样,由 Slave 服务器发起的连接,在 Master 服务器上同样拥有一个线程

3、配置注意事项

1、Master 服务器必须开启二进制日志

2、Master 和 Slave 的 Server-id 不能相同

3、同一个 Master 的多个 Slave,Server-id 也不能相同

4、Binlog_format 最好相同

5、在 Slave 服务器上配置 log-slave-updates=1 时,也需要开启二进制日志;如果可以推荐使用

read_only 选项,该选项会阻止没有权限的线程修改数据

猜你喜欢

转载自www.cnblogs.com/fanweisheng/p/11328125.html