Câu trả lời:
Tệp ibdata1 là không gian bảng hệ thống cho cơ sở hạ tầng InnoDB.
Nó chứa một số lớp thông tin quan trọng cho InnoDB
Nhấn vào đây để xem một đại diện hình ảnh
Bạn có thể ly dị Trang dữ liệu và chỉ mục từ ibdata1 bằng cách bật innodb_file_per_table . Điều này sẽ khiến bất kỳ bảng InnoDB mới được tạo nào lưu trữ dữ liệu và trang chỉ mục trong một .ibd
tệp bên ngoài .
Thí dụ
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
, tạo ra /var/lib/mysql/mydb/mytable.frm
/var/lib/mysql/mydb/mytable.ibd
Bất kể bảng InnoDB được lưu trữ ở đâu, chức năng của InnoDB yêu cầu tìm siêu dữ liệu của bảng và lưu trữ và truy xuất thông tin MVCC để hỗ trợ tuân thủ ACID và Cách ly giao dịch .
Dưới đây là những bài viết trước đây của tôi về việc tách dữ liệu bảng và chỉ mục khỏi ibdata1
Oct 29, 2010
: Bài viết gốc của tôi trong StackOverflowNov 26, 2011
: ERROR 1114 (HY000) tại dòng 6308 trong tệp & Bảng user_analysis đã đầyFeb 03, 2012
: Tối ưu hóa theo lịch trình của các bảng trong MySQL InnoDBMar 25, 2012
: Tại sao InnoDB lưu trữ tất cả các cơ sở dữ liệu trong một tệp?Apr 01, 2012
: Innodb_file_per_table có được khuyến khích không?ib_logfile0
, ib_logfile1
)Nếu bạn muốn biết những gì ib_logfile0
và ib_logfile1
được dùng cho, chúng là Nhật ký làm lại của InnoDB. Chúng không bao giờ nên bị xóa hoặc thay đổi kích thước cho đến khi tắt máy hoàn toàn bình thường của mysqld . Nếu mysqld gặp sự cố, chỉ cần khởi động mysqld. Nó sẽ đọc qua ib_logfile0
và ib_logfile1
để kiểm tra bất kỳ thay đổi dữ liệu nào không được đăng lên bộ đệm ghi kép ibdata1
. Nó sẽ phát lại (làm lại) những thay đổi đó. Khi chúng được phát lại và lưu trữ, mysqld sẽ sẵn sàng cho các kết nối DB mới.
innodb_file_per_table disabled, Data/Index Pages Stored in /var/lib/mysql/mydb/mytable.ibd
và innodb_file_per_table enbled, Data/Index Pages Stored in ibdata1
nên ngược lại, không nên?