Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạm dừng replication MySQL cho câu lệnh cụ thể với sql_log_bin=0

Để thực thi câu lệnh SQL trên Master mà không ghi vào binary log (không replicate sang Slave), thiết lập biến session sql_log_bin = 0.

Cú pháp

SET sql_log_bin = 0;
-- Các câu lệnh không muốn replicate
SET sql_log_bin = 1;

Yêu cầu: Cần quyền SYSTEM_VARIABLES_ADMIN hoặc SUPER (MySQL 5.7) / BINLOG_ADMIN (MySQL 8.0+).

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE SQLStatementsDemo (
    -> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.79 sec)

Chèn dữ liệu ban đầu (sẽ replicate):

mysql> INSERT INTO SQLStatementsDemo(UserName) VALUES 
    -> ('John'), ('Carol'), ('Bob'), ('Mike'), ('Sam'), ('David');

Tắt binary log, thực hiện UPDATE/INSERT/DELETE:

mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE SQLStatementsDemo SET UserName = 'Maxwell' WHERE UserId = 6;
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO SQLStatementsDemo(UserName) VALUES ('Chris');
Query OK, 1 row affected (0.16 sec)

mysql> DELETE FROM SQLStatementsDemo WHERE UserId = 7;
Query OK, 1 row affected (0.10 sec)

mysql> SET sql_log_bin = 1;
Query OK, 0 rows affected (0.00 sec)

Kiểm tra dữ liệu trên Master (đã thay đổi):

mysql> SELECT * FROM SQLStatementsDemo;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 1      | John     |
| 2      | Carol    |
| 3      | Bob      |
| 4      | Mike     |
| 5      | Sam      |
| 6      | Maxwell  |
+--------+----------+

Trên Slave: Dữ liệu vẫn giữ nguyên (John, Carol, Bob, Mike, Sam, David) — 3 thao tác trên không được replicate.

Trường hợp sử dụng phổ biến

  • Dọn dẹp dữ liệu test/rác trên Master
  • Chạy script migration/bảo trì không muốn ảnh hưởng Slave
  • Nạp dữ liệu lịch sử (initial load) chỉ trên Master
  • Sửa lỗi dữ liệu cục bộ

⚠️ Cảnh báo quan trọng

  • Chỉ ảnh hưởng đến session hiện tại. Mở session mới → sql_log_bin = 1 mặc định
  • Lạm dụng gây data drift (Master/Slave khác nhau) → khó khắc phục
  • Không dùng cho DDL (CREATE/ALTER/DROP TABLE) — DDL luôn ghi binlog
  • Kiểm tra bằng SHOW BINLOG EVENTS sau khi thực hiện