一.備份與導出的區別
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,重啟數據庫