Nếu bạn đang chạy với nhật ký nhị phân được bật, điều này có thể được kiểm tra với độ tin cậy tương đối cao.
Đầu tiên, để xem liệu nhật ký nhị phân có thực sự được kích hoạt hay không, hãy chạy:
SHOW BINARY LOGS;
Nếu chúng được bật, bạn sẽ nhận được một đầu ra như thế này:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
Nếu không, bạn sẽ nhận được một thông báo lỗi.
Bây giờ, nếu nhật ký nhị phân được bật, thì bất kỳ cam kết thành công nào cũng được ghi vào nhật ký nhị phân. Tôi nói "cam kết", nhưng sự thật là bất kỳ hoạt động thành công nào, ngay cả trên các bảng không giao dịch như MyISAM, được viết ở đó. Nhưng, thành thật mà nói, để có bất kỳ sự chắc chắn nào về kết quả của các truy vấn của bạn, tôi hy vọng vì lợi ích của bạn khi bạn sử dụng một công cụ giao dịch như InnoDB, nếu không bạn không thể chắc chắn bất cứ điều gì.
OK, vì vậy, giả sử bây giờ bạn đã bật nhật ký nhị phân và các bảng của bạn là giao dịch (hy vọng là InnoDB), sau đó việc hoàn thành các truy vấn của bạn sẽ được ghi vào nhật ký nhị phân.
Bây giờ bạn phải tìm kiếm nhật ký nhị phân có liên quan và tìm kiếm truy vấn ở đó. Nếu bạn tìm thấy truy vấn - tốt! Nếu không - có lẽ là không có. Tôi sẽ giải thích ngay sau đây.
Nhật ký nhị phân nào chứa truy vấn của bạn? Nhìn vào các tệp nhật ký nhị phân, thường là trong thư mục dữ liệu của bạn. Hãy tìm dấu thời gian của họ. Khi sức mạnh xuất hiện, một bản ghi nhị phân mới đã được tạo. Tìm nó. Các truy vấn của bạn rất có thể là trong nhật ký nhị phân trước đó. Đây là một phỏng đoán. Nó cũng có thể là một trước đó, vv Nhưng đó là một dự đoán tốt.
Bây giờ, bằng cách sử dụng mysqlbinlog
tiện ích, thực thi, từ dòng lệnh, đại loại như thế này:
mysqlbinlog mysql-bin.000245
Thay thế tên tệp bằng tên bạn nghi ngờ có chứa truy vấn.
Điều này sẽ xuất tất cả các truy vấn trong tệp nhật ký nhị phân này thành đầu ra tiêu chuẩn. Trên Unix, sử dụng grep
để tìm truy vấn của bạn:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
Trên Windows, chúc may mắn. Mở bằng notepad ++ hoặc một cái gì đó và tìm kiếm thủ công.
Là truy vấn đó? Tuyệt vời - bạn biết nó đã được cam kết.
Là truy vấn không có? Cần kiểm tra trên sync_binlog
param. Có phải là 1 không? Sau đó, truy vấn không trong log nhị phân ==> truy vấn không được cam kết. Nhưng nếu sync_binlog
không phải là 1 , vẫn có khả năng truy vấn đã được cam kết chưa có trong nhật ký nhị phân, vì sự cố có thể xảy ra ngay sau commit
và ngay trước khi nhật ký nhị phân được xóa vào đĩa. Sau đó, bạn cần phải trở lại phương tiện khác.
Những người đang: (và hy vọng, một lần nữa, bạn đang sử dụng InnoDB): tìm kiếm một hàng có thể xác định kết quả của truy vấn. Với InnoDB, bạn nhận được "tất cả hoặc không có gì". Nếu bạn có thể chắc chắn về một hàng duy nhất bị ảnh hưởng bởi truy vấn - bạn có thể chắc chắn rằng truy vấn đã hoàn thành.
chỉnh sửa: tất nhiên, nếu đăng nhập chậm được bật, bạn có thể mong đợi truy vấn dài như vậy sẽ được ghi lại ở đó sau khi hoàn thành ...
Chúc may mắn!