參考:html
http://blog.csdn.net/justdb/article/details/17054579# MySQL備份與恢復之percona-xtrabackup軟件的使用mysql
http://blog.csdn.net/justdb/article/details/17054667# MySQL備份與恢復之percona-xtrabackup實現增量備份及恢復sql
http://devliangel.blog.51cto.com/469347/1374232# 使用innobackupex在線增量備份及恢復mysql數據庫數據庫
http://www.percona.com/doc/percona-xtrabackup/2.2/# 官方使用手冊文檔app
http://blog.chinaunix.net/uid-20785090-id-4212816.html# xtraBackup備份原理剖析 ide
http://blog.csdn.net/tianlesoftware/article/details/7028733 # MySQL 數據文件 說明函數
xtrabackup 備份恢復測試過程測試
一、安裝ui
cd /data/softspa
wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/redhat/6/x86_64/percona-xtrabackup-2.2.6-5042.el6.x86_64.rpm
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
rpm -ivh percona-xtrabackup-2.2.6-5042.el6.x86_64.rpm
二、徹底備份及恢復
# mysql備份用戶受權
mysql> grant select,show view,Replication client,SUPER,RELOAD on *.* to 'backup'@'127.0.0.1' identified by 'passwd';flush privileges;
徹底備份
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password='passwd' --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --parallel=4 /data/backup
徹底恢復
#檢查及準備備份完的數據 --use-memory 參數默認100M, 表示能夠給innobackupex使用的內存,越多越好
innobackupex --parallel=4 --use-memory=1G --apply-log /data/backup/2014-11-18_15-52-40
#恢復
innobackupex --defaults-file=/usr/local/services/mysql/etc/my.cnf --parallel=4 --copy-back /data/backup/2014-11-18_15-52-40
chown mysql:mysql /data/mysql_data -R
service mysql start
三、增量備份及恢復
#針對已經備份的目錄進行增量備份
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password='passwd' --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --incremental /data/backup/ --incremental-dir /data/backup/2014-11-18_15-52-40
#再次插入數據
# 再次增量備份
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password='passwd' --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --incremental /data/backup/ --incremental-dir /data/backup/2014-11-18_18-11-35
#再次插入數據
# 再次增量備份
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password='passwd' --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --incremental /data/backup/ --incremental-dir /data/backup/2014-11-18_18-14-56
#模擬數據丟失
service mysql stop
rm -rf /data/mysql_data/*
#三次增量備份數據合併到全備份中去
innobackupex --apply-log --redo-only --incremental /data/backup/2014-11-18_15-52-40 --incremental-dir /data/backup/2014-11-18_18-11-35
innobackupex --apply-log --redo-only --incremental /data/backup/2014-11-18_15-52-40 --incremental-dir /data/backup/2014-11-18_18-14-56
innobackupex --apply-log --redo-only --incremental /data/backup/2014-11-18_15-52-40 --incremental-dir /data/backup/2014-11-18_18-17-07
#恢復整合後的全備數據
#檢查及準備備份完的數據
innobackupex --parallel=4 --use-memory=1G --apply-log /data/backup/2014-11-18_15-52-40
#恢復
innobackupex --defaults-file=/usr/local/services/mysql/etc/my.cnf --parallel=4 --copy-back /data/backup/2014-11-18_15-52-40
chown mysql:mysql /data/mysql_data -R
service mysql start
四、單數據庫備份及恢復
#指定數據庫備份
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password='passwd' --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --parallel=4 --databases='test_backup5' /data/backup
#模擬表數據丟失
mysql > drop test_backup5 MyClass;
mysql > create table MyClass( id int(4) not null primary key auto_increment, name char(20) not null, sex int(4) not null default '0', degree double(16,2));
ALTER TABLE test_backup5.MyClass IMPORT TABLESPACE:
# 恢復指定庫表數據
#指定數據庫恢復檢查及導出表空間文件
innobackupex --apply-log --export /data/backup/2014-11-19_18-05-35
# 刪除表空間
mysql > use test_backup5;
mysql > ALTER TABLE test_backup5.MyClass DISCARD TABLESPACE;
#複製須要導入的表空間文件到相應數據庫目錄,複製MyClass.ibd 和 MyClass.cfg (mysql5.6之前的版本是.exp)
cp /data/backup/2014-11-19_18-05-35/test_backup5/{MyClass.ibd,MyCLass.cfg} /data/mysql_data/test_backup5
# 導入表空間
mysql > use test_backup5;
mysql > ALTER TABLE test_backup5.MyClass IMPORT TABLESPACE;
五、使用定製的xtrabackup備份及恢復腳本 + binlog備份恢復
爲簡化操做編寫了三個腳本,各腳本中有數據庫及備份目錄參數設置(附件有下載連接)
腳本列表說明:
#全數據庫備份腳本 用法: ./xtrabackup_backup.sh
xtrabackup_backup.sh
#全數據庫導入腳本 用法: ./xtrabackup_all_import.sh <BAK_IMPORT_DATETIME>
xtrabackup_all_import.sh
#單數據庫導入腳本 用法: ./xtrabackup_import <BAK_IMPORT_DATETIME> <DBNAME>
xtrabackup_import.sh
#備份及恢復過程以下
# 徹底備份數據表結構,此處省略過程(注意,備份表結構需加-R(備份函數及存儲過程) --no-data(不備份數據))
# 徹底備份數據,使用備份腳本
sudo sh xtrabackup_backup.sh
# 備份目錄在爲
# innobackupex: Backup created in directory '/data/backup/2014-12-01_16-51-00'
# binlog信息在 xtrabackup_binlog_info 或 xtrabackup_info 中
# innobackupex: MySQL binlog position: filename 'mysql-bin.000006', position 191, GTID of the last change '7d481ded-790b-11e4-9d81-00e081e00029:1-178'
# Game數據庫,表cGameServerList 修改一條、添加一條數據、刪除一條數據 (三次修改數據,爲binlog恢復驗證作準備)
# 此處省略過程
# 刪除Game數據庫
drop database Game
# binlog日誌生成新文件
mysql -uroot -e "flush logs;"
# 查看binlog新日誌名稱
mysql -uroot -e "show binary logs;"|tail
# 建立數據庫,並導入表結構
mysql -uroot -e "create database Game"
mysql -uroot Game < Game-nodata.sql
# 用xtrabackup 單庫恢復Game, 執行恢復腳本 ,輸入參數 恢復備份目錄及恢復數據庫 (注意:mysiam 引擎表或在現有的innodb表基礎上恢復,須要重啓mysql服務)
sudo sh xtrabackup_import.sh 2014-12-01_16-51-00 Game
#檢查cGameServerList 表數據正常
# 經過binlog 恢復從定時備份到drop 數據庫前的數據
# 查看xtrabackup備份的binlog-info 備份時 MySQL binlog position: filename 'mysql-bin.000009', position 191
# 查看drop database Game 時 MySQL binlog position
sudo /usr/local/services/mysql/bin/mysqlbinlog --start-position=191 /data/mysql_data/mysql-bin.000006|grep -B 10 -i 'DROP DATABASE'
#備份現有binlog
cp /data/mysql_data/mysql-bin* /data/mysqlbinlogbak/
#初始化binlog,清空現有的mysqlbinlog日誌,若是不執行這步,導入不了最後須要執行的binlog中的數據記錄
mysql -uroot -e "reset master"
#導入須要恢復的binlog(按備份的position 至drop 前的position 恢復),若是須要恢復多個mysql-bin 文件,執行多條下面命令
sudo /usr/local/services/mysql/bin/mysqlbinlog /data/mysqlbinlogbak/mysql-bin.000009 --start-position=191 --stop-position=2814 | mysql -uroot
#再次檢查cGameServerList 表數據正常,發現此次數據爲作過三次修改的數據,到如今爲止,所有數據恢復正常
六、從數據庫使用參數 --slave-info --safe-slave-backup 記錄備份時的slave狀態,注意:slave信息備份須要的backup備份帳戶有 SUPER 權限