2011-08-06 35 views
5

Tôi đang tìm cách làm sáng tỏ một chút nhầm lẫn. Tôi có một thiết lập chủ + nô lệ. Tôi có một chủ, và 3 nô lệ. Tất cả viết (INSERT|UPDATE|DELETE) đi tổng thể. Tất cả các lần đọc (SELECT) đến một trong những nô lệ, được chọn ngẫu nhiên. Tất cả các bảng của tôi đang sử dụng công cụ lưu trữ InnoDB.Giao dịch và Master + Slave Replication

Tôi tò mò về cách thức MySQL/InnoDB xử lý các giao dịch trong thiết lập này. Nếu MySQL ghi từng thay đổi trong giao dịch vào binlog, thì tất cả sẽ ổn. Tuy nhiên tôi có thể thấy có một số vấn đề lớn nếu binlog không được viết cho đến khi giao dịch được cam kết.

Bất cứ ai có thể giải thích những gì đang xảy ra trong MySQL trong khi giao dịch với bản sao tại chỗ không?

Trả lời

0

Nói chung, nếu giao dịch không được ghi vào nhật ký nhị phân cho đến khi nó được cam kết. Giả sử bảng là giao dịch, tất cả các câu lệnh trong giao dịch được nhóm lại với nhau thành một câu lệnh BEGIN \ COMMIT.

0

Theo this, các nô lệ chỉ có thể thấy các thay đổi sau khi giao dịch được thực hiện.

Giao dịch không thực hiện được trên bản gốc hoàn toàn không ảnh hưởng đến sao chép. Nhân bản MySQL dựa trên bản ghi nhị phân, nơi MySQL viết các câu lệnh SQL để sửa đổi dữ liệu. Một giao dịch không thành công (ví dụ, do một sự vi phạm khóa ngoài, hoặc bởi vì nó được khôi phục) không được ghi vào nhật ký nhị phân, do đó nó không được gửi đến nô lệ.

this khẳng định:

Nhật ký nhị phân là vụ tai nạn an toàn. Chỉ các sự kiện hoặc giao dịch hoàn chỉnh mới được ghi lại hoặc đọc lại.

Các vấn đề liên quan