DDL trong InnoDB không phải là giao dịch nên có thể thông tin trong tệp .frm và từ điển InnoDB khác nhau. Trong trường hợp của bạn, có vẻ như tệp .frm bị thiếu nhưng có một bản ghi không có trong từ điển (thực ra là các bản ghi trong một vài bảng SYS_ * từ điển).
Bạn không thể dễ dàng xóa một bản ghi khỏi từ điển. Bạn cần một tệp .frm tương ứng để MySQL chuyển DROP của bạn đến cấp InnoDB. Với RDS, bạn không thể làm điều đó.
Nhưng bạn có thể DROP toàn bộ cơ sở dữ liệu. Trong trường hợp đó, InnoDB sẽ xóa tất cả các bản ghi khỏi từ điển bao gồm cả bản ghi không có.
Vì vậy, để làm sạch từ điển của bạn, tôi khuyên bạn nên làm như sau:
- Dừng tất cả lưu lượng truy cập vào MySQL, đặt nó ở chế độ chỉ đọc
- Tạo cơ sở dữ liệu tạm thời
adstudio_tmp
-
RENAME
tất cả các bảng từadstudio
tớiadstudio_tmp
-
DROP DATABASE adstudio
. Tại thời điểm này, nó trống rỗng.DROP
sẽ xóa tất cả các mục trong từ điển InnoDB. -
RENAME
tất cả các bảng trở lại từadstudio_tmp
tớiadstudio
Sau đó, từ điển sẽ sạch và bạn sẽ có thể tạo data_feed_param
của mình .
Tôi đã mô tả sự cố tương tự sau khi ALTER không thành công BẢNG . Kiểm tra nó để biết thêm chi tiết.