Linux環境下實現MariaDB數據庫的三種備份和還原

1、tar工具的使用mysql

 一、備份sql

(1)中止服務,3306端口關閉
數據庫

image.png

(2)看下配置文件有沒有關鍵日誌存放於其它目錄的,檢查/etc/my.cnf,再檢查下/etc/my.cnf.d/下有沒有配置文件放置其餘地方,有的話也須要一塊兒拷貝歸檔安全

image.png

(3)創建備份目錄,歸檔服務器

image.png

(4)開啓服務,備份完成less

二、還原ide

(1)這裏有個不當心輸入刪重要mysql庫的命令,開始還原工具

image.png

(2)關閉服務,systemctl stop mariadb性能

(3)必定要注意配置文件和備份前的配置是否同樣,拷貝剛纔歸檔文件並解壓至庫裏ui

image.png

(4)解壓後文件注意權限,務必確保mysql.mysql權限

image.png

(4)開啓服務,systemctl start mariadb

(5)進入數據庫,查看數據庫,mysql又回來了

image.png


2、LVM邏輯卷快照實現幾乎熱備(實質仍是冷備):將數據庫內容在很短期用邏輯卷快照備份下,以後先將數據庫推上線,再處理快照中的內容,結合二進制日誌還原

一、備份

(1)新加硬盤並創建邏輯卷分區

開機添加硬盤掃描下,echo '- - -' > /sys/class/scsi_host/host0/scan,記得有每一個host都須要掃描下image.png

分區,分區時候記得更改硬盤分區文件系統,代碼8e,Linux LVM

pvcreate /dev/sdb1

vgcreate vgdb /dev/sdb1

lvcreate -n lvdb -L +6G /dev/vgdb ----->創建邏輯卷用來放置數據庫數據

lvcreate -n lvdb -L +4G /dev/vgbin ----->創建邏輯卷用來單獨放置二進制日誌

mkfs.xfg /dev/vgdb/lvdb

mkfs.xfg /dev/vgdb/lvbin

mkdir -pv /data/{mysql,binlog}

mount /dev/vgdb/lvdb /data/mysql

mount /dev/vgdb/lvbin /data/binlog

image.png

(3)數據遷移,須要更改配置文件,開啓二進制日誌功能,確保權限正確

image.png

注:若是重啓服務後提示錯誤沒法遷移,將原數據庫內mysql庫複製到新庫中重啓便可

image.png

附:清除二進制日誌指令:reset master

(4)基於快照備份

lvcreate -p -r -s -n snap_dbbak -L 2G /dev/vgdb/lvdb,設置了只讀屬性

image.png

(5)對數據作出修改,產生二進制日誌變更

create database chenux

use chenux

create table info (name char(10),age tinyint,job varchar(20))

alter table info add id tinyint primary key first

insert into info values (1,'chenux',24,'driver')

相比以前已經做出不少修改

image.png

POS點變化,說明從328日後的數據點都是在變化

image.png

(6)作完邏輯卷快照後,對數據的更改會影響服務器性能能,也就是說舊的內容會添加到邏輯卷快照中,所以咱們須要把快照裏的數據導出來,對邏輯卷快照掛載

直接掛載mount /dev/vgdb/snap_dbbak /mnt會報錯,由於快照snap_dbbak的邏輯卷uuid和lvdb邏輯卷uuid同樣,因此掛載輸入指令mount -o nouuid,norecovery /dev/vgdb/snap_dbbak  /mnt

image.png

(7)爲確保數據安全性,能夠掛載完成後將掛載目錄裏的數據存放至其它設備中,由於實驗環境,依舊在本機上操做

image.png

cp -a /mnt/* /backups,此處用cp -a,保留權限,此時至關於備份完成

(8)備份完成後,刪除快照

lvremove /dev/vgdb/snap_dbbak

(9)模擬損壞,刪庫,以後跑路,不過被抓了回來須要負責到底

(10)還原開始,中止服務,拷貝原數據庫內容到數據庫存放目錄,再開放數據庫

systemctl stop mariadb;cp -av /backups/* mysql/

image.png

(11)此時發現只有邏輯卷快照時的備份,後面的增刪改沒有了,因此這裏須要引入二進制日誌。在利用二進制還原時候,要避免其餘用戶鏈接數據庫產生數據變動,此處須要使用防火牆或者其它策略確保數據庫只有本身一我的操做

引用以前的圖片,此時利用二進制日誌工具能夠還原

image.png

mysqlbinlog --start-position=328 mysql-bin.000001,能夠查看到內容

image.png

往下翻

image.png

mysqlbinlog --start-position=328 mysql-bin.000001 > bl.sql

mysqlbinlog mysql-bin.000002 >> bl.sql

image.png

導入後再打開二進制日誌功能,發現數據回來了

image.png

(12)還原後記得以前設置的防火牆或者其它拒絕訪問策略再取消掉,完成

注意:若是刪庫用的是drop,不像實驗中rm指令刪除的,mybinlog BINLOG > *.sql,編輯該sql文件,將drop命令那行註釋掉,再mysql < *.sql


三、mysqldump的備份和誤刪除操做後的還原

(1)準備環境,條件容許狀況下,將二進制日誌文件和數據庫存放目錄放到不一樣的磁盤中,並且二進制日誌文件最好單獨放在一個分區中

image.png

(2)加個數據庫做爲準備環境

image.png

作點修改,二進制日誌產生變化

image.png

(3)開始備份

mysqldump -A -F --single-transacation --master-data=2 | gzip > /backupsq/db.sql.gz

image.png

(4)備份完,繼續修改點小數據,再刪個表以後繼續作點修改,此時模仿環境中數據庫時時刻刻都有增刪改操做,不能說是由於刪了某個表就中止了其餘增刪改

修改:alter table students add job varchar(20);、update students set job='nurse' where stuid=1;

刪除:drop tables teachers;

再修改:insert into students values(26,'Yang Guo',28,'M',NULL,NULL,'CEO');

最後表

image.png

(5)開始還原,還原過程當中利用防火牆不容許其餘人訪問數據庫

進入數據庫,先暫時關閉臨時會話的二進制日誌,避免二進制日誌重複記錄導入過程

mysql > set sql_log_bin=off;

      source /backups/db.sql;

此時完成徹底備份的還原

image.png

(6)開始還原修改的數據,less /backups/db.sql,查看CHANGE MASTER TO信息

image.png

(7)利用工具將該日誌導成sql數據庫文件,並查找刪除關鍵表的指令

mysqlbinlog /data/binlog/mysql-bin.000003 > /data/incr.sql

image.png

完成後,若是後續還有其它二進制日誌,將其它二進制日誌也追加到incr.sql:

mysqlbinlog /data/binlog/mysql-bin.000004 >> /data/incr.sql

mysqlbinlog /data/binlog/mysql-bin.000005 >> /data/incr.sql等等

不過我這裏因爲增刪改很少,就mysqlbinlog /data/binlog/mysql-bin.000003 > /data/incr.sql這一步就夠了

image.png

(8)導入數據,不過導入以前須要關閉臨時會話中的sql_log_bin,避免出現二進制日誌重複記錄的現象

set sql_log_bin=off;

source  /data/incr.sql

這下咱們的teachers表回來了,修改的students表也還原了

image.pngimage.png

 (9)關閉以前的拒絕用戶訪問策略,完成

相關文章
相關標籤/搜索