Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。
Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
(2)innobackupex-1.5.1則封裝了xtrabackup,是一個腳本封裝,所以能同時備份處理innodb和myisam,但在處理myisam時需要加一個讀鎖。
(3)備份的效率應該是mysql自帶工具 MYSQLDUMP 的 10倍左右
xtraBackup基于InnoDB的crash-recovery功能。它會復制innodb的data file,由于不鎖表,復制出來的數據是不一致的,在恢復的時候使用crash-recovery,使得數據恢復一致。
InnoDB維護了一個redo log,又稱為transaction log,事務日志,它包含了innodb數據的所有改動情況。當InnoDB啟動的時候,它會先去檢查data file和transaction log,并且會做二步操作:
XtraBackup在備份的時候,一頁一頁地復制innodb的數據,而且不鎖定表,與此同時,XtraBackup還有另外一個線程監視著transactions log,一旦log發生變化,就把變化過的logpages復制走。為什么要急著復制走呢,因為transactions log文件大小有限,寫滿之后,就會從頭再開始寫,所以新數據可能會覆蓋到舊的數據。
在prepare過程中,XtraBackup使用復制到的transactions log對備份出來的innodb data file進行crash recovery
下載地址
http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.1.6/binary/Linux/x86_64/percona-xtrabackup-2.1.6-702-Linux-x86_64.tar.gz
解壓
tar percona-xtrabackup-2.1.6-702-Linux-x86_64.tar.gz
cd percona-xtrabackup-2.1.5-Linux-x86_64/bin
復制到/usr/bin目錄就可以了
cp * /usr/bin
修改低版本mysql的配置文件
vi /etc/my.cnf
#在[mysqld]下面添加如下內容
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
plugin_dir=/usr/lib64/mysql/plugin
全部備份
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /home/databackup/whole/
增量備份
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 --incremental /home/databackup/one --incremental-basedir=/home/databackup/whole/2016-05-10_16-32-48
備份zabbix庫
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456--port=3306 --database=zabbix /home/databackup/zabbix
刪除數據庫
/etc/init.d/mysqld stop
cd /var/lib/mysql/
rm -rf *
準備全量恢復的數據
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123.com --apply-log --redo-only /home/databackup/whole/2016-05-10_16-32-48
準備增量恢復的數據
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123.com --apply-log --redo-only /home/databackup/whole/2016-05-10_16-32-48 --incremental-dir=/home/databackup/one/2016-05-10_17-37-11
真正恢復操作
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123.com --copy-back /home/databackup/whole/2016-05-10_16-32-48
#修改恢復數據的屬主與屬組
chown -R mysql:mysql *
啟動mysql
/etc/init.d/mysqld start
#利用二進制日志基于時間點恢復
cat /home/databackup/one/2016-05-10_17-37-11/xtrabackup_binlog_info
mysql-bin.000012 349
#用mysqlbinlog工具導出最后一次增量備份后的sql操作
mysqlbinlog --start-position=349 /var/lib/mysql/mysql-bin.000001 > /tmp/position.sql
導入數據
mysql> source /tmp/position.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。