xtrabackup全量備份和增(差)量備份
1.xtrabackup全量備份和恢復
1)備份:
innobackupex --default-file=/PATH/TO/DEFAULT --host=ID ADDR --user=USER_NAME -P PASSWORD /PATH/TO/BACKUP
--default-file:指定備份時,從那個配置文件中讀取配置信息。默認是使用的默認主配置文件,此時可以不寫
--host:指定數據庫服務ip地址。默認為localhost,此時可不寫
--user:指定連接數據庫服務的用戶。默認為root,此時可不寫
-p:指定用戶密碼
/PATH/TO/BACKUP:備份文件存放目錄
注意:
completed OK!字樣,有它才說明備份成功,innobackupex會把備份過程完整輸出到屏幕。
2)備份目錄文件:
在你所指定的備份目錄下可以找到以當前時間命令的備份文件
[root@localhost backup]#ls
2017-11-18_19-39-17
[root@localhost backup]#ll 2017-11-18_19-39-17/
total 18460
-rw-r----- 1 root root 417 Nov 18 19:39 backup-my.cnf
-rw-r----- 1 root root 18874368 Nov 18 19:39 ibdata1
drwxr-x--- 2 root root 4096 Nov 18 19:39 mysql/
drwxr-x--- 2 root root 4096 Nov 18 19:39 performance_schema/
drwxr-x--- 2 root root 78 Nov 18 19:39 Syslog/
-rw-r----- 1 root root 19 Nov 18 19:39 xtrabackup_binlog_info
-rw-r----- 1 root root 113 Nov 18 19:39 xtrabackup_checkpoints
-rw-r----- 1 root root 448 Nov 18 19:39 xtrabackup_info
-rw-r----- 1 root root 2560 Nov 18 19:39 xtrabackup_logfile
文件介紹:
backup-my.cnf:
此文件中包含my.cnf中的設置信息,只包含了備份時需要的信息。
ibdata1:
這是個innodb的共享表空間文件
xtrabackup_binlog_info:
此文件記錄了備份開始時二進制日志文件的位置(position)
xtrabackup_checkpoints:
此文件記錄此次備份屬於那種類型的備份等信息
xtrabackup_info:
此文件記錄了備份的概要信息
xtrabackup_logfile:
此文件記錄了備份過程中的日志,在對數據進行prepare時需要通過日志將數據還原成一致的可用備份數據
3)查看備份情況:
cat /backup/2017-11-18_19-39-17/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1947282
last_lsn = 1947282
compact = 0
recover_binlog_info = 0
4)恢復:
在需要還原的服務器上安裝xtrabackup。
把備份的整個目錄拷貝到需要還原的服務器上。
兩個服務器上的mysql版本需要相同(不相同的沒試過)
1》prepare:
innobackupex --apply-log /PATH/TO/BACKUP/dir-quan
--apply-log:將目錄中的日志應用到備份數據中
--use-memory=N:默認為100M,若備份數據量大且有足夠的空閑內存時,可以用來指定大小的內存來工作,單位可以使用G,M....。
注意:
completed OK!字樣
2》開始恢復:
確保服務停止
systemctl stop mariadb
數據目錄必須為空目錄
rm -rf /PATH/TO/DATADIR/*
數據目錄一般為/var/lib/mysql/
恢復
innobackupex --datadir=/PATH/TO/DATADIR/ --copy-back /PATH/TO/BACKUP/dir-quan
修改權限
chown -R mysql: /PATH/TO/DATADIR/
啟動服務
systemctl start mariadb
注意:
實際還原時,最好將對應的配置文件也都還原,也就是把原服務器上的配置拷貝下,確保配置還是原來的。
上述恢復並沒有進行時間點的還原,實際工作中,需要進行。
2.xtrabackup增(差)量備份及恢復
全量備份是差量備份與增量備份的基礎。
差量備份只能針對上一次全量備份。
增量備份可以針對上一次任務一種備份。
通俗地來說:所有增量備份加到一起就是差量備份了。
增量和差量備份都是針對innodb表來說的,對myisam表來說即使執行了增量備份,其實也是全量備份。
注意:以下常說成增量,大家注意增量和差量間的區別就行。
1)增(差)量備份:
innobackupex -pPASSWORD --incremental /PATH/TO/BACKUP --incremental-basedir=/PATH/TO/BACKUP/last-backup-file
--incremental /PATH/TO/BACKUP:表示本次備份是一個增量備份(若針對的上次備份為一個全量備份,這里也可以認為是個差量備份)
--incremental-basedir=/PATH/TO/BACKUP/last-backup-file:指定本次增量備份針對的是那個備份(可以是上個增量,也可以是上個全量)
2)查看備份情況:
cat /backup/2017-11-20_03-43-15/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1947282
to_lsn = 2073366
last_lsn = 2073366
compact = 0
recover_binlog_info = 0
cat /backup/2017-11-20_03-51-32/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2073366
to_lsn = 2084330
last_lsn = 2084330
compact = 0
recover_binlog_info = 0
3)恢復:
在需要還原的服務器上安裝xtrabackup。
把備份的整個目錄拷貝到需要還原的服務器上。
兩個服務器上的mysql版本需要相同。
1》prepare:
對全量備份做准備工作
innobackupex --apply-log --redo-only /PATH/TO/BACKUP/dir-quan
--redo-only:表示進行准備(應用日志)工作時,只進行redo操作,只會重做已提交但未應用的事務,不會回滾未提交的事務。原因是后面還有個增量備份,未提交的可能在后面增量備份時進行提交。
對增(差)量備份做准備工作
innobackupex --apply-log [--redo-only] /PATH/TO/BACKUP/dir-quan --incremental-dir= /PATH/TO/BACKUP/dir-zeng
--redo-only:若只有一個增量備份或是最后那個增量備份文件,那么不需要這個選項,原因同上。也就是說這個選項不能用於最后一個增量備份進行prepare。
--incremental-dir=:此選項對應的目錄為增量備份文件的目錄
查看prepare情況
若不是對最后一個增量備份進行prepare,那么查看全量備份文件中的xtrabackup_checkpoints,可看到log-applied,LSN有所變化,可以和增量備份對比下。
cat /backup/2017-11-18_19-39-17/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 2073366
last_lsn = 2073366
compact = 0
recover_binlog_info = 0
若是以及對最后一個增量備份進行了prepare,那么查看全量備份文件中的xtrabackup_checkpoints,可看到full-prepared,LSN有所變化
cat /backup/2017-11-18_19-39-17/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 2084330
last_lsn = 2084330
compact = 0
recover_binlog_info = 0
注意:
prepared中可以使用--user-memory=選項來加快速度,前提是你有空閑的內存可用。
--redo-only這個選項需要多加注意,它不能用於最后那個增量備份的prepared,且必須用於其他增量備份的prepared。原因是后面還有增量備份的,未提交的可能在后面增量備份時進行提交。
2》開始恢復:
確保服務停止
systemctl stop mariadb
數據目錄必須為空目錄
rm -rf /PATH/TO/DATADIR/*
數據目錄一般為/var/lib/mysql/
恢復
innobackupex --datadir=/PATH/TO/DATADIR/ --copy-back /PATH/TO/BACKUP/dir-quan
修改權限
chown -R mysql: /PATH/TO/DATADIR/
啟動服務並查看是否恢復
systemctl start mariadb
注意:
實際還原時,最好將對應的配置文件也都還原,也就是把原服務器上的配置拷貝下,確保配置還是原來的。
上述恢復並沒有進行時間點的還原,實際工作中,需要進行。
3.binlog備份和恢復
上述都沒有說有關時間點的恢復,這個時間點恢復是指當你全量備份或增量備份后,下次備份還沒開始,數據庫發生故障后的備份和恢復。
這個時間點恢復的備份和恢復是通過binlog實現的。
備份
mysqlbinlog -j 245 binlog-log.xxxxxxx > /PATH/TO/BINLOG.sql
恢復
登錄數據庫的恢復
mysql > soure /PATH/TO/BINLOG.sql
or
mysql -uroot -p < /PATH/TO/BINLOG.sql