數據備份與恢復


一.備份與導出的區別

1.數據導出用於把數據從一個系統遷移到另一個系統

2.數據備份用於保存一個數據庫實例的全部信息

二.備份方式

1.聯機冷備份
2.聯機熱備份

備份時需要注意auto.cnf文件,如果跨主機應用應該區別auto.cnf

三.整體表碎片文件

 alter table test1 engine = innodb;  

 四.xtrabackup

1.優勢

1.xtrabackup備份過程加讀鎖,數據可以讀,但是不可以寫
2.xtrabackup備份過程不會打斷正在執行的事務
3.xtrabackup能夠基於壓縮等功能節約磁盤空間和流量

2.原理:

xtrabackup是一種物理備份工具,通過協議連接到mysql服務端,然后讀取並復制底層文件,完成物理備份

xtrabackup支持innodb引擎做全量備份和增量備份

xtrabackup只能對myisam引擎做全量備份

3.安裝

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

yum install percona-xtrabackup-24

4.全量熱備份

<1>xtrabackup命令種類

序號 命令 描述
1 xbcrypt 用於加密或者解密備份的數據
2 xbstream 用於壓縮或者解壓縮xbstream文件
3 xtrabackup 備份innodb數據表
4 innobackupex 是上面三種命令的perl腳本封裝

<2>.備份命令

A.全量熱備份命令:

 innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 /backdata

恢復:

關閉數據庫,將數據目錄備份移動到其他目錄 ,然后執行如下操作:
innobackupex --apply-log /backdata/2019-01-18_10-23-56/

   innobackupex --defaults-file=/etc/my.cnf --copy-back /backdata/2019-01-18_10-23-56/

   然后將數據目錄的權限改為mysql,啟動數據庫

B.使用流式壓縮備份

參數如下:
innobackupex ..... --no-timestamp --stream=xbstream -> /backdata2/bak.xbstream

示例:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--no-timestamp --stream=xbstream ->/backdata2/backup.xbstream

恢復:
關閉數據庫,將數據目錄移到其他目錄,執行如下操作:
mkdir /justbak
xbstream -x < /backdata2/backup.xbstream -C /justbak

  innobackupex --apply-log /justbak/
  innobackupex --defaults-file=/etc/my.cnf --copy-back /justbak

  將數據目錄的權限改為mysql,然后啟動mysql

C.使用加密備份

序號 參數 描述
1 encrypt 用於加密的算法:AES128,AES192,AES256
2 encrypt-threads 執行加密的線程數
3 encrypt-chunk-size 加密線程的緩存大小
4 encrypt-key 密鑰字符
5 encryption-key-file 密鑰文件
命令參數如下:
innobackupex --encrypt=AES256 --encrypt-threads=10 --encrypt-key=....... --encrypt-chunk-size 521 .....

示例:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512
--no-timestamp --stream=xbstream -> /backdata3/backup1.xbstream

恢復:
關閉數據庫,將數據目錄移到其他目錄,執行如下操作:

 mkdir /justbak
 xbstream -x < /backdata3/backup1.xbstream -C /justbak
 innobackupex --decompress --decrypt=AES256 --encrypt-key=111111111111111111111111 /justbak

 innobackupex --apply-log /justbak/
 innobackupex --defaults-file=/etc/my.cnf --copy-back /justbak

將數據目錄的權限改為mysql,啟動mysql

D.其他參數

序號 參數 描述
1 compress 壓縮innodb數據文件
2 compress-threads 執行壓縮的線程數
3 compress-chunk-size 壓縮線程的緩存
4 include 需要備份的數據表的正則表達式
5 galera-info 備份pxc節點狀態文件
命令參數如下:
 innobackupex .... --compress --compress-threads=10 --include=test1.t1,test1.t2 --galera-info ....

示例:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 
--encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512 
--compress --compress-threads=10 --include=test1.t1,test.t1 --galera-info
--no-timestamp --stream=xbstream ->/backdata4/b.xbstream

 

E.通過腳本自動備份

#!/bin/bash
time=$(date "+%Y-%m-%d %H:%M:%S")
echo "執行全量熱備份"
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 --encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512 --no-timestamp --stream=xbstream -> /backdata5/backup1.xbstream

 

<3>.恢復命令

恢復前准備工作

1.關閉mysql,清空數據目錄,包括表分區的目錄
2.回滾沒有提交的事務,同步已經提交的事務到數據文件

 5.增量備份

1.無論全量熱備份使用了流式壓縮,還是內容加密,都必須解密解壓縮成普通全量熱備份

2.增量熱備份可以使用流式壓縮或者內容加密

例子:

首先備份

1.首先全備
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 /backdata

2.首次增備
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--incremental-basedir=/backdata/2019-01-21_11-36-02/ --incremental /inc

3.第二次增備
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456
--incremental-basedir=/inc/2019-01-21_11-42-32/ --incremental /inc/

然后恢復:

處理事務日志
1.innobackupex --apply-log --redo-only /backdata/2019-01-21_11-36-02/

2.innobackupex --apply-log --redo-only /backdata/2019-01-21_11-36-02/ --incremental-dir=/inc/2019-01-21_11-42-32/

3.innobackupex --apply-log /backdata/2019-01-21_11-36-02/ --incremental-dir=/inc/2019-01-21_11-46-18/

4.關閉數據庫,並移動數據目錄到其他目錄

5.還原
innobackupex --defaults-file=/etc/my.cnf --copy-back /backdata/2019-01-21_11-36-02

6.將數據目錄文件權限改為mysql,重啟數據庫

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM