ibdata1
đó không bị thu hẹp là một tính năng đặc biệt khó chịu của MySQL. ibdata1
Không thể thu nhỏ tệp thực sự trừ khi bạn xóa tất cả cơ sở dữ liệu, xóa tệp và tải lại kết xuất.
Nhưng bạn có thể cấu hình MySQL để mỗi bảng, bao gồm các chỉ mục của nó, được lưu trữ dưới dạng một tệp riêng biệt. Theo cách đó ibdata1
sẽ không phát triển lớn. Theo Nhận xét của Bill Karwin điều này được bật theo mặc định kể từ phiên bản 5.6.6 của MySQL.
Đó là một thời gian trước đây tôi đã làm điều này. Tuy nhiên, để thiết lập máy chủ của bạn sử dụng các tệp riêng biệt cho từng bảng, bạn cần thay đổi my.cnf
để kích hoạt điều này:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com / doc / refman / 5.6 / en / innodb-file-per-table-tablepaces.html
Khi bạn muốn lấy lại không gian từ ibdata1
bạn thực sự phải xóa tệp:
- Thực hiện
mysqldump
của tất cả cơ sở dữ liệu, thủ tục, trình kích hoạt, v.v. ngoại trừmysql
vàperformance_schema
cơ sở dữ liệu - Bỏ tất cả cơ sở dữ liệu ngoại trừ 2 cơ sở dữ liệu trên
- Dừng mysql
- Xóa
ibdata1
vàib_log
tệp - Khởi động mysql
- Khôi phục từ kết xuất
Khi bạn khởi động MySQL ở bước 5, ibdata1
và ib_log
tệp sẽ được tạo lại.
Bây giờ bạn đã phù hợp để đi. Khi bạn tạo cơ sở dữ liệu mới để phân tích, các bảng sẽ được đặt trong ibd*
riêng biệt các tệp, không có trong ibdata1
. Khi bạn thường thả cơ sở dữ liệu ngay sau đó, ibd*
tệp sẽ bị xóa.
http://dev.mysql.com/doc/refman /5.1/en/drop-database.html
Có thể bạn đã thấy điều này:
http://bugs.mysql.com /bug.php?id=1341
Bằng cách sử dụng lệnh ALTER TABLE <tablename> ENGINE=innodb
hoặc OPTIMIZE TABLE <tablename>
người ta có thể trích xuất dữ liệu và các trang chỉ mục từ ibdata1 để tách các tệp. Tuy nhiên, ibdata1 sẽ không thu nhỏ trừ khi bạn thực hiện các bước trên.
Về information_schema
, điều đó là không cần thiết và cũng không thể bỏ. Trên thực tế, nó chỉ là một loạt các chế độ xem chỉ đọc, không phải bảng. Và không có tệp nào được liên kết với chúng, thậm chí không có thư mục cơ sở dữ liệu. informations_schema
đang sử dụng bộ nhớ db-engine và bị loại bỏ và được phục hồi khi dừng / khởi động lại mysqld. Xem https://dev.mysql.com/doc/ refman / 5.7 / vi / information-schema.html
.