每一個InnoDB的頁面都會包含一個LSN信息,每當相關的數據發生改變,相關的頁面的LSN就會自動增加。這正是InnoDB表能夠進行增量備份的基礎,即innobackupex經過備份上次徹底備份以後發生改變的頁面來實現。mysql
要實現第一次增量備份,可使用下面的命令進行:sql
innobackupex --incremental /backup --incremental-basedir=BASEDIR
其中,BASEDIR指的是徹底備份所在的目錄,此命令執行結束後,innobackupex命令會在/backup目錄中建立一個新的以時間命名的目錄以存放全部的增量備份數據。另外,在執行過增量備份以後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。服務器
須要注意的是,增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是徹底備份。併發
「準備」(prepare)增量備份與整理徹底備份有着一些不一樣,尤爲要注意的是:
(1)須要在每一個備份(包括徹底和各個增量備份)上,將已經提交的事務進行「重放」。「重放」以後,全部的備份數據將合併到徹底備份上。
(2)基於全部的備份將未提交的事務進行「回滾」。app
因而,操做就變成了:ssh
innobackupex --apply-log --redo-only BASE-DIR
接着執行:socket
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
然後是第二個增量:測試
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR指的是徹底備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即若是有屢次增量備份,每一次都要執行如上操做;ui
mysql> create database week1; Query OK, 1 row affected (0.00 sec) mysql> use week1; Database changed mysql> create table test(name char(10) not null); Query OK, 0 rows affected (0.06 sec) mysql> insert into test (name) values ("kk01"); Query OK, 1 row affected (0.01 sec) [root@bogon ~]# innobackupex --user=shiina --password=shiina /backup/ ... ... xtrabackup: The latest check point (for incremental): '2496292' xtrabackup: Stopping log copying thread. .160530 19:06:15 >> log scanned up to (2496301) 160530 19:06:15 Executing UNLOCK BINLOG 160530 19:06:15 Executing UNLOCK TABLES 160530 19:06:15 All tables unlocked 160530 19:06:15 [00] Copying ib_buffer_pool to /backup/2016-05-30_19-06-10/ib_buffer_pool 160530 19:06:15 [00] ...done 160530 19:06:15 Backup created in directory '/backup/2016-05-30_19-06-10' 160530 19:06:15 [00] Writing backup-my.cnf 160530 19:06:15 [00] ...done 160530 19:06:15 [00] Writing xtrabackup_info 160530 19:06:15 [00] ...done xtrabackup: Transaction log of lsn (2496292) to (2496301) was copied. 160530 19:06:15 completed OK!
mysql> insert into test (name) values ("kk02"); Query OK, 1 row affected (0.02 sec) [root@bogon ~]# innobackupex --user=shiina --password=shiina --incremental /backup/ --incremental-basedir=/backup/2016-05-30_07-04-31/ ... ... xtrabackup: Transaction log of lsn (2499531) to (2499540) was copied. 160530 19:08:27 completed OK!
mysql> insert into test (name) values ("kk03"); Query OK, 1 row affected (0.02 sec) [root@bogon ~]# innobackupex --user=shiina --password=shiina --incremental /backup/ --incremental-basedir=/backup/2016-05-30_07-05-32/ ... ... xtrabackup: Transaction log of lsn (2499709) to (2499718) was copied. 160530 19:09:40 completed OK!
[root@bogon backup]# cat 2016-05-30_19-06-10/xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 #徹底備份的起始爲0 to_lsn = 2496292 last_lsn = 2496301 compact = 0 recover_binlog_info = 0 [root@bogon backup]# cat 2016-05-30_19-08-21/xtrabackup_checkpoints backup_type = incremental from_lsn = 2496292 to_lsn = 2499531 last_lsn = 2499540 compact = 0 recover_binlog_info = 0 [root@bogon backup]# cat 2016-05-30_19-09-35/xtrabackup_checkpoints backup_type = incremental from_lsn = 2499531 to_lsn = 2499709 last_lsn = 2499718 compact = 0 recover_binlog_info = 0
[root@bogon ~]# innobackupex --apply-log --redo-only /backup/2016-05-30_19-06-10/ ... xtrabackup: starting shutdown with innodb_fast_shutdown = 1 InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 2496310 InnoDB: Number of pools: 1 160530 19:10:49 completed OK! [root@bogon ~]# innobackupex --apply-log --redo-only --incremental /backup/2016-05-30_19-06-10/ --incremental-dir=/backup/2016-05-30_19-08-21/ ... 160530 19:35:54 completed OK! [root@bogon ~]# innobackupex --apply-log --redo-only --incremental /backup/2016-05-30_19-06-10/ --incremental-dir=/backup/2016-05-30_19-09-35/ ... 160530 19:36:38 completed OK!
Percona XtraBackup 執行相似如下命令準備(prepare)備份時, 報如下錯誤this
[root@bogon ~]# innobackupex --apply-log --redo-only --incremental /backup/2016-05-30_19-06-10/ --incremental-dir=/backup/2016-05-30_19-08-21/ ... ... InnoDB: File (unknown): 'read' returned OS error 114. Cannot continue operation InnoDB: Cannot continue operation.
中止mysql服務或重啓服務器, 便可解決
[root@bogon backup]# cat 2016-05-30_19-06-10/xtrabackup_checkpoints backup_type = log-applied from_lsn = 0 to_lsn = 2499709 last_lsn = 2499718 #注意此時徹底備份的 last_lsn 與第二次增量備份的 last_lsn 值相等, 說明增量備份的數據已經合併到了徹底備份中 compact = 0 recover_binlog_info = 0 [root@bogon backup]# cat 2016-05-30_19-08-21/xtrabackup_checkpoints backup_type = incremental from_lsn = 2496292 to_lsn = 2499531 last_lsn = 2499540 compact = 0 recover_binlog_info = 0 [root@bogon backup]# cat 2016-05-30_19-09-35/xtrabackup_checkpoints backup_type = incremental from_lsn = 2499531 to_lsn = 2499709 last_lsn = 2499718 compact = 0 recover_binlog_info = 0
[root@bogon backup]# service mysqld stop Shutting down MySQL (Percona Server).. SUCCESS! [root@bogon backup]# rm -rf /data/mysql/* [root@bogon backup]# innobackupex --copy-back /backup/2016-05-30_19-06-10/ ... 160530 19:42:31 completed OK [root@bogon ~]# chown -R mysql:mysql /data/mysql/* [root@bogon ~]# service mysqld start Starting MySQL (Percona Server). SUCCESS!
[root@bogon ~]# mysql -h127.0.0.1 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.11-4 Percona Server (GPL), Release 4, Revision 5c940e1 Copyright (c) 2009-2016 Percona LLC and/or its affiliates Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use week1; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select * from test; +------+ | name | +------+ | kk01 | | kk02 | | kk03 | +------+ 3 rows in set (0.00 sec)
--defaults-file
同xtrabackup的--defaults-file參數
--apply-log
對xtrabackup的--prepare參數的封裝
--copy-back
作數據恢復時將備份數據文件拷貝到MySQL服務器的datadir ;
--remote-host=HOSTNAME
經過ssh將備份數據存儲到進程服務器上;
--stream=[tar]
備 份文件輸出格式, tar時使用tar4ibd , 該文件可在XtarBackup binary文件中得到.若是備份時有指定--stream=tar, 則tar4ibd文件所處目錄必定要在$PATH中(由於使用的是tar4ibd去壓縮, 在XtraBackup的binary包中可得到該文件)。
在 使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,若是你備份的時候併發寫入較大的話 xtrabackup_logfile可能會很大(5G+),極可能會撐滿你的/tmp目錄,能夠經過參數--tmpdir指定目錄來解決這個問題。
--tmpdir=DIRECTORY
當有指定--remote-host or --stream時, 事務日誌臨時存儲的目錄, 默認採用MySQL配置文件中所指定的臨時目錄tmpdir
--redo-only --apply-log組,
強制備份日誌時只redo ,跳過rollback。這在作增量備份時很是必要。
--use-memory=#
該參數在prepare的時候使用,控制prepare時innodb實例使用的內存量
--throttle=IOS
同xtrabackup的--throttle參數
--sleep=是給ibbackup使用的,指定每備份1M數據,過程中止拷貝多少毫秒,也是爲了在備份時儘可能減少對正常業務的影響,具體能夠查看ibbackup的手冊 ;
--compress[=LEVEL]
對備份數據迚行壓縮,僅支持ibbackup,xtrabackup尚未實現;
--include=REGEXP
對 xtrabackup參數--tables的封裝,也支持ibbackup。備份包含的庫表,例如:--include="test.",意思是要備份 test庫中全部的表。若是須要全備份,則省略這個參數;若是須要備份test庫下的2個表:test1和test2,則寫 成:--include="test.test1|test.test2"。也可使用通配符,如:--include="test.test"。
--databases=LIST
列出須要備份的databases,若是沒有指定該參數,全部包含MyISAM和InnoDB表的database都會被備份;
--uncompress
解壓備份的數據文件,支持ibbackup,xtrabackup尚未實現該功能;
--slave-info,
備 份從庫, 加上--slave-info備份目錄下會多生成一個xtrabackup_slave_info 文件, 這裏會保存主日誌文件以及偏移, 文件內容相似於:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0
--socket=SOCKET指定mysql.sock所在位置,以便備份進程登陸mysql.