级联复制介绍

MySQL级联复制是一种MySQL复制的类型,它复制一个主节点更新的事件和与更新事件相关的任何事件。MySQL级联复制可以用于限制复制到特定节点,定制特定的数据集合副本,或避免无限循环复制。MySQL级联复制有两种方法:串级复制和环形复制。

串级复制是指MySQL的一个从节点被另一个节点作为主节点的复制的过程。主节点更新数据后,会被传递到所有与之建立了从属关系的节点,从而形成一个串联的复制数据流。

环形复制是指多个MySQL的从节点形成一个环,数据更新从主节点传递到第一个从节点,在环中传递并最终传递回主节点。环形复制需要控制复制操作,避免数据更新在环中永久循环。

无论是串级复制还是环形复制,都需要考虑数据同步的一致性和复制的稳定性。建议在MySQL级联复制前仔细规划仔细检查配置和环境。

级联复制的配置

1、参考上一篇文章配置主从复制节点

2、第三台从节点还原数据库备份

3、更改第二台从节点的配置文件

[mysqld]
server-id=18
log_bin #开启二进制日志
log_slave_updates #默认情况下从节点不记录从主节点复制的二进制日志文件的sql执行,开启log_slave_updates后,会进行记录在从节点二进制日志中,从而实现作为下一从节点的主服务器
read-only

4、配置第三个从节点,更改备份的sql文件

[root@centos8 ~]#vim /data/all.sql
CHANGE MASTER TO
MASTER_HOST='第二台从节点的iP',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=523;

5、开启复制

start slave;

23、级联复制及主主复制详解及配置_主主复制

主从复制清理

1、停止从节点的slave进程

stop

23、级联复制及主主复制详解及配置_级联复制_02

2、清除从节点信息

RESET SLAVE #从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log
RESET SLAVE ALL #清除所有从服务器上设置的主服务器同步信息,如HOST,PORT, USER和PASSWORD 等

23、级联复制及主主复制详解及配置_复制冲突_03

主从复制错误处理方法

可以在从服务器忽略几个主服务器的复制事件,此为global变量,或指定跳过事件的ID

#系统变量,指定跳过复制事件的个数
SET GLOBAL sql_slave_skip_counter = N
#服务器选项,只读系统变量,指定跳过事件的ID
[mysqld]
slave_skip_errors=1007|ALL

START SLAVE 语句,指定执到特定的点

START SLAVE [thread_types]
START SLAVE [SQL_THREAD] UNTIL
MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD

保证主从复制的事务安全

在master节点启用参数
sync_binlog=1 每次写后立即同步二进制日志到磁盘,性能差
#如果用到的为InnoDB存储引擎:
innodb_flush_log_at_trx_commit=1 #每次事务提交立即同步日志写磁盘
innodb_support_xa=ON #分布式事务MariaDB10.3.0废除
sync_master_info=# #次事件后master.info同步到磁盘

在slave节点启用服务器选项
skip-slave-start=ON #不自动启动slave


在slave节点启用参数:
sync_relay_log=# #次写后同步relay log到磁盘
sync_relay_log_info=# #次事务后同步relay-log.info到磁盘
主主复制介绍

MySQL主主复制是一种数据复制和同步的方式,它允许两个MySQL数据库实例之间互相复制数据,使得这些数据库实例在任何时间点上的数据保持相同或者一致。

在主主复制中,每个MySQL实例都扮演着主服务器和备份服务器的角色。每个服务器都可以接收并处理来自另外一个服务器的请求,同时还可以复制自己维护的数据到另外一个服务器中。

主主复制的实现原理是通过使用MySQL的复制机制,将事务日志(binlog)从一个MySQL服务器传输到另一个MySQL服务器。这种类型的复制需要对网络延迟进行管理,以确保每个服务器都及时同步数据。

在配置MySQL主主复制时,需要在两个MySQL服务器间创建一个复制链路,并确保任何接收和发送的请求都在两个服务器间进行合理的均衡和分配。此外还需要对数据表的自增长键进行管理和配置,以避免在执行数据写入操作时出现冲突。

MySQL主主复制具有以下优点和缺点。

优点:

  • 数据冗余和高可用性:由于多个MySQL实例都存储了相同的数据集合,因此在一个实例受到故障或不可用时,数据仍然可以提供给用户并保持可用状态。
  • 分布式读取:在主主复制中,每个MySQL实例都可以处理读取请求,因此可以将读操作分散到多个实例上,从而提高整个数据库系统的读取性能。
  • 故障切换:当一个实例失效时,故障切换可以在不中断服务的情况下将请求流量切换到其它备份实例,从而更好地保证数据的可靠性和高可用性。
  • 分段维护:在主主复制环境下,每个MySQL实例都可以独立维护一部分数据,降低单个MySQL实例的维护压力,提高系统的可靠性和健壮性。
  • 数据同步:主主复制使用MySQL的主从复制机制来实现数据同步,这可以确保数据的高效同步、完整性和一致性。

缺点:

  • 可能存在数据冲突:在主主复制中,由于多个MySQL实例都可以写入数据,可能会出现数据冲突,需要通过合理的配置和管理来避免。
  • 需要管理主键:如果多个MySQL实例都可以写入数据,可能会导致主键冲突,需要进行合理的主键管理和配置,以避免数据冲突。
  • 复杂性较高:MySQL主主复制需要进行复杂的配置和管理,网络延迟和基础设施问题可能导致数据同步失败,需要进行定期维护和监控。
  • 基础设施要求高:MySQL主主复制需要多个MySQL实例之间稳定的网络连接和高性能的数据传输能力,这可能需要进行额外的投资和升级。
主主复制的配置

考虑要点:自动增长id

配置一个节点使用奇数id

auto_increment_offset=1 #开始点
auto_increment_increment=2 #增长幅度

另一个节点使用偶数id

auto_increment_offset=2
auto_increment_increment=2

配置要点

(1) 各节点使用一个惟一server_id
(2) 都启动binary log和relay log
(3) 创建拥有复制权限的用户账号
(4) 定义自动增长id字段的数值范围各为奇偶
(5) 均把对方指定为主节点,并启动复制线程

1、在第一台master上配置my.cnf文件

23、级联复制及主主复制详解及配置_复制冲突_04

2、重启服务

23、级联复制及主主复制详解及配置_主主复制_05

3、创建复制账户并授予权限

grant replication slave on *.* to "copy"@"10.0.0.%" identified by "lgw@1234";

4、在第二台master上配置my.cnf文件

23、级联复制及主主复制详解及配置_级联复制_06

5、重启第二台master服务

23、级联复制及主主复制详解及配置_级联复制_07

6、在第二台msater上配置从节点信息,参考上一篇文章配置

23、级联复制及主主复制详解及配置_复制冲突_08

7、启动slave

23、级联复制及主主复制详解及配置_复制冲突_09

8、在第一台master上执行change maste to 信息

23、级联复制及主主复制详解及配置_级联复制_10

9、启动slave

23、级联复制及主主复制详解及配置_复制冲突_11

10、主从复制配置完成

23、级联复制及主主复制详解及配置_主主复制_12

主主复制冲突

1、同时创建数据库DB5;

23、级联复制及主主复制详解及配置_级联复制_13

23、级联复制及主主复制详解及配置_主主复制_14

2、同时创建表

23、级联复制及主主复制详解及配置_级联复制_15

23、级联复制及主主复制详解及配置_主主复制_16

23、级联复制及主主复制详解及配置_复制冲突_17

3、在第二台上插入数据,查看步长为2,和我们设置的配置文件对上

23、级联复制及主主复制详解及配置_级联复制_18

4、处理冲突,设置忽略5个复制事件

23、级联复制及主主复制详解及配置_主主复制_19

23、级联复制及主主复制详解及配置_复制冲突_20

23、级联复制及主主复制详解及配置_级联复制_21