Backup MySQL 資料庫備份 SQL 備份

實作MySQL備份還原 詳實說明三種機制模式

2018-07-17
如何安全地保存資料一直是IT管理的重要項目,而勤做資料備份絕對是最重要的例行工作。本文將以MySQL資料庫為例,實際示範幾種資料備份的機制,包括以mysqlpump進行備份、透過XtraBackup備份資料庫,以及使用MySQL內建的GTID機制來同步主資料庫與從資料庫內的資料。

但或許是程式的漏洞,此檔案並未加上datadir的選項(此選項是指定資料庫的所在目錄,表示要將檔案還原至此目錄)。

以筆者環境為例,datadir應該設為「/usr/local/mysql5/var」,因此必須在backup-my.cnf內加上「datadir=/usr/local/mysql5/var」設定。

接著要特別注意,由於在還原時,XtraBackup要求要還原的目錄必須為空目錄,因此必須先將「/usr/local/mysql5/var」更名或移除,以保持該目錄為空的狀態,建議採用更名的方式。

在停止從資料庫伺服器的運作後,執行下列指令來更名:

mv /usr/local/mysql5/var/ /usr/
local/mysql5/var-old

接著,就可以進行還原。在此假設備份檔案都存放在名稱為「db」的目錄下,即可利用執行下列指令來還原資料庫:

innobackupex --defaults-file=db/
backup-my.cnf  --copy-back  db

如果在執行完成後出現如圖4所示的畫面,就表示還原成功,已經備份檔案還原至「/usr/local/mysql5/var/」目錄下。


▲圖4 結果顯示還原成功。

接著,重新設定「/usr/local/mysql5/var」的權限,執行如下指令:

chown -R mysql:mysql /usr/local/
mysql5/var

最後,重新啟動MySQL伺服器即可。

在說明全資料庫的備份還原的方式後,接著講解如何備份還原單一資料庫。

備份還原單一資料庫

以名稱為「test」的資料庫為例,同樣地,在主資料庫伺服器上執行下列指令來備份「test」資料庫,並以壓縮檔案的形式儲存:

Innobackupex --user=mybackup
--password=mybackup --databases=
test--stream=tar --socket=/
tmp/mysql.sock --port=3306 /
mybackup/$(date +%F)|gzip >/
mybackup/$(date +%F).
tar.gz

在備份完成後,同樣在從資料庫伺服器上進行還原程序,還原步驟如下所示:


停止從資料庫伺服器的運作。


在備份檔案中的backup-my.cnf加上「datadir=/usr/local/mysql5/var/test」(以備份test為例)。


將原先的test資料庫目錄更名,以防萬一還原失敗,還可回復原狀,指令內容如下:

mv /usr/local/mysql5/var/test /
usr/local/mysql5/var/test-old


將從資料庫伺服器上原先的「ibdata1」更名,以防萬一還原失敗,還可回復原狀,執行如下指令:

mv /usr/local/mysql5/var/ibdata1 / 
usr/local/mysql5/var/ibdata1-old


假設還原檔案是置於「db」目錄下,以下列指令進行還原:

innobackupex --defaults-file=db
/backup-my.cnf --copy-back db


在還原程序成功後,便會在「/usr/local/mysql5/var/test」下再產生一個「test」目錄,而此目錄內的檔案,才是要還原的「test」資料庫的檔案。


然後,將還原檔中的ibdata1搬移到「/usr/local/mysql5/var/」:

mv /usr/local/mysql5/var/test/
ibdata1  /usr/local/mysql5/var/


接著,搬移還原檔的檔案至正確的位置:

mv /usr/local/mysql5/var/test/test
/*  /usr/local/mysql5/var/test/


緊接著,執行如下指令重新設定權限:

chown -R mysql:mysql /usr/local/
mysql5/var/


最後,再重啟從資料庫伺服器即可。

上述不管是使用mysqlpump或XtraBackup程式來進行備份,主資料庫均會與從資料庫存在一定時間的落差。例如定時每天備份主資料庫,從資料庫的內容與主資料庫的內容可能就存在一天的落差。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!