1. Trùng key quan trọng
Last_Error: Could not execute Write_rows_v1 event on table clbv_ict.node; Duplicate entry '2326' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mariadb-bin.000001, end_log_pos 97091991
Nguyên nhân gốc không thay đổi: seed (snapshot) và GTID position bắt đầu replication không khớp, nên SQL thread đang cố “insert lại” các bản ghi đã có trong seed → duplicate PK.
Cách đúng lúc này là re-seed lại chuẩn theo GTID snapshot (chốt một GTID tại thời điểm dump), rồi trên S2 đặt GTID position tương ứng trước khi START SLAVE.
Bước 1. Trên S1: chốt GTID snapshot (khóa rất ngắn)
Đăng nhập MariaDB trên S1:
Ngay lập tức lấy GTID position:
Ví dụ nó trả 0-1-30253 (bạn sẽ dùng đúng giá trị thực tế của bạn). Ghi lại giá trị này.
Sau đó mở khóa ngay (không giữ lock lâu):
Ghi chú:
FLUSH TABLES WITH READ LOCK+read_only=ONchỉ cần vài giây để chốt GTID. Dump sẽ chạy bằng--single-transactionnên không cần giữ lock trong suốt quá trình.
Bước 2. Trên S1: tạo dump seed, rồi Copy dump sang S2 rồi import vào S2 (sau khi đã xóa các database lỗi trước đó)
Xóa các database lỗi đã import trước đó:
mariadb -N -e "SHOW DATABASES" \| egrep -v "^(information_schema|performance_schema|mysql|sys)$" \| while read -r db; do echo "DROP DATABASE \`$db\`;" done | mariadb
Bước 3. Trên S2: set GTID position đúng snapshot
Đây là bước bạn đang thiếu trước đó.
Giả sử GTID snapshot bạn lấy ở bước 1 là 0-1-30253 (ví dụ). Trên S2 chạy:
Bạn phải thay bằng đúng giá trị
@@GLOBAL.gtid_binlog_posbạn đã ghi lại trên S1.
Kiểm tra:
Bước 4. Trên S2: cấu hình lại master và start slave
Và chạy replication như bình thường
2. Trùng key không quan trọng: dòng đã có rồi, nên không tạo được
Last_Error: Could not execute Write_rows_v1 event on table ai_ct.key_value; Duplicate entry 'feeds_feed.14-clean' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mariadb-bin.000164, end_log_pos 6260501
Skip bỏ qua 1 key này nếu không quan trọng, không khuyến nghị cho dữ liệu quan trọng.
Nếu bạn chấp nhận “bỏ qua” event gây lỗi để replication chạy tiếp:
STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;START SLAVE;SHOW SLAVE STATUS\G
3. Các bảng cache, log
Last_Error: Could not execute Delete_rows_v1 event on table ask_bvtwctd7.h5p_libraries_hub_cache; Can't find record in 'h5p_libraries_hub_cache', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mariadb-bin.000001, end_log_pos 12322143
Giải pháp: không replication các bảng này.
root@ai:/mnt/data# nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]server_id=2
replicate-wild-ignore-table=%.cache\_%replicate-wild-ignore-table=%.cache# Ignore các bảng kết thúc bằng _cache (Drupal modules thường dùng)replicate-wild-ignore-table=%.\%\_cachereplicate-wild-ignore-table=%.h5p\_%\_cachereplicate-wild-ignore-table=%.h5p\_%\_cache\_%replicate-wild-ignore-table=%.h5p_libraries_hub_cache
# Drupal volatile tables (khuyến nghị tối thiểu)replicate-wild-ignore-table=%.watchdogreplicate-wild-ignore-table=%.sessionsreplicate-wild-ignore-table=%.floodreplicate-wild-ignore-table=%.semaphorereplicate-wild-ignore-table=%.accesslogreplicate-wild-ignore-table=%.ultimate_cron_log
replicate-wild-ignore-table=%.queuereplicate-wild-ignore-table=%.variable
- Đăng nhập để gửi ý kiến