使用Amanda ZRM備份遠端MySQL資料庫
本文寫道最後的時候,我才發現ZRM for MySQL的一個致命問題,就我目前的理解和測試來看,它恢復資料的時候是採取覆蓋的方式,舉個例子,假定某臺數據庫伺服器上有兩個資料庫test1,test2,你備份了這兩個資料庫,某一天,test2資料庫裡的某一個表壞了,那麼它無法做到僅僅只是恢復損壞的表,甚至無法做到僅僅恢復test2,而是直接把test1,test2都恢復。那這絕對是一個噩夢。
但願我目前的理解是錯誤的,只是我實在找不到控制恢復粒度的地方。下面的文字就當閒著無聊看看吧。
Zmanda Recovery Manager(ZRM)提供了備份MySQL資料庫的能力,並且支援兩種備份模式:邏輯備份和裸備份,有關詳細的介紹,可以看
先介紹備份的環境,如果大家看過之前的那篇Amanda集中備份例項,那麼大概就知道是什麼樣的一個網路架構了,承接上文,這裡備份伺服器還是cp1.domain.com,MySQL資料庫分別執行在cp2.domain.com和cp3.domain.com上,需要備份其所有的資料庫。
一、服務端的安裝和配置
首先從官方站點下載對應系統的服務端程式,然後安裝。注意:服務端與perl-DBI,MySQL-client程式庫有依賴關係,安裝之前先安裝這個兩個包。
安裝完後,/etc/mysql-zrm/是其配置檔案的所在地。/etc/mysql-zrm/目錄下有一個mysql-zrm.conf檔案,這是最重要的配置檔案。在/etc/mysql-zrm/目錄下,你可以建立一些目錄,每一個目錄就是一個備份集的名稱,我這裡為了直觀,採取了主機名的方式來建立備份集
mkdir /etc/mysql-zrm/{cp2.domain.com,cp3.domain.com} cp /etc/mysql-zrm/{mysql-zrm.conf,cp2.domain.com/,cp3.domain.com/}
/etc/mysql-zrm/mysql-zrm.conf可以做為全域性配置檔案,針對每一臺需要備份的資料庫的不同,可以在備份集目錄裡的mysql-zrm.conf再定義,這裡的定義可以覆蓋全域性定義。
首先,我們把一些全域性定義資訊配置在/etc/mysql-zrm/mysql-zrm.conf檔案裡
#cat /etc/mysql-zrm/mysql-zrm.conf backup-level=0 backup-mode=logical backup-type=regular destination=/yourpath/db compress=1 compress-plugin=/bin/gzip encrypt=1 encrypt-plugin="/usr/share/mysql-zrm/plugins/encrypt.pl" decrypt-option="-d" all-databases=1 user="backup-user" password="securepassword" mailto="your@domain.com"
上面的配置資訊應該比較直觀。
然後配置每一臺MySQL伺服器的一些特有引數
#cat /etc/mysql-zrm/cp2.domain.com/mysql-zrm.conf host="cp2.domain.com" destination=/yourpath/db #cat /etc/mysql-zrm/cp3.domain.com/mysql-zrm.conf host="cp3.domain.com" destination=/yourpath/db
建立加密的密碼檔案
[[email protected]:~# touch /etc/mysql-zrm/.passphrase [[email protected]:~# echo encryptpass > /etc/mysql-zrm/.passphrase [[email protected]:~# chmod 700 /etc/mysql-zrm/.passphrase
二、配置客戶端
這裡有兩臺機器,cp2和cp3,因為我們備份的型別一樣,所以cp2的配置過程和cp3的配置過程一樣,這裡只描述cp2的配置過程
1.登入cp2伺服器
2.用MySQL的管理員帳號(一般是root)登入MySQL資料庫
mysql -uroot -p Enter password: Welcome TO the MySQL monitor. Commands end WITH ; OR \g. Your MySQL connection id IS 38208 Server version: 5.0.45-log Source distribution Type 'help;' OR '\h' FOR help. Type '\c' TO clear the buffer. mysql>
3.建立一個使用者備份的帳號並授予一定的許可權,帳號的定義在備份伺服器的/etc/mysql-zrm/mysql-zrm.conf檔案裡有定義,這裡帳號是backup-user,密碼是securepassword
mysql> GRANT SELECT, INSERT, UPDATE, CREATE, DROP, reload, shutdown, -> ALTER, super, LOCK TABLES, replication client ON *.* TO -> 'backup-user'@'cp1.domain.com' IDENTIFIED BY 'securepassword';
提示:如果你需要備份的資料庫不是全部,那麼在授權的時候,最好是指定,而不是上面的*.*方式,安全為主!
三、測試備份
配置還是比較簡單的,現在我們開始測試。
首先的用root帳號登入cp1機器,然後執行下面的指令:
[email protected]:/etc/mysql-zrm# mysql-zrm --action backup --backup-level 0 --backup-set cp3.domain.com backup:INFO: ZRM for MySQL Community Edition - version 2.1 cp3.domain.com:backup:INFO: START OF BACKUP cp3.domain.com:backup:INFO: PHASE START: Initialization cp3.domain.com:backup:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular' cp3.domain.com:backup:WARNING: Binary logging is off. cp3.domain.com:backup:INFO: backup-set=cp3.domain.com cp3.domain.com:backup:INFO: backup-date=20090415180321 cp3.domain.com:backup:INFO: mysql-server-os=Linux/Unix cp3.domain.com:backup:INFO: backup-type=regular cp3.domain.com:backup:INFO: host=cp3.3yidc.cn cp3.domain.com:backup:INFO: backup-date-epoch=1239789801 cp3.domain.com:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 2.1 cp3.domain.com:backup:INFO: mysql-version=5.0.45 cp3.domain.com:backup:INFO: backup-directory=/yourpath/db/cp3.domain.com/20090415180321 cp3.domain.com:backup:INFO: backup-level=0 cp3.domain.com:backup:INFO: backup-mode=logical cp3.domain.com:backup:INFO: PHASE END: Initialization cp3.domain.com:backup:INFO: PHASE START: Running pre backup plugin cp3.domain.com:backup:INFO: PHASE END: Running pre backup plugin cp3.domain.com:backup:INFO: PHASE START: Flushing logs cp3.domain.com:backup:INFO: PHASE END: Flushing logs cp3.domain.com:backup:INFO: PHASE START: Creating logical backup cp3.domain.com:backup:INFO: logical-databases=apachelogs dtc fireyang hnnoritz mysql s567 wordpress cp3.domain.com:backup:INFO: PHASE END: Creating logical backup cp3.domain.com:backup:INFO: PHASE START: Calculating backup size & checksums cp3.domain.com:backup:INFO: last-backup=/csdata/backup/db/cp3.domain.com/20090415180226 cp3.domain.com:backup:INFO: backup-size=4.04 MB cp3.domain.com:backup:INFO: PHASE END: Calculating backup size & checksums cp3.domain.com:backup:INFO: PHASE START: Compression/Encryption cp3.domain.com:backup:INFO: compress=/bin/gzip cp3.domain.com:backup:INFO: encrypt=/usr/share/mysql-zrm/plugins/encrypt.pl cp3.domain.com:backup:INFO: decrypt-option=-d cp3.domain.com:backup:INFO: backup-size-compressed=0.46 MB cp3.domain.com:backup:INFO: PHASE END: Compression/Encryption cp3.domain.com:backup:INFO: read-locks-time=00:00:02 cp3.domain.com:backup:INFO: flush-logs-time=00:00:00 cp3.domain.com:backup:INFO: compress-encrypt-time=00:00:02 cp3.domain.com:backup:INFO: backup-time=00:00:02 cp3.domain.com:backup:INFO: backup-status=Backup succeeded cp3.domain.com:backup:INFO: Backup succeeded cp3.domain.com:backup:INFO: PHASE START: Running post backup plugin cp3.domain.com:backup:INFO: PHASE END: Running post backup plugin cp3.domain.com:backup:INFO: PHASE START: Mailing backup report cp3.domain.com:backup:INFO: PHASE END: Mailing backup report cp3.domain.com:backup:INFO: PHASE START: Cleanup cp3.domain.com:backup:INFO: PHASE END: Cleanup cp3.domain.com:backup:INFO: END OF BACKUP
以上是備份cp3.domain.com的資料庫,用同樣的指令可以備份cp2.domain.com資料庫。
4、檢驗
如果上述備份過程沒有報錯,那麼接下來就要看看備份的資料是不是有效了。在cp1機器上執行下面的指令
[email protected]:~# mysql-zrm --action verify-backup --backup-set cp3.domain.com verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1 cp3.domain.com:verify-backup:INFO: Verification successful [email protected]:~# mysql-zrm --action verify-backup --backup-set cp2.domain.com verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1 cp2.domain.com:verify-backup:INFO: Verification successful
校驗都沒有報錯,我們還可以看看備份的效能,備份的詳細資訊等,更多的使用方式,可以檢視mysql-zrm(1)
[email protected]:~# mysql-zrm --action report --show backup-performance-info REPORT TYPE : backup-performance-info backup_set backup_date backup_level backup_size backup_size_compressed backup_time ---------------------------------------------------------------------------------------------------------------------------------------------------------------- cp3.domain.com Wed 15 Apr 2009 06:03:21 0 4.04 MB 0.46 MB 00:00:02 cp3.domain.com Wed 15 Apr 2009 06:02:26 0 4.04 MB 0.46 MB 00:00:02 cp3.domain.com Wed 15 Apr 2009 06:01:38 0 4.04 MB 0.46 MB 00:00:03 cp2.domain.com Wed 15 Apr 2009 05:19:57 0 315.05 MB 121.38 MB 00:02:36 cp3.domain.com Wed 15 Apr 2009 05:19:33 0 4.03 MB 0.46 MB 00:00:02 [email protected]:~# mysql-zrm --action list --backup-set cp3.domain.com list:INFO: ZRM for MySQL Community Edition - version 2.1 0 /csdata/backup/db/cp3.domain.com/20090415180321 Index File { decrypt-option=-d backup-status=Backup succeeded mysql-version=5.0.45 backup-date=20090415180321 mysql-zrm-version=ZRM for MySQL Community Edition - version 2.1 compress-encrypt-time=00:00:02 backup-type=regular logical-databases=apachelogs dtc fireyang hnnoritz mysql s567 wordpress mysql-server-os=Linux/Unix backup-level=0 last-backup=/csdata/backup/db/cp3.domain.com/20090415180226 backup-size-compressed=0.46 MB backup-size=4.04 MB encrypt=/usr/share/mysql-zrm/plugins/encrypt.pl backup-set=cp3.domain.com backup-time=00:00:02 host=cp3.3yidc.cn backup-directory=/csdata/backup/db/cp3.domain.com/20090415180321 flush-logs-time=00:00:00 read-locks-time=00:00:02 compress=/bin/gzip backup-date-epoch=1239789801 } [email protected]:~#
五、恢復
假定cp2伺服器上的資料庫ehcpbackup20090403170240丟失了(這裡是我人工刪除了這個庫),我們看看如何從備份裡恢復。
1.登入cp1機器
2.執行下面的命令,看看cp2機器上的資料庫現在備份在哪裡(為了顯示直觀,輸出結果有處理)
[email protected]:~# mysql-zrm-reporter --show restore-info --where backup-set=cp2.domain.com REPORT TYPE : restore-info backup_set backup_date backup_level backup_directory ------------------------------------------------------------------------------ cp3.domain.com 15/4 2009 0 /yourpath/db/cp2.domain.com/20090415171957
3.然後執行真正的備份指令:
[email protected]:~#mysql-zrm --action restore --backup-set cp2.domain.com --source-directory \ > /yourpath/db/cp2.domain.com/20090415171957 INFO: ZRM for MySQL Enteprise Edition - version 1.1 WARNING: Binary logging is off. Incremental backups cannot be done. INFO: Restore done in 169 seconds. MySQL server has been shutdown. Please restart after verification.
4.重啟cp2機器上的MySQL服務。
到此恢復完成。