mysql Xtrabackup 在線物理備份及恢復

Xtrabackup是由percona開發的一個開源軟件,是使用perl語言完成的腳本工具,可以很是快速地備份與恢復mysql數據庫,且支持在線熱備份,備份時不影響數據讀寫
在備份的時候,備份工具主要執行兩個任務來完成備份:
① 在後臺啓動一個日誌拷貝線程。這個線程會監視InnoDB日誌文件,當日志文件發生改變時,這個線程會將發生變化的數據塊拷貝到備份目錄下一個名爲xtrabackup_logfile的文件中。這個操做是必要的,由於備份可能會持續很長時間,在數據庫恢復時,須要全部從備份開始到結束的這些日誌文件。
② 拷貝InnoDB數據文件到指定備份目錄下。這不是一個簡單的拷貝,備份工具打開並讀取文件的方式相似InnoDB,經過讀取文件目錄並以頁(page)爲單位進行拷貝。
當數據文件拷貝結束時,xtrabackup會中止日誌拷貝線程,並在指定備份目錄中建立一個名爲xtrabackup_checkpoints的文件,這個文件包含備份的類型、開始備份的日誌序列號和結束備份的日誌序列號。
 
解壓安裝過程省略。。。
 
innobackupex經常使用參數
--compress:該選項表示壓縮innodb數據文件的備份。
--compact: 建立一個不包含第二索引(除了主鍵以外的索引)的備份 --defaults-file=[MY.CNF] 配置文件的路徑 --use-memory=# 這個參數用於在準備備份時,xtrabackup執行crash recovery所使用的內存大小。這個參數僅和--apply-log搭配時才生效。 --include:該選項表示使用正則表達式匹配表的名字[db.tb],要求爲其指定匹配要備份的表的完整名稱,即databasename.tablename。 --user:該選項表示備份帳號。 --password:該選項表示備份的密碼。 --port:該選項表示備份數據庫的端口。 --host:該選項表示備份數據庫的地址。 --databases:該選項接受的參數爲數據名,若是要指定多個數據庫,彼此間須要以空格隔開;如:"xtra_test dba_test",同時,在指定某數據庫時,也能夠只指定其中的某張表。如:"mydatabase.mytable"。該選項對innodb引擎表無效,仍是會備份全部innodb表。此外,此選項也能夠接受一個文件爲參數,文件中每一行爲一個要備份的對象。 --tables-file:該選項表示指定含有表列表的文件,格式爲database.table,該選項直接傳給--tables-file。 --socket:該選項表示mysql.sock所在位置,以便備份進程登陸mysql。 --slave-info:該選項表示對slave進行備份的時候使用,打印出master的名字和binlog pos,一樣將這些信息以change master的命令寫入xtrabackup_slave_info文件。能夠經過基於這份備份啓動一個從庫。 --safe-slave-backup:該選項表示爲保證一致性複製狀態,這個選項中止SQL線程而且等到show status中的slave_open_temp_tables爲0的時候開始備份,若是沒有打開臨時表,bakcup會馬上開始,不然SQL線程啓動或者關閉知道沒有打開的臨時表。若是slave_open_temp_tables在--safe-slave-backup-timeount(默認300秒)秒以後不爲0,從庫sql線程會在備份完成的時候重啓。 --rsync:該選項表示經過rsync工具優化本地傳輸,當指定這個選項,innobackupex使用rsync拷貝非Innodb文件而替換cp,當有不少DB和表的時候會快不少,不能--stream一塊兒使用。 --history:該選項表示percona server 的備份歷史記錄在percona_schema.xtrabackup_history表。 --redo-only 當準備數據庫的全備或合併增量備份時,須要指定這個參數。這個參數實際上執行的是xtrabackup --apply-log-only,會讓xtrabackup跳過回滾節點,只作「redo」步驟。當數據庫須要應用增量備份時,須要指定這個參數。 --no-timestamp 這個參數會讓xtrabackup在備份的時候不建立帶有時間格式的子文件夾。當指定了這個參數,備份會直接建立在指定的備份目錄下。 --stream=STREAMNAME 指定流備份的格式。備份將會以指定格式輸出到STDOUT。目前支持的格式有tar 和 xbstream。若是指定了這個參數,後面須要接tmpdir目錄做爲處理流的一箇中間目錄。 --incremental 建立增量備份,當指定這個參數的時候,應該指定--incremental-lsn或--incremental-basedir參數,不然將會備份到--incremental-basedir路徑 --incremental-basedir 以上一次全量或增量備份的路徑,做爲增量備份的基礎。指定這個參數的同時,應該一樣指定--incremental參數 --incremental-dir:該選項表示增量備份的目錄。 --incremental-force-scan:該選項表示建立一份增量備份時,強制掃描全部增量備份中的數據頁。 --incremental-lsn:該選項表示指定增量備份的LSN,與--incremental選項一塊兒使用。 --incremental-history-name:該選項表示存儲在PERCONA_SCHEMA.xtrabackup_history基於增量備份的歷史記錄的名字。Percona Xtrabackup搜索歷史表查找最近(innodb_to_lsn)成功備份而且將to_lsn值做爲增量備份啓動出事lsn.與innobackupex--incremental-history-uuid互斥。若是沒有檢測到有效的lsn,xtrabackup會返回error。 --incremental-history-uuid:該選項表示存儲在percona_schema.xtrabackup_history基於增量備份的特定歷史記錄的UUID。 --close-files:該選項表示關閉再也不訪問的文件句柄,當xtrabackup打開表空間一般並不關閉文件句柄目的是正確的處理DDL操做。若是表空間數量巨大,這是一種能夠關閉再也不訪問的文件句柄的方法。使用該選項有風險,會有產生不一致備份的可能。

全備及本地或者異地恢復過程mysql

備份正則表達式

innobackupex --defaults-file=/data/mysql_data/3307/my_3307.cnf /data/backups/ --user=root -H127.0.0.1 -P3307 --password=***
--defaults-file:mysql配置文件。不指定默認爲 /etc/my.cnf
/data/backups/ 備份文件要寫入的目錄,會建立一個以時間格式爲名的目錄2019-02-13_15-19-58

恢復sql

1、本地恢復的話 要先關閉數據庫,而且刪除數據文件,確保數據目錄爲空
innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=4G --apply-log /data/backups/2019-02-13_15-19-58
--apply-log的做用是經過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態 二、innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --copy-back /data/backups/2019-02-13_15-19-58 --copy-back,即把備份文件拷貝至原數據目錄下。 3、修改數據目錄權限 chown mysql.mysql /data/mysql_data/3307/data -R
相關備份binlog點都存在下圖中,用做主從同步及記錄,數據庫啓動後根據文件中的點從作主備的相關參數便可
 以上流程也適合異地恢復及作主從同步,把備份目錄scp到遠程服務器目錄,再執行第二三步便可
 
 增備及本地或者異地恢復過程

備份及恢復數據庫

 
  
注意:innobackupex 增量備份僅針對InnoDB這類支持事務的引擎,對於MyISAM等引擎,則仍然是全備。
 
  
一、增量備份:增量備份須要基於全備
 
  
innobackupex --defaults-file=/data/mysql_data/3307/my_3307.cnf --user=root -H127.0.0.1 -P3307 --password=*** --incremental /data/backups --incremental-basedir=/data/backups/2019-02-13_15-19-58
--incremental-basedir     指向全量備份目錄
--incremental             指向增量備份的目錄
上面語句執行成功以後,會在--incremental執行的目錄下建立一個時間戳子目錄
能夠持續作增量備份
只須要把--incremental-basedir 的目錄指向上一次增量備份的目錄便可
 
  
 
 
  
二、增量備份恢復
innobackupex --apply-log --redo-only --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G  /data/backups/INCREMENTAL-DIR(2019-02-13_15-19-58)
  1. innobackupex --apply-log --redo-only --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G /data/backups/2019-02-13_15-19-58 --incremental-dir=INCREMENTAL-DIR-1  
  2. innobackupex --apply-log --redo-only --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G /data/backups/2019-02-13_15-19-58 --incremental-dir=INCREMENTAL-DIR-2  
  3. 多個備份日後以此類推
 
  
INCREMENTAL-DIR:全備目錄
 
  
INCREMENTAL-DIR-1:增備目錄1
 
  
INCREMENTAL-DIR-2:增備目錄2
 
  
。。。
 
  
此時兩次增量備份其實都合併到全備上了,恢復是隻須要使用全備進行恢復就能夠了
 
  
innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G --apply-log /data/backups/2019-02-13_15-19-58
 
  
innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --copy-back /data/backups/2019-02-13_15-19-58
 
  
三、修改數據目錄權限啓動便可
相關文章
相關標籤/搜索