2011-04-27 43 views
1

想要在c的生產模式下將經常從主服務器使用的一些大表複製到本地服務器。Mysql dump:複製生產中的MYI文件是安全的嗎?

安全嗎?

一些建議,工具,歡迎。 :)

+0

爲什麼不使用http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html? – 2011-04-27 17:27:18

+2

'mysqldump'可以慢得多,但它更可能產生一致的結果。 – pkaeding 2011-04-27 20:42:37

+0

明智的話通過pkaeding和值得投票 – 2011-04-27 21:30:06

回答

1

我從詢問有關MYI表猜你所有的表是MyISAM表,而不是InnoDb的。每個MyISAM表由三個文件組成:.frm,.MYD和.MYI,它們分別包含結構,數據和索引。

人們建議不要從正在運行的系統中複製這些原始文件,但我發現只要您確定沒有任何內容寫入表格,那麼複製它們就能正常工作(我已經完成了比我想要記住的更多的次數)。

如果您正在複製副本上執行此操作,請在複製之前停止複製副本。如果它只是一臺服務器或主服務器,我建議在開始複製文件之前先運行FLUSH TABLES WITH READ LOCK,這樣可以防止任何進程寫入表中。完成後,使用UNLOCK TABLES釋放鎖定。

我總是會建議在以這種方式複製的表格上執行CHECK TABLE。我覺得是我已經在過去mysqlcheck --all-tables --fast --auto-repair

如果您使用LVM在服務器上,然後取一個LVM快照可以得到一個乾淨的快照保持的另一種方式使用。

如果你打算經常這樣做,我建議使用複製來保持本地服務器是最新的,或者設置一個可用於備份的slave(因爲它不是主數據庫你停止它,傾倒表等)的問題

0

是的,它是正常的,如果你

  • 關閉MySQL服務器下複製文件乾淨之前,至少需要一個全球性的讀鎖
  • 取.frm .MYI和.MYD文件。
  • 具有相同的my.cnf,而且每個系統

上運行相同版本的MySQL所以它基本上是好的,但不一定是一個好主意。

如果你有不同版本的mysql(你通常只能移動到更新的版本,而不是更老的版本),或者運行時使用的是一個明顯不同的my.cnf(即任何全文索引參數不同,你有全文索引),你可能需要重建表格。重建表可以在目標服務器上用ALTER TABLE blah ENGINE = MyISAM完成;這可能仍然比mysqldump/restore快一點。

+0

好的建議,但...我不認爲有很多配置選項,將導致問題與移動和次要版本之間移動應該沒事。我看到的唯一問題是在MyISAM存儲引擎格式發生變化的大版本差異(即4.x到5.0)上。 – 2011-04-27 21:54:01

+0

有很多邊緣情況。特別是如果您使用全文索引。在某些情況下,它可能會產生一個表面上的表面,但有微妙的結構問題。 – MarkR 2011-04-28 16:17:38

相關問題