Đây là một câu hỏi cũ, nhưng hôm nay tôi mới nhận được câu này và đã tìm ra giải pháp (và đúng với errno =-1).
Bảng của chúng tôi là InnoDB và được tạo và hủy sau vài giờ. Gần đây, chúng tôi đã khởi động một máy chủ nô lệ để theo dõi bảng chủ đó. Chúng tôi cũng sử dụng tùy chọn "innodb_file_per_table".
Lỗi chỉ xảy ra trên máy chủ, không phải trên máy chủ. Vấn đề là gần đây chúng tôi đã đồng bộ hóa máy tớ đó với máy chủ bằng cách sử dụng rsync vài giờ trước đó.
Rsync đã sao chép tệp bảng, nhưng sau đó tệp chính đã bị xóa trong thời gian chờ đợi, vì đó là bảng tạm thời. Do đó, tệp .idb tồn tại trong máy chủ, nhưng không còn trong tệp chính.
Khi master gửi yêu cầu tạo bảng, slave không thể vì tệp đã có ở đó. MySQL không biết rằng một bảng tồn tại vì siêu dữ liệu cho biết không có bảng nào ở đó. Tôi giả sử MySQL đang cố gắng tạo tệp, nhưng vì nó ở đó nên nó không thành công.
Trong trường hợp của tôi, giải pháp là xóa tệp .idb trong một thư mục khác (tất nhiên là phải có bản sao lưu trước).
Sau đó, cơ sở dữ liệu sẽ cho phép chúng tôi tạo bảng và sau đó nô lệ sẽ theo dõi lại chủ nhân
Cách tốt hơn để thực hiện điều đó rsync là sử dụng tùy chọn --delete để xóa bất kỳ tệp cũ nào đã biến mất khỏi tệp chính.
Nhưng dù sao đi nữa - bạn có thể không gặp tình huống chính xác như những gì tôi đã mô tả, nhưng nó có thể đơn giản là một tệp cũ bị bỏ lại ở đó vì lý do này hay lý do khác.