1. 程式人生 > >使用Amanda ZRM備份遠端MySQL資料庫

使用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服務。
到此恢復完成。