2011-05-25 34 views
6

Tôi đã sử dụng mysqldump để xuất cơ sở dữ liệu của mình và sau đó nhập nó vào MySQL trên máy chủ khác của tôi. Bây giờ tôi có thể xem tất cả các bảng của tôi nếu tôi "hiển thị bảng" nhưng tôi thực sự không thể chọn hoặc mô tả bất kỳ bảng nào trong số chúng.Các bảng InnoDB tồn tại trong MySQL nhưng nói rằng chúng không tồn tại sau khi sao chép cơ sở dữ liệu sang máy chủ mới

ERROR 1146 (42S02): Bảng 'mydatabase.user' không tồn tại

Tất cả các bảng của tôi là InnoDB. Tôi thấy một vấn đề mà mọi người đã sử dụng old_passwords, vì vậy tôi đã đặt rõ ràng là 0 trong my.cnf và tôi đảm bảo tất cả các mật khẩu trong bảng mysql là 41 chữ số thập lục phân như chúng phải dành cho mật khẩu mới.

+0

Bạn có chắc chắn rằng khôi phục lại làm mà không có lỗi? Cố gắng thực hiện khôi phục với một giao dịch duy nhất, giao dịch sẽ dừng lại do lỗi. – Igor

+0

Nó đã được làm việc một lúc sau khi tôi sao chép nó và sau đó nó chỉ bắt đầu nói rằng bảng không tồn tại. Nhưng tôi không thể tạo bảng vì nó tồn tại ... Vấn đề là có một vài thay đổi đối với dữ liệu xảy ra với bản sao này sau khi nhập, vì vậy tôi cần ít nhất có thể truy cập vào chúng. Tệp .frm cho bảng này giống hệt như bản sao làm việc của cơ sở dữ liệu. – mrgordon

+0

Dường như bạn có vấn đề với cấu trúc bảng. Không thể giúp với bạn điều đó. Hãy thử khôi phục lại tươi với đăng nhập được kích hoạt và gửi ở đây bất kỳ lỗi từ nhật ký. – Igor

Trả lời

7

Lý do "hiển thị bảng;" công trình là vì mysqld sẽ quét thư mục cơ sở dữ liệu chỉ cho các tệp .frm. Miễn là chúng tồn tại, nó sẽ thấy định nghĩa bảng.

Nếu bạn nhập dữ liệu vào MySQL và thông báo lỗi này xảy ra, điều đầu tiên tôi sẽ ngay lập tức làm là chạy lệnh này: (BTW Đây là MySQL 5.1.45, nhưng hoạt động trong MySQL 5.x anyway)

mysql> show engines; 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| Engine  | Support | Comment              | Transactions | XA | Savepoints | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| InnoDB  | YES  | Supports transactions, row-level locking, and foreign keys  | YES   | YES | YES  | 
| MRG_MYISAM | YES  | Collection of identical MyISAM tables       | NO   | NO | NO   | 
| BLACKHOLE | YES  | /dev/null storage engine (anything you write to it disappears) | NO   | NO | NO   | 
| CSV  | YES  | CSV storage engine            | NO   | NO | NO   | 
| MEMORY  | YES  | Hash based, stored in memory, useful for temporary tables  | NO   | NO | NO   | 
| FEDERATED | NO  | Federated MySQL storage engine         | NULL   | NULL | NULL  | 
| ARCHIVE | YES  | Archive storage engine           | NO   | NO | NO   | 
| MyISAM  | DEFAULT | Default engine as of MySQL 3.23 with great performance   | NO   | NO | NO   | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
8 rows in set (0.00 sec) 

Nếu máy chủ bạn nhập dữ liệu vào nói InnoDB bị vô hiệu hóa, thì bạn có một vấn đề lớn. Đây là những gì bạn nên làm:

1) Thả tất cả các dữ liệu từ New nhập DB server

2) Cleanup InnoDB Setup

3) chạy HIỂN THỊ ĐỘNG CƠ; và đảm bảo InnoDB hoạt động hoàn toàn !!!

4) Tải lại mysqldump vào máy chủ nhập mới

Hãy thử!

2

Tôi gặp sự cố này khi tôi thay đổi từ máy chủ cửa sổ sang máy chủ Linux. Bảng là các tệp và tệp cửa sổ không phân biệt chữ hoa chữ thường, nhưng các tệp linux phân biệt chữ hoa chữ thường.

Trong ứng dụng của tôi, trong truy vấn sql, một số lần tôi đã sử dụng tablenames chữ hoa và chữ thường khác, vì vậy, đôi khi tôi nhận được kết quả tương tự như bạn.

0

Tôi trường hợp của tôi là thông số SQLCA.DBParm.

tôi đã sử dụng SQLCA.DBParm = "Databse = "sle_database.text"" nhưng nó phải được

SQLCA.DBParm = "Database='" +sle_database.text+ "'" 

Giải thích: bạn sẽ kết hợp ba dây:

a) Database='    - "Database='" 

b) (name of the database) - +sle_database.text+ 

c) ' - "'" 
Các vấn đề liên quan