linux之mysql備份和恢復


為什么要備份

災難恢復:硬件故障、軟件故障、自然災害、黑客攻擊、誤操作測試等數據丟失場景

備份注意要點

能容忍最多丟失多少數據
恢復數據需要在多長時間內完成
需要恢復哪些數據

還原要點

做還原測試,用於測試備份的可用性
還原演練
還原演練

備份和恢復

備份類型
完全備份,部分備份
部分備份:只備份數據子集,如部分庫或表
完全備份、增量備份、差異備份
增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據,備份較快,還原復雜
增量備份示意圖

還原邏輯

測試

差異備份:僅備份最近一次完全備份以來變化的數據,


還原次序,還原第一次周日的完全備份,在還原最后一次備份,出故障時間點到最后一次備份期間用二進制恢復


備份較慢,還原簡單注意:二進制日志文件不應該與數據文件放在同一磁盤
備份和恢復
冷、溫、熱備份
冷備:讀寫操作均不可進行

冷備演練


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

  1. 還原一定要把二進制關閉,要不在還原的時候還會繼續生成二進制日志
    mysql > set sql_log_bin=off;
    mysql>source /data/all.sql
    mysql>source /data/inc.sql

  2. mysql > set sql_log_bin=on;

  3. 做檢查確認數據庫恢復成功,恢復用戶訪問
    測試:


    我們看到 我們插入的數據已經環境,到此物理損壞演練完畢

演練*實驗:恢復誤刪除的表

場景描述每天下午兩點做數據庫全量備份,但是下班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

  1. 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
變大了


免責聲明!

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



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