對MySQL數據庫的備份與恢復是非常有必要的,它可以用很多種方法來實現,本文我們主要介紹了使用Xtrabackup來進行備份的全部過程,接下來就讓我們一起來了解一下這部分內容。
Xtrabackup是percona公司的開源項目,用以實現類似innodb官方的熱備份工具InnoDB Hot Backup的功能,能夠非常快速地備份與恢復mysql數據庫。 Xtrabackup中包含兩個工具:
xtrabackup是用於熱備份innodb, xtradb表中數據的工具,不能備份其他類型的表,也不能備份數據表結構;
innobackupex是將xtrabackup進行封裝的perl腳本,提供了備份myisam表的能力。
由於innobackupex的功能更為全面和完善,所以,本文以innobackupex作為基礎進行研究描述。
下載和安裝
在以下地址可以下載到xtrabackup:http://www.percona.com/downloads/XtraBackup/,可以根據自己的需要選擇穩定版本或者最新版本以及操作系統、源碼包或者rpm包等等。
我下載到的是xtrabackup-1.6.tar,是一個二進制壓縮包,解壓後可直接使用。
將下載到的文件包進行解壓tar zxvf xtrabackup-1.6.tar,然後在/usr/bin中建立相關應用的鏈接:
- ln -s /usr/bin/innobackupex /root/xtrabackup-1.6/bin/innobackupex
- ln -s /usr/bin/xtrabackup /root/xtrabackup-1.6/bin/xtrabackup
- ln -s /usr/bin/xtrabackup_51 /root/xtrabackup-1.6/bin/xtrabackup_51
- ln -s /usr/bin/tar4ibd /root/xtrabackup-1.6/bin/tar4ibd
其中,
innobackupex是我們要使用的備份工具;
xtrabackup是被封裝在innobackupex之中的,innobackupex運行時需要調用它;
xtrabackup_51是xtrabackup運行時需要調用的工具;
tar4ibd是以tar流的形式產生備份時用來打包的工具。
進行備份
完整備份:
innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test /mysqlbackup/
其中,--user指定連接數據庫的用戶名,--password指定連接數據庫的密碼,--defaults-file指定數據庫的配置文件,innobackupex要從其中獲取datadir等信息;--database指定要備份的數據庫,這裡指定的數據庫只對MyISAM表和InnoDB表的表結構有效,對於InnoDB 數據來說都是全備所有數據庫中的InnoDB數據都進行了備份,不是只備份指定的數據庫,恢復時也一樣);/mysqlbackup是備份文件的存放位置。
完整備份並打包:
innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test --stream=tar /mysqlbackup > /mysqlbackup/dbbackup20110809.tar
其中,--stream指定流的格式,目前只支持tar。
完整備份並打包壓縮:
innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test --stream=tar /mysqlbackup/ | gzip /mysqlbackup/dbbackup20110809.tar.gz
完整備份到遠程主機:
innobackupex --user=root --password= MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test --stream=tar /mysqlbackup | ssh root@remote-host cat ">" /mysqlbackup/dbbackup20110809.tar
增量備份:
innobackupex --user=root --password=MySQLPASSWORD --database=test --incremental --incremental-basedir=/mysqlbackup/2011-08-09_14-50-20/ /mysqlbackup/trn/
其中,--incremental指明是增量備份,--incremental-basedir指定上次完整備份或者增量備份文件的位置。這裡的增量備份其實只針對的是InnoDB,對於MyISAM來說,還是完整備份。
進行恢復
完整備份恢復:
在進行恢復前,如果完整備份在遠程主機上,首先將完整備份復制到本地主機上,如果是tar包,則需要先解包,解包命令為:tar –izxvf dbbackup20110809.tar,這裡必須使用-i參數。然後停止mysql數據庫並刪除欲恢復的數據庫文件夾,如:
service mysql stop
rm /var/lib/mysql/test –rf
然後將備份文件中的日志應用到備份文件中的數據文件上。
innobackupex --user=root --password=MySQLPASSWORD --apply-log /mysqlbackup/full/2011-08-09_14-50-20/
這裡的--apply-log指明是將日志應用到數據文件上,完成之後將備份文件中的數據恢復到數據庫中:
innobackupex --user=root --password=MySQLPASSWORD --copy-back /mysqlbackup/full/2011-08-09_14-50-20/
這裡的—copy-back指明是進行數據恢復。數據恢復完成之後,需要修改相關文件的權限mysql數據庫才能正常啟動。
- chown mysql:mysql /var/lib/mysql/ib*
- chown mysql:mysql /var/lib/mysql/test
- service mysql start
注意:這裡我雖然指定的是test數據庫,但實際上如果其他數據庫中也有InnoDB表,那麼這些InnoDB表中的數據也會被恢復了。
增量備份恢復:
增量備份恢復的步驟和完整備份恢復的步驟基本一致,只是應用日志的過程稍有不同。增量備份恢復時,是先將所有的增量備份挨個應用到完整備份的數據文件中,然後再將完整備份中的數據恢復到數據庫中。命令如下:
應用第一個增量備份
innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --apply-log /mysqlbackup/full/2011-08-09_14-50-20/ --incremental-dir=/mysqlbackup/trn/2011-08-09_15-12-43/
應用第二個增量備份
innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --apply-log /mysqlbackup/full/2011-08-09_14-50-20/ --incremental-dir=/mysqlbackup/trn/2011-08-05_15-15-47/
將完整備份中的數據恢復到數據庫中。
innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --copy-back /mysqlbackup/full/2011-08-05_14-50-20/
其中,--incremental-dir指定要恢復的增量備份的位置。
以上就是使用xtrabackup對MySQL進行備份和恢復的全部過程,本文就介紹到這裡了,如果您想了解更多關於MySQL數據庫的知識,可以看一下這裡的文章:http://database.51cto.com/mysql/,相信一定可以給您帶來幫助的!