1.下載安裝xtrabackup
rpm-ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/
percona-release-0.1-3.noarch.rpm
yum install percona-xtrabackup -y
2. 創建備份的目錄和基本參數
mkdir /data_backup ///創建備份目錄
--user= #指定數據庫備份用戶
--password= #指定數據庫備份用戶密碼
--port= #指定數據庫端口
--host= #指定備份主機
--socket= #指定socket文件路徑
--databases= #備份指定數據庫,多個空格隔開,如--databases="dbname1 dbname2",不加備份所有庫
--defaults-file= #指定my.cnf配置文件
--apply-log #日誌回滾
--incremental= #增量備份,後跟增量備份路徑
--incremental-basedir= #增量備份,指上次增量備份路徑
--redo-only #合併全備和增量備份數據文件
--copy-back #將備份數據複製到數據庫,數據庫目錄要爲空
--no-timestamp #生成備份文件不以時間戳爲目錄名
--stream= #指定流的格式做備份,--stream=tar,將備份文件歸檔
--remote-host=user@ipDST_DIR #備份到遠程主機
3.模擬備份
/usr/bin/innobackupex --user=root--password=123456 --socket=/tmp/mysql.sock /data_backup/ ///全備份
然後我再數據庫裏添加了幾個表和記錄(模擬第2天)
innobackupex--user=root -password=123456 --incremental /data_backup/--incremental-basedir=/data_backup/2015-09-25_14-01-10/ --socket=/tmp/mysql.sock ///增量備份
然後我又再數據庫裏添加了幾張表和記錄(模擬第3天)
innobackupex --user=root -password=123456--incremental /data_backup/ --incremental-basedir=/data_backup/2015-09-25_14-15-20/ --socket=/tmp/mysql.sock ///增量備份
然後我再次修改數據(模擬第4天)
innobackupex --user=root -password=123456--incremental /data_backup/ --incremental-basedir=/data_backup/2015-09-25_14-27-21/ --socket=/tmp/mysql.sock ///增量備份
然後我繼續創了個表,寫了一些記錄,並在第2天添加的記錄裏刪除一條(模擬恢復)
4.模擬恢復
service mysqld stop ///關閉服務
mkdir /tmp/linshi ///創建臨時存放數據庫文件
mv /data/mysql/* /tmp/linshi ///數據庫文件必須清空才能恢復
innobackupex --apply-log --redo-only/data_backup/2015-09-25_14-01-10/ ///合併第一個增量備份
innobackupex --apply-log --redo-only/data_backup/2015-09-25_14-01-10/--incremental-dir=/data_backup/2015-09-25_14-15-20 ///合併第二個增量備份
innobackupex --apply-log --redo-only/data_backup/2015-09-25_14-01-10/--incremental-dir=/data_backup/2015-09-25_14-27-21/ ///合併第三個增量備份
innobackupex --apply-log --redo-only/data_backup/2015-09-25_14-01-10/ --incremental-dir=/data_backup/2015-09-25_14-38-02/ ///合併第四個增量備份
innobackupex --defaults-file=/etc/my.cnf--copy-back /data_backup/2015-09-25_14-01-10/
///恢復完整備份
chown -R mysql.mysql /data/mysql/ ///xtrabackup後會把數據文件宿主歸root
service mysqld restart ///開啓服務
cat /data_backup/2015-09-25_14-01-10/xtrabackup_binlog_info 查看裏面的日誌文件和恢復到的position
cd /tmp/linshi/ ///進入以前的數據文件目錄
mysqlbinlog mysql-bin.000002 ///找出破壞前的那個position
mysqlbinlog --start-position=3625 --stop-position=5181 /tmp/linshi/mysql-bin.000002>/data_backup/`date +%F`_recovery.sql ///恢復2個position中間數據
mysql -uroot -p123456</data_backup/2015-09-25_recovery.sql ///導入到數據庫
不過備份恢復後日志文件會清空,導致主從失敗,需要重新寫主從配置好像有個--safe-slave-master選項,有待研究,xtrabackup太強大很多需要探索。