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

MySQL:giảm kích thước tệp ibdata cho các bảng MyISAM

ibdata1 và MyISAM loại trừ lẫn nhau.

Điều đầu tiên bạn nên làm là đếm xem có bao nhiêu bảng sử dụng cả hai công cụ lưu trữ:

SELECT COUNT(1) EngineCount,engine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY engine;

Nếu MỘT SỐ bảng là InnoDB:

Thực hiện CleanUp of InnoDB của tôi

Nếu bạn chỉ có bảng MyISAM và không có bảng InnoDB:

Đầu tiên, loại bỏ bất kỳ dấu vết nào của InnoDBDo như sau:

BƯỚC01) Thêm cái này vào my.cnf

[mysqld]
skip-innodb

STEP02) service mysql restart

BƯỚC03) rm -f /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile*

Sau các bước này, bạn có thể thực hiện Nén từng bảng MyISAM như sau:

Đối với bảng mydb.mytable là MyISAM, chỉ cần chạy một trong các thao tác sau:

  • OPTIMIZE TABLE mydb.mytable;
  • ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;

Nếu bạn muốn chống phân mảnh tất cả các bảng MyISAM của mình, đây là một tập lệnh shell để làm như vậy ...

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('OPTIMIZE TABLE ',table_schema,'.',table_name,';') "
SQL="${SQL} FROM information_schema.tables "
SQL="${SQL} WHERE engine='MyISAM' AND table_schema NOT IN "
SQL="${SQL} ('information_schema','performance_schema','mysql')"
mysql ${MYSQL_CONN} -ANe"${SQL}" > GlobalMyISAMOptmizeTable.sql
less GlobalMyISAMOptmizeTable.sql

Khi bạn tin tưởng tập lệnh một cách trực quan, chỉ cần chạy nó

mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql

Hãy thử !!!

CẬP NHẬT 2012-07-25 09:52 EDT

Tôi muốn làm rõ một trong những đề xuất của tôi để nén MyISAM

Tôi đã nói trước đó

  • OPTIMIZE TABLE mydb.mytable;
  • ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;

Các lệnh này giống hệt nhau về mặt cơ học. OPTIMIZE TABLE thực hiện chống phân mảnh bảng MyISAM và sau đó chạy ANALYZE TABLE để tính toán thống kê chỉ mục mới.

Nói một cách máy móc, đây là ALTER TABLE mydb.mytable ENGINE=MyISAM; hiện:

CREATE TABLE mydb.mytabletmp LIKE mydb.mytable;
INSERT INTO mydb.mytabletmp SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytablezap;
ALTER TABLE mydb.mytabletmp RENAME mydb.mytable;
DROP TABLE mydb.mytablezap;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa ngoại Django trong một lược đồ khác

  2. SQLSTATE [HY000] [2003] Không thể kết nối với máy chủ MySQL trên lỗi '127.0.0.1' (61) Laravel 4.1

  3. Sử dụng MSSQL và MySQL với CodeIgniter

  4. Chỉ mục hàng không chính xác khi nhóm

  5. Laravel 5:đồng bộ hóa một trường bổ sung qua trục xoay