簡體   English   中英

mysqldump或mysqlhotcopy備份大型MySQL數據庫?

[英]mysqldump or mysqlhotcopy to backup large MySQL database?

我有一些NAS存儲要與我的專用托管服務提供商進行備份。 我使用WHM設置自動每日備份以備份數據庫和帳戶。 服務器托管一個站點。 當它進行備份時,它執行一個mysql轉儲,並且實際上在整個備份過程中將站點關閉,因為在轉儲發生時沒有人可以連接到數據庫。 該網站通常會停機約30秒到一分鍾(這可能看起來不多,但對於這種網站來說這是一個真正的問題)。

是否有更好的方法來進行備份以便不會發生這種情況(mysqlhotcopy或Maatkit會更好嗎?),無論是備份到NAS的不同方法,還是根本不使用NAS並使用其他方法。

mysqlhotcopy比mysqldump快,但不做InnoDB。

要進行備份,我使用復制並對從屬進行轉儲。 在備份過程中,您可以獲得0停機時間和無負載峰值。

對於InnoDB,沒有復制的最佳解決方案似乎是:

mysqldump mydbname --result-file=mydbname.sql --verbose --single-transaction

它使用InnoDB的事務快照功能,並允許正常(寫!)數據庫操作而不會中斷。 使用--master-data=1您甚至可以自動記錄快照的二進制日志位置。 但是,在同一服務器上的多個數據庫上單獨執行此操作時,二進制日志位置似乎毫無價值。

缺點是當您有一些MyISAM表時,這不能正常工作。 我自己使用MySQL的全文索引,這需要未分區的MyISAM表。 但是,人們可以安排事情,使MyISAM表只是輔助數據集,其中一個轉儲已存在於InnoDB表中的文本,以便MyISAM表可以在需要時從頭開始重建。 我有一個腳本,它檢查數據庫的表類型,並且只要一個數據庫中只有InnoDB表,就使用--single-transaction而不是--lock-tables

另一種解決方案是使用某些磁盤或文件系統快照功能,例如LVM。 但是,當存在快照時,由於LVM極其笨拙的寫入時備份機制(這被錯誤地聲稱是COW,而不是常識),因此這將是一個非常重要的性能損失。 因此,一個非常好的解決方案似乎是Solaris ZFS或FreeBSD UFS上的MySQL。 兩者都支持有效的快照,並且由於其年齡而相對穩定。 Btrfs也有高效的快照,但仍然是BETA。

好吧,還有另一種相當有效的快照技術:mdraid1 - Linux softraid level 1.如果你在mdraid1上運行MySQL,只需插入另一個磁盤,讓它同步,停止mysql,進行同步,刪除第三個和同步的raid組件,重啟mysql。 如果您對raid1使用位圖,重新同步以拍攝另一張快照通常會非常快......

您不需要另一台服務器,只需將另一台MySQL安裝在同一台機器上的沙盒中。 負載可能會有點飆升,但您不會遇到任何鎖定問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM