Đây là lý do tại sao MySQL không thể xem các tệp đó: Không gian bảng hệ thống (ibdata1) có một từ điển dữ liệu cụ thể của Storage-Engine cho phép InnoDB vạch ra việc sử dụng bảng tiềm năng:
Di chuyển các bảng InnoDB từ nơi này sang nơi khác yêu cầu các lệnh như
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
Đây là một phần của Tài liệu MySQL 5.5 giải thích những gì cần được xem xét
Cân nhắc tính di động cho các tệp .ibd
Bạn không thể tự do di chuyển các tệp .ibd giữa các thư mục cơ sở dữ liệu như bạn có thể với các tệp bảng MyISAM. Định nghĩa bảng được lưu trữ trong không gian bảng chia sẻ InnoDB bao gồm tên cơ sở dữ liệu. ID giao dịch và số thứ tự nhật ký được lưu trữ trong các tệp không gian bảng cũng khác nhau giữa các cơ sở dữ liệu.
Để di chuyển tệp .ibd và bảng được liên kết từ cơ sở dữ liệu này sang cơ sở dữ liệu khác, hãy sử dụng câu lệnh RENAME TABLE:
RENAME BẢNG db1.tbl_name ĐẾN db2.tbl_name; Nếu bạn có một bản sao lưu sạch sẽ của một tập tin .ibd, bạn có thể khôi phục nó về bản cài đặt MySQL mà nó bắt nguồn như sau:
Bảng không được bỏ hoặc cắt bớt vì bạn đã sao chép tệp .ibd, vì làm như vậy sẽ thay đổi ID bảng được lưu trữ bên trong không gian bảng.
Ban hành câu lệnh ALTER TABLE này để xóa tệp .ibd hiện tại:
THAY ĐỔI BẢNG Tbl_name KHÁM PHÁ BẢNG; Sao chép tệp .ibd sao lưu vào thư mục cơ sở dữ liệu thích hợp.
Đưa ra câu lệnh ALTER TABLE này để báo cho InnoDB sử dụng tệp .ibd mới cho bảng:
THAY ĐỔI BẢNG Tbl_name NHẬP KHẨU; Trong ngữ cảnh này, một bản sao lưu tập tin .ibd sạch của Google là một trong đó đáp ứng các yêu cầu sau:
Không có sửa đổi không được cam kết bởi các giao dịch trong tệp .ibd.
Không có mục nhập bộ đệm chèn không được trộn trong tệp .ibd.
Purge đã xóa tất cả các bản ghi chỉ mục bị đánh dấu xóa khỏi tệp .ibd.
mysqld đã xóa tất cả các trang đã sửa đổi của tệp .ibd từ nhóm bộ đệm sang tệp.
Với những cảnh báo và giao thức này, đây là một quá trình hành động được đề xuất
Trong ví dụ này, chúng ta hãy thử khôi phục tags
bảng vào mydb
cơ sở dữ liệu
BƯỚC 1
Đảm bảo rằng bạn có bản sao lưu của những tệp .frm
và .ibd
tệp trong/tmp/innodb_data
BƯỚC 2
Nhận CREATE TABLE tags
tuyên bố và thực hiện nó như là CREATE TABLE mydb.tags ...
. Hãy chắc chắn rằng nó là cấu trúc chính xác như ban đầutags.frm
BƯỚC 3
Xóa trống tags.ibd
bằng MySQL
ALTER TABLE mydb.tags DISCARD TABLESPACE;
BƯỚC 4
Mang theo bản sao lưu của tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
BƯỚC # 5
Thêm tags
bảng vào Từ điển dữ liệu InnoDB
ALTER TABLE mydb.tags IMPORT TABLESPACE;
BƯỚC 6
Kiểm tra khả năng truy cập của bảng
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
Nếu bạn nhận được kết quả bình thường, xin chúc mừng bạn đã nhập bảng InnoDB.
BƯỚC 7
Trong tương lai, vui lòng không xóa ibdata1 và nhật ký của nó
Hãy thử một lần !!!
Tôi đã thảo luận về những điều như thế này trước đây
CẨN THẬN
Nếu bạn không biết cấu trúc bảng của thì tags
sao?
Có các công cụ để nhận được câu lệnh CREATE TABLE chỉ bằng cách sử dụng .frm
tệp. Tôi cũng đã viết một bài về điều này: Làm thế nào có thể trích xuất lược đồ bảng từ chỉ tệp .frm? . Trong bài đăng đó, tôi đã sao chép tệp .frm vào máy Windows từ hộp Linux, chạy công cụ Windows và nhận được CREATE TABLE
tuyên bố.