Là một DBA của MySQL, tôi tin tưởng MySQL thực hiện chuyển đổi bằng cách nhờ MySQL viết kịch bản cho tôi.
Hình thành lệnh Linux chạy truy vấn này
mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',db,'.',tb,' ENGINE=InnoDB;') FROM (SELECT A.db,A.tb,A.tbsize FROM (SELECT table_schema db,table_name tb,(data_length+index_length) tbsize FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A LEFT JOIN (SELECT table_schema db,table_name tb FROM information_schema.statistics WHERE index_type='FULLTEXT') B USING (db,tb) WHERE B.db IS NULL) AA ORDER BY tbsize" > /root/ConvertMyISAM2InnoDB.sql
Kịch bản sẽ chuyển đổi các bảng nhỏ nhất đầu tiên. Tập lệnh này cũng đã bỏ qua mọi bảng MyISAM có chỉ mục FULLTEXT.
Sau khi xem qua tập lệnh, bạn có thể chỉ cần chạy nó trong MySQL như sau:
mysql -h... -u... -p... -A < /root/ConvertMyISAM2InnoDB.sql
hoặc nếu bạn muốn xem thời gian của mỗi chuyển đổi, hãy đăng nhập vào mysql và chạy nó:
mysql> source /root/ConvertMyISAM2InnoDB.sql
Điều này không nên bị rối vì khóa bảng đầy đủ xảy ra khi chuyển đổi đang được thực hiện.
Khi tất cả các bảng được chuyển đổi, bạn cần điều chỉnh cài đặt MySQL để sử dụng InnoDB và thu nhỏ key_buffer.
Vui lòng đọc phần này để thiết lập Nhóm đệm InnoDB: /dba/1/what-are-the-main-differences-b between-sinodb-and-myisam / 194 # 23194
Vui lòng đọc phần này: /drupal/1715/what-would-the-optimal-mysql-configuration-for-a-drupal-7-site-be/2367#2367
Hãy thử một lần !!!