Mysql

使用 InnoDB 和 MyISAM 表創建一致 線上 MySQL 備份

  • June 1, 2011

我只是花了幾個小時建構一個新的數據庫伺服器,以從mysqldump一個月前創建的文件中替換 2 個失敗的伺服器,然後使用我伺服器的 bin-logs 來mysqldump更新它。現在我有了這個新的數據庫伺服器,並且已經執行了幾天,我需要完成伺服器設置並重新實施備份策略。

我需要(至少)為新伺服器上線一個 MySQL Replication Slave,並開始創建可用的備份,以備再次失敗時使用。

在我進一步移動之前:

  • 在導入舊的邏輯備份並執行舊的 bin 日誌之前,我忘記(eep)在新的 MySQL 伺服器上啟用 bin-log(我猜是因為當時 24 小時都處於清醒狀態)。
  • 我的數據由幾個數據庫組成,所有這些數據庫都混合了 MyISAM 表和 InnoDB 表。
  • 此外,與在新伺服器上啟用 bin 日誌相同,我忘記在導入所有數據之前打開innodb-file-per-table選項。my.cnf現在在新的 MySQL 伺服器上啟用了二進制日誌,但是在我可以導入另一個邏輯備份之前,每個表的 inno 文件選項幾乎是不可修復的(我可能最終會啟動第二個從站,並提升第一個從站掌握並放棄目前的主人 - 因為配置不是我需要的地方)。

所以,問題:

我需要備份 MySQL 伺服器,但我不能讓新的 MySQL 伺服器離線。我需要繼續進行寫入,並在幾乎沒有停機時間的情況下提供讀取服務。這種“幾乎沒有停機時間”的要求被定義為少於 10 分鐘。我的數據目前在伺服器上使用了大約 100GB 的空間(mysql 數據文件),邏輯備份大約是 50GB(這是很多索引..哈哈)。我不在乎這個備份是合乎邏輯的,還是來自 MySQL 數據目錄的數據文件的副本。我可以在從機聯機後創建邏輯備份。

而且,問題是:

您將如何創建所需的備份?我知道這不容易,很多人會說這不可能。但我拒絕相信這是不可能的,必須有辦法完成它。

*關於伺服器的說明:*它執行的是 Ubuntu 10.04、MySQL 5.1.41,並且儲存數據的文件系統是 ext3。伺服器在 Rackspace 雲上執行,因此文件系統幾乎“就是它的樣子”,除非我可以重新分區根設備並用另一個 FS(可能是 XFS?)重新分區以進行快照。

我讀過Perconas XtraBackup Tool但它只適用於 InnoDB 表。他們有一個 MyISAM 工具,但我真的不明白它如何(或者即使它確實)與 XtraBackup 一起工作以創建完全一致的備份。

我讀過mysqlhotcopy但它只適用於 MyISAM 表。

顯然我知道mysqldump,但是(同樣,很明顯)這裡的問題是創建一致的備份,而不會在輸出整個 sql 備份文件所需的小時數內鎖定整個數據庫伺服器。

關於 XtraBackup,或者更具體地說是 innobackupex,請查看此說明

摘抄:

innobackupex 程序還允許您備份 MyISAM 表和 .frm 文件,從而增加了更多便利和功能。它啟動 xtrabackup,等到它完成文件複製,然後發出 FLUSH TABLES WITH READ LOCK 以防止對 MySQL 數據的進一步更改並將所有 MyISAM 表刷新到磁碟。它持有這個鎖,複製 MyISAM 文件,然後釋放鎖。

備份的 MyISAM 和 InnoDB 表最終會相互一致,因為在準備(恢復)過程之後,InnoDB 的數據會前滾到備份完成的點,而不是回滾到它開始的點。這個時間點與 FLUSH TABLES WITH READ LOCK 的位置相匹配,因此 MyISAM 數據和準備好的 InnoDB 數據是同步的。

希望這可以幫助。

乾杯

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