Có lẽ bạn đã quen thuộc với hai định dạng của ghi nhật ký nhị phân , dựa trên câu lệnh - ghi lại các truy vấn thực tế sửa đổi dữ liệu trên cái chính để chúng có thể được thực thi trên phụ và dựa trên hàng - ghi nhật ký trước và / hoặc hình ảnh sau của dữ liệu hàng thực tế đã được thay đổi bởi truy vấn, để máy chủ có thể áp dụng trực tiếp những thay đổi đó vào dữ liệu của nó ... và chế độ hỗn hợp, nơi trình tối ưu hóa và công cụ lưu trữ xác định định dạng nào là định dạng tối ưu trên cơ sở từng truy vấn.
Tuyên bố bạn đang thực hiện là không an toàn về nguyên tắc bởi vì bạn đang sử dụng INSERT ... SELECT
vào một bảng có cột tăng tự động. Nếu một truy vấn thuộc dạng chung đó đã được sử dụng trong một STATEMENT
môi trường dựa trên cơ sở và SELECT
đã không trả về các hàng theo cùng một thứ tự trên chính và phụ, các hàng có thể được chọn theo một thứ tự khác và do đó kết thúc với các giá trị tăng tự động khác nhau.
Trong thực tế, cụ thể truy vấn bạn đang thực hiện is xác định bởi vì bạn chỉ chèn một hàng và bạn đang chỉ định rõ ràng giá trị tự động tăng. Tôi nghi ngờ đó là nguyên nhân khiến bạn nhầm lẫn. Tuy nhiên, có vẻ như bạn vẫn đang kích hoạt cảnh báo vì bạn đang thực hiện INSERT ... SELECT
vào một bảng có tăng tự động và máy chủ dường như đang áp dụng xác định "không an toàn" tổng quát cho truy vấn như một vấn đề về nguyên tắc, thay vì chính xác.
Chuyển binlog_format
của bạn thành MIXED
nên làm cho cảnh báo biến mất, vì máy chủ có thể chuyển đổi chế độ theo ý của mình ... và rất ít có khả năng có tác dụng phụ tiêu cực. Nếu không phải vì thực tế là STATEMENT
luôn là mặc định (vì ban đầu đó là loại sao chép duy nhất có sẵn), tôi nghi ngờ họ đã tạo MIXED
mặc định từ lâu ... trên thực tế, nếu bạn đã tự làm quen với nội dung của nhật ký nhị phân, bạn có thể có xu hướng làm như tôi và sử dụng ROW
về mọi thứ ... nó có xu hướng tạo ra một nhật ký nhị phân hữu ích hơn nhiều để khắc phục sự cố và giúp bạn thoát khỏi rắc rối, vì dữ liệu hàng "cũ" được ghi trên DELETE
và UPDATE
.