1.1 備份的緣由
衡量備份恢復有兩個重要的指標:
恢復點目標(RPO)和恢復時間目標(RTO)
,
前者重點關注能恢復到什麼程度,然後者則重點關注恢復須要多長時間。
1.1.1 備份的目錄
作災難恢復:對損壞的數據進行恢復和還原
需求改變:因需求改變而須要把數據還原到改變之前
測試:測試新功能是否可用
1.1.2 備份中須要考慮的問題
能夠容忍丟失多長時間的數據;
恢復數據要在多長時間內完;
恢復的時候是否須要持續提供服務;
恢復的對象,是整個庫,多個表,仍是單個庫,單個表。
1.1.3 備份的類型
熱備份:
這些動態備份在讀取或修改數據的過程當中進行,不多中斷或者不中斷傳輸或處理數據的功能。
使用熱備份時,系統仍可供讀取和修改數據的操做訪問,
所謂熱備份是在不影響MySQL對外服務的狀況下,進行備份。。
冷備份:
備份期間用戶不能訪問數據時進行,所以沒法
讀取或修改數據
。。
溫備份:
備份期間可讀取數據,可是,其不足之處在於沒法在進行備份時修改
,這可能使這種類型的備份不適用於某些應用程序。在備份過程當中沒法修改數據可能產生性能問題。
1.2 備份的方式
1.2.1 經常使用的備份方式
物理備份
(數據文件的二進制副本)
全量備份概念
全量數據就是數據庫中全部的數據
(或某一個庫的所有數據);
全量備份就是把數據庫中全部的數據進行備份。
mysqldump會取得一個時刻的一致性數據.
增量備份(刷新二進制日誌)
增量數據就是指上一次全量備份數據以後到下一次全備以前數據庫所更新的數據
對於mysqldump,binlog就是增量數據.
徹底備份:
優勢:可以基於上一次的徹底備份快速恢復數據,恢復窗口小。
缺點:所佔用的存儲空間大,每次備份耗時長,備份窗口大。
累積增量式備份:--差別備份
優勢:相對徹底備份來講每次備份能夠節約一個徹底備份的存儲空間,備份窗口較小,恢復窗口較小。
缺點:恢復時必須依賴上一次徹底備份和本次的累積增量式備份才能完整恢復數據,恢復時間較差別增量式備份較短。
差別增量式備份:----增量備份
優勢:可以最大限度地節省存儲空間,備份窗口小。
缺點:數據恢復時必須依賴上一次徹底備份和每一次的差別增量式備份才能對數據進行完整恢復,恢復時數據重構較慢,恢復時間較長。
1.2.2 備份工具的介紹
一、mysqldump: mysql原生自帶很好用的邏輯備份工具
二、mysqlbinlog: 實現binlog備份的原生態命令
三、xtrabackup: precona公司開發的性能很高的物理備份工具
1.3 mysqldump備份介紹
1.3.1 經常使用的備份參數
參數
|
參數說明
|
-A
|
備份全庫,有建庫建表語句
|
-B
|
備某一個數據庫下的全部表,會有建庫語句
[root@db01 ~]# mysqldump -uroot -p123 -B db1 > /backup/db1.sql
|
-R, --routines
|
備份存儲過程和函數數據
|
--triggers
|
備份觸發器數據
|
--master-data={1|2}
|
告訴你備份後時刻的
binlog
位置
若是等於
1
,則將其打印爲
CHANGE MASTER
命令
;
若是等於
2
,那麼該命令將以註釋符號爲前綴。0沒有CHANGE MASTER參數
|
--single-transaction
|
對
innodb
引擎進行熱備,也就是
快照備份
|
-F, --flush-logs
|
flush logs在備份時自動刷新binlog且每一個庫會生成新一個binlog文件(不怎麼經常使用)
|
-x, --lock-all-tables
|
鎖定全部數據庫的全部表。這是經過在整個轉儲期間採用全局讀鎖來實現的。
|
-l, --lock-tables
|
鎖定全部表以供讀取
|
-d
|
僅表結構
|
-t
|
僅數據
|
--compact
|
減小無用數據輸出
(
調試
)
|
-E 在備份時,同時備份EVENT,若是沒有會自動忽略
一個完整的備份語句:
innodb
引擎的備份命令以下:
mysqldump -uroot -p -A -R --triggers --master-data=
2
--single-transaction |
gzip
>/opt/all_$(
date
+%F).sql.gz
適合多引擎混合(例如:
myisam
與
innodb
混合)的備份命令以下:
在關於GTID模式的備份:
在主從架構的數據庫,一般相關導入操做只須要在master(主庫)端進行便可,在mysqldump不加此參數時sql文件中會出現以下兩名,
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
禁掉了session級別的sql_log_bin,因此在目標端導入sql時,並不會產生對應的bin log日誌,
因此該表及其數據就不會被同步到slave端,構建主從gtid時不要加此參數。
mysqldump -uroot -p -R -e --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF world country >/tmp/countryyes.sql
|
1.3.2 -A 參數
備份全庫,備份語句
mysqldump
-
uroot
-
p123
-
A
>
/
backup
/
full
.sql
1.3.3 -B 參數
備某一個數據庫下的全部表,且存在建庫語句
增長建庫(create)及「use庫」的語句,能夠直接接多個庫名,
同時備份多個庫* -B 庫1 庫2
mysqldump
-
uroot
-
p123
-
B world
>
/
backup
/
worldb.sql
不加-B備份數據庫時,只是備份數據庫下的全部表,不會建立數據庫
只能
備份單獨的數據庫
(通常用於備份單表時使用)
mysqldump
-
uroot
-
p123 world
>
/
backup
/
world.sql
備份單表
mysqldump
-
uroot
-
p123 world city
>
/
backup
/
world_city.sql
對於單表備份的粒度,再恢復數據庫數據時速度最快。
備份多個表
mysqldump 庫1 表1 表2 表3
>
庫1.sql mysqldump 庫2 表1 表2 表3
>
庫2.sql
1.3.4 --master-data={1|2}參數
告訴你備份後時刻的binlog位置
2爲註釋 1爲非註釋
,要執行的(主從複製) 此命令會鎖表,須要配合
--single-transaction快照使用
[root@db02 logs]
# sed
-
n
'22p'
/
opt
/
t.sql CHANGE MASTER
TO
MASTER_LOG_FILE
=
'clsn-bin.000005'
, MASTER_LOG_POS
=
344
;
[root@db02 logs]
# mysqldump
-
B
--master-data=2 clsn >/opt/t.sql
1.3.5 壓縮備份
壓縮備份命令:
mysqldump
-
B
--master-data=2 clsn|gzip >/opt/t.sql.gz
解壓:
zcat t.sql.gz
>
t1.sql
gzip
-
d t.sql.gz #刪壓縮包 gunzip alL_2017
-
12
-
22
.sql.gz
zcat t.sql.gz >/tmp/linshi.sql