Xem và thay đổi định dạng binary log (binlog_format) trong MySQL
Kiểu replication trong MySQL được xác định bởi biến binlog_format, có 3 giá trị: ROW, STATEMENT, MIXED.
Kiểm tra giá trị hiện tại
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format';
Kết quả mặc định (MySQL 5.7+):
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+
Thay đổi kiểu replication
Thay đổi GLOBAL (cần quyền SUPER, ảnh hưởng các kết nối mới):
mysql> SET GLOBAL binlog_format = 'STATEMENT'; Query OK, 0 rows affected (0.04 sec) mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+
Thay đổi SESSION (chỉ ảnh hưởng session hiện tại):
mysql> SET SESSION binlog_format = 'ROW'; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+
So sánh 3 chế độ
| Chế độ | Mô tả | Ưu điểm | Nhược điểm |
|---|---|---|---|
| ROW | Ghi từng thay đổi hàng | An toàn nhất, chính xác cho replication | Binary log lớn hơn |
| STATEMENT | Ghi câu lệnh SQL | Log nhỏ, dễ debug | Không an toàn với hàm không xác định (UUID, NOW...) |
| MIXED | Tự động chọn ROW/STATEMENT | Cân bằng | Phức tạp hơn |
Lưu ý
- Thay đổi GLOBAL yêu cầu quyền
SYSTEM_VARIABLES_ADMINhoặcSUPER - Không thể thay đổi binlog_format trong transaction đang chạy
- Khuyến nghị: dùng
ROWcho production replication