【MySQL】配置复制拓扑

发布于:2025-08-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

什么是复制

复制是 MySQL 的一项功能,它使服务器能够将更改从一个实例复制到另一个实例
主服务器 (master) 将所有数据和结构更改记录到二进制日志中
进制日志格式是基于语句的、基于行的或混合的
从属服务器 (slave) 从主服务器请求二进制日志并在本地应用其内容
记录所有接收和应用的事件的状态,以便在服务器重启或网络故障后可以从停止的位置恢复
/从属服务器关系是一对多关系
每个从属服务器从一个主服务器读取日志
一个主服务器可以将日志传送给许多从属服务器
继从属服务器
一个中继从属服务器可以用作另一个从属服务器的主服务器
更改会传播到更多的从属服务器
可以使用更复杂的拓扑:
双向 (bi-directional) 拓扑具有两个主服务器,每个主服务器是另一个主服务器的从属服务器
(circular) 拓扑具有任意数量的服务器
每个服务器是一个主服务器并且是另一个主服务器的从属服务器
对任何主服务器的更改将复制到所有主服务器
并非每个从属服务器都必须是主服务器
多源 (Multisource) 复制允许一个从属服务器接收来自多个主服务器的事务

复制冲突

在包括多个主服务器的所有拓扑中都可能发生冲突
如果两个客户机几乎同时写入两个主服务器上的同一行,则会无法预测从属服务器上该行的最终值
终值取决于中继从属服务器上的事件顺序
在分层复制中,该行在从属服务器上的最终值由分层结构确定:
  — 如果某个中间主服务器更改了行,则从属服务器与主服务器的值不同
在循环复制中,如果发生冲突,行的最终值在各服务器之间不一致
  — 该值取决于每个主服务器上应用事件的顺序

什么时候复制

解决数据高可用、读写分离、负载均衡、备份恢复等场景需求

1、读多写少的业务,需要减轻主库压力,将查询请求分散到多个从库。
2、需要避免单点故障,确保高可用性
3. 数据备份与灾难恢复
4、需要与生产环境数据同步的测试库,开发人员调试SQL,避免直接操作生产库。

5、高并发写入或单机性能瓶颈时,进行水平扩展

配置复制

1. 规划绘制复制拓扑图
2. 标识参与复制的所有服务器(的主从关系)
要注意,从另一个主服务器复制的每个复制主服务器也是复制从属服务器
3. 为每个服务器配置唯一的 server-id
认值为 1 的无符号 32 位整数
server-id 0 的服务器(无论是从属服务器还是主服务器)都拒绝使用其他服务器进行复制
4. 配置每个主服务器
5. 配置每个复制从属服务器以连接到主服务器
6. 使用 START SLAVE 在每个复制从属服务器上启动复制

配置复制主服务器

启用 TCP/IP
复制不能使用 UNIX 套接字文件
启用二进制日志
在复制过程中,每个主服务器将其日志内容发送到每个从属服务器
创建具有 REPLICATION SLAVE 权限的用
CREATE USER user@slave_hostname IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO user@slave_hostname;
每个从属服务器必须登录到主服务器中才能从中进行复制
在有多个从属服务器的主服务器上,在主机名中指定通配符可以匹配所有从站,或者创建多个用户
备份主数据库作为从属服务器开始复制的起点
如果不使用 GTID则记录日志坐标
如果使用 mysqldump 执行备份,就要使用 --master-data 选项

配置复制从属服务器

从主服务器备份恢复
如果使用 GTID则验证是否设置了 gtid_purged 变量
在每个从属服务器上发出 CHANGE MASTER TO 语句,包含:
主服务器的网络位置
  — MASTER_HOST 和 MASTER_PORT
  — 或者,在复制期间使用 MASTER_SSL 和相关选项来加密主从服务器之间的网络流量
复制帐户用户名和口令(具有 REPLICATION SLAVE 权限)
  — MASTER_USER 和 MASTER_PASSWORD
开始复制的二进制日志坐标(如果不使用 GTID
  — MASTER_LOG_FILE 和 MASTER_LOG_POS 值存储从属服务器开始复制的二进制日志位置
  — 如果使用 GTID则指定 MASTER_AUTO_POSITION=1

网站公告

今日签到

点亮在社区的每一天
去签到