Mysql主从复制

2020-11-16  本文已影响0人  zfh_51d2

MySQL 主从复制概念

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。一般主服务器负责写,而从服务器负责读,Mysql的主从复制的过程是一个异步的过程。

MySQL 主从复制作用

1.读写分离

在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

2.高可用

当系统中某个节点发生故障时,可以方便的故障切换。

3.提高读写性能

有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,这样可以提高系统的读写性能。

MySQL 主从形式

1.一主一从
2.一主多从,提高系统的读性能

一主一从和一主多从是最常见的主从架构,实施起来简单并且有效,
优点:不仅可以实现高可用,而且还能读写分离,进而提升集群的并发能力。
缺点:主库更新的数据到从库更新数据有一定的延迟。

3.多主一从

多主一从可以将多个mysql数据库备份到一台存储性能比较好的服务器上

4.双主复制

双主复制,也就是互做主从复制,每个master既是master,又是另外一台服务器的slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

5.级联复制

如果太多从库从主库同步数据,会对主库有一点压力,所以可以让一部分从库从连接主库的从库上同步数据。

主从复制的原理

例如一主一从的情况下,从库 B 跟主库 A 之间维持了一个长连接:
1.在从库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。
2.在从库 B 上执行 start slave 命令,这时候从库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。
3.主库 A 校验完用户名、密码后,开始按照从库 B 传过来的位置,从本地读取 binlog,发给 B。
4.从库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。
5.sql_thread 读取中转日志,解析出日志里的命令,并执行。

循环复制问题


在双主复制的情况下A、B库都为主库,会互相发送更新语句,所以为了避免循环执行的情况,要求两个库的 server id 必须不同,如果相同,则它们之间不能设定为主备关系。MySQL 在 binlog 中记录了这个命令第一次执行时所在实例的 server id。每个库在收到从自己的主库发过来的日志后,先判断 server id,如果跟自己的相同,表示这个日志是自己生成的,就直接丢弃这个日志。

读写分离的问题及解决办法

问题:主库更新数据到从库更新数据会存在延迟,客户端执行完一个更新事务后马上发起查询,如果查询选择的是从库的话,就有可能读到刚刚的事务更新之前的状态。
解决方案:
上一篇 下一篇

猜你喜欢

热点阅读