Mysql

數據庫中所有表的“ALTER 表”

  • May 23, 2021

如何為數據庫中的每個表執行以下命令:

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 將使每個文件作為一個單獨的文件存在。這樣,可以通過刪除/恢復問題表而不是所有內容來回收空間。

引用自:https://serverfault.com/questions/124797