Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thu nhỏ / thanh lọc tệp ibdata1 trong MySQL

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:

  1. 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ừ mysqlperformance_schema cơ sở dữ liệu
  2. Bỏ tất cả cơ sở dữ liệu ngoại trừ 2 cơ sở dữ liệu trên
  3. Dừng mysql
  4. Xóa ibdata1ib_log tệp
  5. Khởi động mysql
  6. Khôi phục từ kết xuất

Khi bạn khởi động MySQL ở bước 5, ibdata1ib_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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chạy máy chủ lưu trữ mysqladmin trên Amazon RDS

  2. Khối lượng công việc kết hợp cơ sở dữ liệu OLTP / Analytics trong Galera Cluster bằng cách sử dụng các nô lệ không đồng bộ

  3. Chuỗi được phân tách bằng dấu phẩy trong MySQL thành bảng tạm thời

  4. Nhận chênh lệch năm giữa hai ngày trong MySQL dưới dạng số nguyên

  5. Làm thế nào để tính toán tỷ lệ chuyển đổi trong MySQL?