為什么要備份
災難恢復:硬件故障、軟件故障、自然災害、黑客攻擊、誤操作測試等數據丟失場景
備份注意要點
能容忍最多丟失多少數據
恢復數據需要在多長時間內完成
需要恢復哪些數據
還原要點
做還原測試,用於測試備份的可用性
還原演練
還原演練
備份和恢復
備份類型
完全備份,部分備份
部分備份:只備份數據子集,如部分庫或表
完全備份、增量備份、差異備份
增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據,備份較快,還原復雜
增量備份示意圖
還原邏輯
、
測試
差異備份:僅備份最近一次完全備份以來變化的數據,
還原次序,還原第一次周日的完全備份,在還原最后一次備份,出故障時間點到最后一次備份期間用二進制恢復
備份較慢,還原簡單注意:二進制日志文件不應該與數據文件放在同一磁盤
備份和恢復
冷、溫、熱備份
冷備:讀寫操作均不可進行
冷備演練
1.停服務
1.systemctl stop mariadb
2.tar -Jcvf all.bak /var/lib/mysql/
3.備份二進制日志
tar -Jcvf binlog.bak /data/czq/
4. 遷移到另外一台機器
scp -r ./backup/ 192.168.111.23:/data/
安裝數據庫
還原二進制文件
溫備:讀操作可執行;但寫操作不可執行,mysqldump 備份還原演練
演練場景描述:每天下午2點做全量備份,某天18點數據庫故障,從2點-18點有數據變化,
實驗前提:二進制日志啟用,並且二進制文件單獨存放
初始化數據庫工作
1 假設下午兩點全量備份
mysqldump -A --master-data=2 > /data/all.sql
說明:master-data 記錄備份時間點二進制位置7925
數據庫修改 備份后對hellodb數據庫操作
insert students (name,age)values('a',20);
insert students (name,age)values('b',30);
模擬故障
假設到了18點,數據庫故障
2 刪除庫 rm -rf /var/lib/mysql/*
3 還原演練
確保無用戶訪問數據庫
1)systemctl restart mariadb
2)mysql > show master logs; 查看當前二進制位置
3)根據/data/all.sql中日志位置和2)定位需要的二進制日志范圍
mysqlbinlog --start-position=7925 mysql-bin.000003 > /data/inc.sql
注意:要不走想對路徑,要不走絕對路徑 ,要不找不到
mysqlbinlog mysql.000004 >> /data/inc.sql
mysqlbinlog mysql.000005 >> /data/inc.sql
-
還原一定要把二進制關閉,要不在還原的時候還會繼續生成二進制日志
mysql > set sql_log_bin=off;
mysql>source /data/all.sql
mysql>source /data/inc.sql -
mysql > set sql_log_bin=on;
-
做檢查確認數據庫恢復成功,恢復用戶訪問
測試:
我們看到 我們插入的數據已經環境,到此物理損壞演練完畢
演練*實驗:恢復誤刪除的表
場景描述每天下午兩點做數據庫全量備份,但是下班18點誤操作把學生表刪除了
還原邏輯,去二進制掉刪除表的命令
演練步驟:
1.全量備份
insert students (name,age)values('c',40);
insert students (name,age)values('d',50);
=等到18點========
刪表
=刪除后其它用戶操作其它表=============================================================================
恢復演練
1.不讓用戶訪問
2.
1.
1.還原到18:10的二進制日志
mysqlbinlog --start-position=1590073 mysql-bin.000006 > /data/incdate +%F
.sql
打開二進制的sql刪除學生表的刪除
注釋或着刪除
初始化數據庫
4) 還原一定要把二進制關閉,要不在還原的時候還會繼續生成二進制日志
mysql > set sql_log_bin=off;
mysql>source /data/all_2020-10-24.sql
mysql>source /data/inc2020-10-24.sql
- mysql > set sql_log_bin=on;
測試,我們看到已經還原成功,到此演練結束
分庫備份腳本演練,
場景應用:上邊的演練主要是對整個數據庫進行備份,有時候在企業中要對單獨的數據庫進行備份,所以我們可以編寫分庫備份腳本
([root@centos7 ~]#for db in mysql -e 'show databases'|grep -Ev '^(information_schema|performance_schema|Database)$'
;do mysqldump -B $db --single-transaction --master-data=2 |gzip > /data/czq/$db.sql.gz ;done)
或者腳本改成這樣,先查詢出所有數據庫作為標准輸出,然后用sed替換,傳給bash執行
[root@centos7 ~]#mysql -e 'show databases'|grep -Ev '^(information_schema|performance_schema|Database)$'|sed -rn 's@(.*)@mysqldump -B \1 --single-transaction --master-data=2 |gzip > /data/\1.sql.gz@p'|bash
熱備實驗:xtrabackup 備份還原
熱備:讀寫操作均可執行
MyISAM:溫備,不支持熱備
InnoDB:都支持
xtrabackup 基本概念原理
架構圖是兩條線,一個是腳本,一個是exe文件,配合執行,2.4版本二條線合並成一條線
1.安裝
備份過程大概分三步,以下下是原理圖
1.備份
2.數據整合
3.還原
新版xtrabackup完全,增量備份及還原演練
1.備份演練 主機:192.168.111.129
mkdir /backup/
xtrabackup --backup --target-dir=/backup/
2.恢復演練:目標主機:192.168.111.156 恢復
目標主機裝備份軟件,裝數據庫服務,啟動
1)初始化
2)預准備:確保數據一致,提交完成的事務,回滾未完成的事務
1)xtrabackup --prepare --target-dir=/backup/
2)復制到數據庫目錄
注意:數據庫目錄必須為空,MySQL服務不能啟動
xtrabackup --copy-back --target-dir=/backup/
到此還原成功
熱備實驗:xtrabackup 增量備份以及還原
備份服務器
1.全量備份
xtrabackup --backup --target-dir=/backup/base
2.模擬數據更新
insert students (name,age)values('e',60);
insert students (name,age)values('f',70);
3,第一次增量備份是基於全量備份的
xtrabackup --backup --target-dir=/backup/inc1 --incrementalbasedir=/backup/base
該數據繼續增量
xtrabackup --backup --target-dir=/backup/inc2 --incrementalbasedir=/backup/inc1
4.拷貝到遠程主機
還原
1,預處理
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
變大了