Files
agent-skills/skills/g3fo-docs/references/middleware/mysql/fault-analysis.md
T

2.3 KiB
Raw Blame History

MySQL 8.4 复制冲突解决指南

AI 响应规范 (MySQL 执行策略):

  1. 强制参数: 所有 docker exec 命令必须包含 -h127.0.0.1 参数。
  2. 双重输出: 涉及 SQL 操作时,必须同时输出 Docker 执行命令 和 纯 SQL 脚本。
  3. 默认连接: 默认使用 -uroot -pafe123456 -h127.0.0.1。

1. 复制冲突解决(主键/唯一键重复)

1.1 快速定位冲突信息

提取冲突 GTID、表、值(直接执行,自动解析错误日志):

grep "Duplicate entry" /data/mysql/logs/mysql_error.log | perl -nle '
if (/^(\S+).*?transaction\s+'\''([^'\'']+)'\''.*?table\s+([^\s;]+);.*?Duplicate entry\s+'\''([^'\'']+)'\''\s+for\s+key\s+'\''([^'\'']+)'\''/) { 
  print "\n" . "="x50; 
  print "时间: $1"; 
  print "GTID: $2"; 
  print "表名: $3"; 
  print "冲突值: $4 (索引: $5)"; 
  print "\n方案 A (删除冲突行):"; 
  print "DELETE FROM $3 WHERE [主键列] = \x27$4\x27;"; 
  print "\n方案 B (跳过此事务):"; 
  print "STOP REPLICA; SET GTID_NEXT=\x27$2\x27; BEGIN; COMMIT; SET GTID_NEXT=\x27AUTOMATIC\x27; START REPLICA;"; 
}
'

1.2 安全修复冲突(推荐删除冲突数据)

停止复制,临时关闭 binlog(避免删除操作同步到对端):

A. Docker 执行模式 (包含 -h127.0.0.1):

# 以实际冲突表和主键为例(示例:test_sync.t1 的 id=12)
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
STOP REPLICA;
SET sql_log_bin = OFF;
DELETE FROM `test_sync`.`t1` WHERE `id` = 12;
SET sql_log_bin = ON;
START REPLICA;
SHOW REPLICA STATUS\G;
"

B. 纯 SQL 模式:

STOP REPLICA;
SET sql_log_bin = OFF;
DELETE FROM `test_sync`.`t1` WHERE `id` = 12;
SET sql_log_bin = ON;
START REPLICA;
SHOW REPLICA STATUS\G;

1.3 应急跳过冲突事务(仅紧急场景)

精准跳过指定 GTID 事务(MySQL 8.0+ 推荐):

A. Docker 执行模式 (包含 -h127.0.0.1):

docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
STOP REPLICA;
SET GTID_NEXT = '760f0600-f896-11ef-b265-0242ac130002:6';  # 替换为实际冲突 GTID
BEGIN; COMMIT;
SET GTID_NEXT = 'AUTOMATIC';
START REPLICA;
"

B. 纯 SQL 模式:

STOP REPLICA;
SET GTID_NEXT = '760f0600-f896-11ef-b265-0242ac130002:6';
BEGIN; COMMIT;
SET GTID_NEXT = 'AUTOMATIC';
START REPLICA;