Mysql
數據庫中所有表的“ALTER 表”
如何為數據庫中的每個表執行以下命令:
ALTER table [table_name] type=innodb;
我不想為每個表手動執行它,而是為數據庫中的所有表執行它。順便說一句:如果您對我為什麼執行它感到好奇:http ://bugs.mysql.com/bug.php?id=1341 & http://bugs.mysql.com/bug.php?id=1287
假設您在 my.cnf 上設置了憑據和連接資訊,這樣的命令可能會執行您想要的操作。
mysql --batch --skip-column-names --execute \ 'select concat("alter table ",TABLE_SCHEMA,".",TABLE_NAME," type=innodb;") from information_schema.TABLES where TABLE_SCHEMA="database_name"' | mysql
將 database_name 替換為您的數據庫名稱。
至於你的主要問題。聽起來你想在讓你的 innodb 表變大後回收空間。就像 bug 說的那樣,處理這個問題的唯一安全方法是使用 mysqldump 導出所有內容。刪除文件,然後恢復。
正如那篇文章所指出的。您可以啟用
innodb_file_per_table
選項到您的伺服器的 my.cnf 將使每個文件作為一個單獨的文件存在。這樣,可以通過刪除/恢復問題表而不是所有內容來回收空間。