mysql運維-備份恢復之percona-xtrabackup

mysql的物理備份分兩種:
    冷備:中止服務,拷貝data目錄,而後重啓服務,完成。若是須要恢復,中止服務,刪掉當前在用data,把以前拷貝的data複製過來,再開啓服務,就OK了!由於冷備須要停掉服務才能實施,顧真正生產中基本不用。
    熱備:相對於冷備而言,熱備的意思是在不影響服務的狀況下,作數據的物理備份,經常使用工具XtraBackup。python

安裝篇:mysql

1>下載:
https://www.percona.com/downloads/XtraBackup/LATEST/
二進制安裝包:
percona-xtrabackup-2.2.9-5067-Linux-x86_64.tar.gz    
2>解壓:
>>tar -zxvf  percona-xtrabackup-2.2.9-5067-Linux-x86_64.tar.gz
3>配置環境變量:
>>vim /etc/profile
export PATH=$PATH:/usr/local/percona-xtrabackup-2.2.9-Linux-x86_64/bin  #你本身放的位置sql

!!!以後就能夠直接使用了數據庫

賦權限篇:vim

爲備份開通專用的用戶和權限服務器

mysql>create user beifen@'localhost' identified by '123123';                                #建立用戶
mysql>grant reload,process,lock tables,replication client on *.* to beifen@'localhost';     #賦予權限

建立備份文件存儲目錄
mkdir /beifen

 參數篇:app

xtrabackup包內有許多工具,這裏咱們只提咱們用到的innobackupex!

--apply-log
        應用 BACKUP-DIR 中的 xtrabackup_logfile事務日誌文件。
        通常狀況下,在備份完成後,數據尚且不能用於恢復操做,由於備份的數據中可能會包含還沒有提交的事務或已經提交但還沒有 
        同步至數據文件中的事務。
        所以,此時數據文件仍處於不一致狀態。「準備」的主要做用正是經過回滾未提交的事務及同步已經提交的事務至數據文件使
        得數據文件處於一致性狀態。
    --copy-back
        從備份中複製之前生成的備份中的全部文件目錄到它們原來的位置。
        拷貝先前備份全部文件到它們的原始路徑。但原路徑下不能有任何文件或目錄,
        除非指定 --force-non-empty-directories 選項。
    --move-back
        從備份中移動先前製做的備份中的全部文件目錄到實際的datadir位置。 謹慎使用,由於它刪除備份文件。
    --databases=LIST
        指定備份的數據庫和表,格式爲:--database="db1[.tb1] db2[.tb2]"多個庫之間以空格隔開,
        若是此選項不被指定,將會備份全部的數據庫。
    --defaults-file=[MY.CNF]
        指定MySQL配置文件:只能從給定的文件中讀取默認選項。且必須做爲命令行上的第一個選項;
        必須是一個真實的文件,它不能是一個符號連接。
    --host=HOST
        該選項指定鏈接到數據庫服務器所須要的host,接受字符串參數
    --incremental
        這個選項告訴 xtrabackup 建立一個增量備份,而不是徹底備份。
        它傳遞到 xtrabackup 子進程。當指定這個選項,能夠設置 --incremental-lsn 或 --incremental-basedir。
        若是這2個選項都沒有被指定,--incremental-basedir 傳遞給 xtrabackup 默認值,
        默認值爲:基礎備份目錄的第一個時間戳備份目錄。
    --incremental-basedir=DIRECTORY
        該選項接受一個字符串參數,該參數指定做爲增量備份的基本數據集的完整備份目錄。它與 --incremental 一塊兒使用。
    --incremental-dir=DIRECTORY
        該選項接受一個字符串參數,該參數指定了增量備份將與完整備份相結合的目錄,以便進行新的完整備份。
        它與 --incremental 選項一塊兒使用。
    --parallel=NUMBER-OF-THREADS
        此選項接受一個整數參數,指定xtrabackup子進程應用於同時備份文件的線程數。
        請注意,此選項僅適用於文件級別,也就是說,若是您有多個.ibd文件,則它們將被並行複製; 
        若是您的表一塊兒存儲在一個表空間文件中,它將不起做用。
    --user=NAME
        該選項指定鏈接到數據庫服務器所須要的user,接受字符串參數
    --password=WORD
        該選項指定鏈接到數據庫服務器所須要的password,接受字符串參數
    --port=PORT
        該選項指定鏈接到數據庫服務器所須要的port,接受字符串參數
    --redo-only
        在「準備基本完整備份」 和 「合併全部的增量備份(除了最後一個增備)」時使用此選項。
        它直接傳遞給xtrabackup的 xtrabackup --apply-log-only 選項,
        使xtrabackup跳過"undo"(回滾)階段,只作"redo"(重作)操做。
        若是後面還有增量備份應用到這個全備,這是必要的。
    --rsync
        此選項可優化本地文件(非InnoDB)的傳輸。rsync工具一次性拷貝全部非InnoDB文件,
        而不是爲每一個文件單首創建cp,在備份恢復不少數據庫和表時很是高效。
        此選項不能和 --stream 一塊兒使用。
    --socket=SOCKET
        此選項指定使用UNIX域套接字鏈接到本地數據庫服務器時要使用的套接字。 該選項接受字符串參數。
    --use-memory=B
        此選項接受一個字符串參數,該參數指定xtrabackup在準備備份時用於崩潰恢復的內存量(以字節爲單位)。 
        支持倍數提供單位(例如1MB,1GB)。 它僅與選項--apply-log一塊兒使用。 
        它直接傳遞給xtrabackup的--use-memory選項。

2) xtrabackup 參數選項
--apply-log-only
        這個選項使在準備備份(prepare)時,只執行重作(redo)階段,這對於增量備份很是重要。

使用篇:socket

##徹底備份

innobackupex --defaults-file=/etc/my.cnf --user=beifen --password=123123 --socket=/tmp/mysql.sock /beifen
#能夠看到整個備份過程:鏈接數據庫,開始拷貝redo log,拷貝innodb表文件,鎖表、拷貝非innodb表文件,中止拷貝redo log,解鎖。

##全備恢復
關閉數據庫並刪除數據文件

(1)準備(prepare)一個徹底備份: --apply-log ( /data/pxb/2017-04-24_02-46-11/ 爲備份目錄,執行以後 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )

innobackupex --apply-log /data/pxb/2017-04-24_02-46-11/
(2)執行恢復操做:
innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/2017-04-24_02-46-11/

(3)更改 data/ 目錄權限並啓動mysql:
chown -R mysql.mysql data/
service mysqld start
##增量備份

--完成一次全備

innobackupex --defaults-file=/etc/my.cnf --user=beifen --password=123456 --socket=/.../mysql.sock /beifen

--以全備爲基準,進行增量備份
innobackupex --defaults-file=/etc/my.cnf --user=beifen --password=123456 --socket=/.../mysql.sock --incremental /beifen/inc --incremental-basedir=/beifen/2017-04-24_02-46-11/ --parallel=2

--以最近一次增量備份爲基準
innobackupex --defaults-file=/etc/my.cnf --user=beifen --password=123456 --socket=/.../mysql.sock --incremental /beifen/inc --incremental-basedir=/beifen/inc/2017-04-28_01-09-40/ --parallel=2


恢復(分步驟)

1>準備一個全備
innobackupex --apply-log --redo-only /beifen/2017-04-24_02-46-11/

2>將增量1應用到徹底備份
innobackupex --apply-log --redo-only /beifen/2017-04-24_02-46-11/ --incremental-dir=/beifen/inc/2017-04-28_01-09-40/

3>將增量2應用到徹底備份,注意不加 --redo-only 參數了(最後一次增量備份應用到全備時,不用加--redo-only)
innobackupex --apply-log /beifen/2017-04-24_02-46-11/ --incremental-dir=/beifen/inc/2017-04-28_01-27-46/

4>對以上準備好的備份執行恢復操做
innobackupex --apply-log /beifen/2017-04-24_02-46-11/

備份目下文件說明篇:ide

backup-my.cnf:
            備份命令用到的配置選項信息
ib_buffer_pool:
            buffer pool 中的熱數據,當設置 innodb_buffer_pool_dump_at_shutdown=1 ,在關閉 MySQL 時,會把內存中的熱數據保存在磁盤裏 ib_buffer_pool 文件中,位於數據目錄下。
ibdata1:
            備份的共享表空間文件;
xtrabackup_binlog_info:
            mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置;
xtrabackup_checkpoints:
            備份類型(如徹底或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;
xtrabackup_info:
            記錄備份的基本信息,uuid、備份命令、備份時間、binlog、LSN、以及其餘加密壓縮等信息。
xtrabackup_logfile:
            備份的重作日誌文件。工具

相關文章
相關標籤/搜索