MySQL Binlog và Thứ Tự Hoạt Động Transaction

Posted on Mar 4, 2024

🧩 MySQL Binlog và Thứ Tự Hoạt Động Transaction

📦 1️⃣ Binlog là gì?

Binlog (Binary Log) là file ghi lại mọi thay đổi dữ liệu trong MySQL dưới dạng sự kiện (event).
Ví dụ: mỗi câu lệnh INSERT, UPDATE, DELETE, CREATE TABLE… đều được ghi vào binlog.

🎯 Mục đích chính của Binlog

Mục tiêuÝ nghĩa
Replication (Master–Slave)Replica đọc binlog của master để “replay” lại các thay đổi và đồng bộ dữ liệu
Backup / Point-in-Time Recovery (PITR)Có thể phục hồi dữ liệu đến thời điểm cụ thể bằng cách chạy lại binlog
Theo dõi thay đổi dữ liệu (audit)Dễ dàng kiểm tra ai đã thay đổi gì trong DB

⚙️ Tác dụng trong Replication

  • Master ghi các sự kiện thay đổi dữ liệu vào binlog.
  • Replica kết nối đến master và đọc binlog qua thread I/O.
  • Replica lưu binlog này thành file relay log và “replay” nó qua thread SQL.

👉 Nhờ vậy, Replica có thể cập nhật dữ liệu y hệt Master, ngay cả khi chúng ở trên hai server khác nhau.


⚙️ 2️⃣ Thứ tự chạy một câu SQL trong MySQL

Giả sử bạn chạy lệnh:

INSERT INTO users VALUES (1, 'Thang');

Bên trong MySQL sẽ diễn ra như sau:

BướcMô tảGhi log nàoGhi chú
1️⃣Câu SQL được Parser và Optimize—Tạo plan để thực thi
2️⃣Ghi thay đổi vào bộ nhớ (Buffer Pool)—Dữ liệu chỉ ở RAM
3️⃣Ghi Redo Log với trạng thái prepare🧱 Redo LogInnoDB lưu thay đổi vật lý, chuẩn bị commit
4️⃣Ghi Binlog với nội dung logic (INSERT/UPDATE/DELETE)📦 BinlogDữ liệu phục vụ replication và backup
5️⃣Đánh dấu Redo Log → commit🧱 Redo LogTransaction chính thức hoàn tất
6️⃣Trả kết quả Query OK cho client—Dữ liệu an toàn, có thể sync sang replica

🔍 3️⃣ Vị trí của Binlog & Redo Log trong quá trình

Thành phầnVai tròKhi ghiTác dụng chính
🧱 Redo LogGhi ở mức vật lý (page, block)Trước commit (prepare → commit)Phục hồi dữ liệu khi crash
📦 BinlogGhi ở mức logic (SQL/row event)Sau khi prepare, trước commit redoĐồng bộ dữ liệu sang replica

➡️ Hai log này hoạt động song song, được đồng bộ bằng Two-Phase Commit, đảm bảo:

Hoặc cả hai cùng ghi thành công → transaction hoàn tất
Hoặc cả hai rollback → tránh sai lệch Master–Replica.


🧠 4️⃣ Tóm tắt nhanh

Nội dungRedo LogBinlog
Ghi bởiInnoDB EngineMySQL Server
Mục đíchPhục hồi sau crashReplication & Backup
Dạng ghiThay đổi vật lýThay đổi logic
Vòng đờiNgắn (vòng quay)Dài (tuần/tháng)
Liên quan đếnTính bền vững (Durability)Tính đồng bộ (Consistency)

✅ Kết luận

  • Binlog là cầu nối giữa Master và Replica, giúp đồng bộ dữ liệu logic.
  • Redo Log đảm bảo dữ liệu không mất khi crash.
  • Hai log kết hợp thông qua Two-Phase Commit, đảm bảo MySQL luôn an toàn và nhất quán.

📚 Tham khảo & Đọc thêm