MySql8.0主从复制跳过错误sql

MySql8.0主从复制跳过错误sql

在 MySQL 8.0 中,主从复制时可以通过以下几种方式跳过错误的 SQL 语句:

1. 使用 sql_slave_skip_counter 跳过错误

如果从库(从节点)在复制过程中遇到错误,可以使用 sql_slave_skip_counter 参数跳过指定数量的事件。

示例

假设从库在复制时遇到错误,可以按照以下步骤跳过错误:

STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;  -- 跳过一个事件
START SLAVE;
  • sql_slave_skip_counter 的值表示跳过的事件数量。通常设置为 1,表示跳过一个事件。

2. 使用 slave_exec_mode 设置幂等模式

在从库上设置 slave_exec_modeIDEMPOTENT,可以使从库在遇到错误时自动跳过错误的事件。

示例

STOP SLAVE;
SET GLOBAL slave_exec_mode = 'IDEMPOTENT';
START SLAVE;
  • 幂等模式:在这种模式下,从库会尝试跳过错误的事件,而不是停止复制。

3. 基于 GTID 跳过错误事务

如果主从复制使用了 GTID(全局事务标识符),可以通过设置 GTID 来跳过特定的事务。

示例

假设从库遇到错误,可以通过以下步骤跳过错误的事务:

STOP SLAVE;
SET @@SESSION.GTID_NEXT= '错误的GTID';  -- 替换为实际的 GTID
BEGIN; COMMIT;
SET SESSION GTID_NEXT = AUTOMATIC;
START SLAVE;
  • GTID:全局事务标识符,用于唯一标识每个事务。需要从错误日志中获取具体的 GTID。

4. 在配置文件中设置跳过错误

可以在 MySQL 的配置文件中设置 slave-skip-errors 参数,以跳过指定的错误代码。

示例

在 MySQL 配置文件(如 /etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf)中添加以下内容:

[mysqld]
slave-skip-errors = 1032,1062,1452
  • 1032:表示删除不存在的记录。
  • 1062:表示主键冲突。
  • 1452:表示外键约束错误。

注意事项

  • 谨慎使用:跳过错误可能会导致数据不一致,因此在使用这些方法之前,需要确保跳过错误不会影响数据的完整性和一致性。
  • GTID 复制:如果使用 GTID 复制,建议优先使用 GTID 相关的命令来跳过错误。

通过以上方法,你可以根据实际情况选择合适的方式跳过主从复制中的错误 SQL 语句。

在 MySQL 8.0 中,查询 GTID(全局事务标识符)信息可以通过多种方式完成。GTID 是用于唯一标识每个事务的全局唯一标识符,主要用于主从复制中跟踪事务的执行情况。以下是查询 GTID 的几种常见方法:

查询当前 GTID

1. 查询当前 GTID 执行状态

在从库(从节点)上,可以通过查询 SHOW SLAVE STATUS\G 来获取当前的 GTID 执行状态。

示例

SHOW SLAVE STATUS\G

在输出中,查找以下字段:

  • Executed_Gtid_Set:表示从库已经执行的 GTID 集合。
  • Retrieved_Gtid_Set:表示从库已经从主库获取但尚未执行的 GTID 集合。
  • Auto_Position:表示是否启用了 GTID 自动定位功能。

2. 查询主库的 GTID 状态

在主库(主节点)上,可以通过查询 SHOW MASTER STATUS\G 来获取当前的 GTID 状态。

示例

SHOW MASTER STATUS\G

在输出中,查找以下字段:

  • File:当前二进制日志文件名。
  • Position:当前二进制日志位置。
  • Binlog_Do_DB:正在记录的数据库。
  • Binlog_Ignore_DB:忽略记录的数据库。
  • Executed_Gtid_Set:主库已经执行的 GTID 集合。

3. 查询 GTID 模式是否启用

可以通过查询系统变量来确认 GTID 模式是否启用。

示例

SHOW GLOBAL VARIABLES LIKE 'gtid_mode';

输出示例:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | ON    |
+---------------+-------+
  • ON:表示 GTID 模式已启用。
  • OFF:表示 GTID 模式未启用。

4. 查询 GTID 状态的详细信息

可以通过查询 performance_schema.global_status 表来获取更详细的 GTID 状态信息。

示例

SELECT * FROM performance_schema.global_status WHERE VARIABLE_NAME LIKE 'GTID%';

输出示例:

+--------------------------+-------------------+
| VARIABLE_NAME            | VARIABLE_VALUE    |
+--------------------------+-------------------+
| GTID_EXECUTED            | 0-1-1, 0-1-2      |
| GTID_EXECUTED_NUMBER     | 2                 |
| GTID_NEXT                | AUTOMATIC         |
| GTID_NEXT_LIST           |                   |
| GTID_OWNED               |                   |
| GTID_OWNED_DEFAULT       |                   |
| GTID_PURGED              | 0-1-1             |
+--------------------------+-------------------+

5. 查询 GTID 的执行历史

可以通过查询 mysql.gtid_executed 表来获取 GTID 的执行历史。

示例

SELECT * FROM mysql.gtid_executed;

输出示例:

+----------------+------------+
| source_uuid    | interval   |
+----------------+------------+
| 00000000-0000-0000-0000-000000000000 | 0-1-1:0-1-2 |
+----------------+------------+
  • source_uuid:表示生成 GTID 的服务器的 UUID。
  • interval:表示 GTID 的范围。

6. 查询 GTID 的当前状态

可以通过查询 mysql.gtid_slave_pos 表来获取从库的 GTID 当前状态。

示例
SELECT * FROM mysql.gtid_slave_pos;

输出示例:

+----------------+------------+
| source_uuid    | interval   |
+----------------+------------+
| 00000000-0000-0000-0000-000000000000 | 0-1-1:0-1-2 |
+----------------+------------+
  • source_uuid:表示生成 GTID 的服务器的 UUID。
  • interval:表示 GTID 的范围。

总结

  • 查询从库的 GTID 状态:使用 SHOW SLAVE STATUS\G
  • 查询主库的 GTID 状态:使用 SHOW MASTER STATUS\G
  • 确认 GTID 模式是否启用:查询 gtid_mode 系统变量。
  • 查询 GTID 的详细状态:查询 performance_schema.global_status 表。
  • 查询 GTID 的执行历史:查询 mysql.gtid_executed 表。
  • 查询 GTID 的当前状态:查询 mysql.gtid_slave_pos 表。

通过这些方法,你可以全面了解 MySQL 中 GTID 的状态和执行情况。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值