Mysql

MySQL:如何在生產數據庫中將許多 MyISAM 表轉換為 InnoDB?

  • April 22, 2011

我們有一個完全由 MyISAM 表組成的生產數據庫。我們正在考慮將它們轉換為 InnoDB 以獲得更好的並發性和可靠性。

  1. 我可以在不關閉 MySQL 的情況下將 myISAM 表更改為 InnoDB 嗎?這裡推薦的程序是什麼?
  2. 這種轉換需要多長時間?所有表的總大小約為 700MB
  3. 有相當多的桌子。有什麼方法可以ALTER TABLE一次應用到所有 MyISAM 表而不是一個一個地應用?
  4. 我需要注意哪些陷阱?

謝謝

你能行的。從 MyISAM 轉換到 InnoDB 應該不是問題,因為 InnoDB 具有 MyISAM 中不可用的更多功能,例如事務。

您可以在數據庫執行時更改表。無需關閉,但此操作將鎖定表。

對於所需的時間,這取決於伺服器規格/負載/數據庫大小等。

您可以使用腳本來自動執行此過程。使用命令show tables,您可以獲得表列表。然後,使用一個簡單的腳本,您可以讀取此列表並執行 alter table 命令。

這是一個簡單的 perl 腳本,它將從文件中讀取表列表並將 SQL 查詢寫入另一個文件。呼叫此腳本後,您可以將輸出文件提供給mysql命令以進行所需的更改。

open(INFILE, "< tables_list.txt");
open(OUTFILE, "> alter_tables.sql");
foreach my $name (<INFILE>) {
  chomp($name);
  print OUTFILE "ALTER TABLE $name engine=InnoDB;\n";
}
close(INFILE);
close(OUTFILE);

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