2011-10-13 28 views
5

tôi khôi phục lại tất cả các cơ sở dữ liệu từ một tập tin mysqldump và đang nhận được lỗi sau:ERROR 1005 (HY000) tại dòng 156: Không thể tạo bảng 'db1.testtable' (errno: 121)

ERROR 1005 (HY000) at line 156: Can't create table 'db1.testtable' (errno: 121) 

Khi SQL của tôi đã được tạo ra từ tiện ích mysqldump, tôi nhầm lẫn về cách một lỗi đã xuất hiện trong mã SQL!

Các dòng có liên quan trong dump.sql của tôi là:

CREATE TABLE `testtable` (
    `username` varchar(255) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `emailaddress` varchar(255) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Cảm ơn, Jim

Trả lời

8

errno 121 có nghĩa là một lỗi khóa trùng lặp. Có lẽ bảng đã tồn tại trong từ điển dữ liệu nội bộ InnoDB, mặc dù tệp .frm cho bảng đã bị xóa. Đây là lý do phổ biến nhất để nhận errno 121 trong việc tạo bảng. Một lý do khác có thể là xung đột tên trong một tên hạn chế khóa ngoại. Các tên ràng buộc phải là duy nhất trong cơ sở dữ liệu, như tên bảng.

InnoDB in trong nhật ký .err là gì?

+1

111013 9:30:47 InnoDB: Lỗi: bảng 'db1'.'testtable' đã tồn tại trong InnoDB internal InnoDB: từ điển dữ liệu. Bạn đã xóa tập tin .frm InnoDB: và không sử dụng DROP TABLE? Bạn đã sử dụng DROP DATABASE InnoDB: cho các bảng InnoDB trong phiên bản MySQL <= 3.23.43 chưa? InnoDB: Xem phần Hạn chế trong cẩm nang của InnoDB. InnoDB: Bạn có thể thả bảng mồ côi bên trong InnoDB bằng cách InnoDB: tạo một bảng InnoDB có cùng tên trong InnoDB: cơ sở dữ liệu và sao chép tệp .frm vào cơ sở dữ liệu hiện tại. InnoDB: Sau đó MySQL nghĩ rằng bảng tồn tại, và DROP TABLE sẽ InnoDB: thành công. –

+0

@ user993052 Tôi nghĩ những hướng dẫn đó khá rõ ràng! :-) – ManseUK

+0

** bold ** Lỗi: bảng db1.testtable đã tồn tại trong InnoDB nội bộ InnoDB: từ điển dữ liệu. ** bold ** Tôi giả sử chúng ta đang nói về ibdata1, ib_logfile0, ib_logfile1 files? Tôi sẽ thử xóa chúng và bắt đầu tải từ dump.sql từ đầu. –

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