天天看點

Linux環境下實作MariaDB資料庫的三種備份和還原

一、tar工具的使用

 1、備份

(1)停止服務,3306端口關閉

Linux環境下實作MariaDB資料庫的三種備份和還原

(2)看下配置檔案有沒有關鍵日志存放于其它目錄的,檢查/etc/my.cnf,再檢查下/etc/my.cnf.d/下有沒有配置檔案放置其他地方,有的話也需要一起拷貝歸檔

Linux環境下實作MariaDB資料庫的三種備份和還原

(3)建立備份目錄,歸檔

Linux環境下實作MariaDB資料庫的三種備份和還原

(4)開啟服務,備份完成

2、還原

(1)這裡有個不小心輸入删重要mysql庫的指令,開始還原

Linux環境下實作MariaDB資料庫的三種備份和還原

(2)關閉服務,systemctl stop mariadb

(3)一定要注意配置檔案和備份前的配置是否一樣,拷貝剛才歸檔檔案并解壓至庫裡

Linux環境下實作MariaDB資料庫的三種備份和還原

(4)解壓後檔案注意權限,務必確定mysql.mysql權限

Linux環境下實作MariaDB資料庫的三種備份和還原

(4)開啟服務,systemctl start mariadb

(5)進入資料庫,檢視資料庫,mysql又回來了

Linux環境下實作MariaDB資料庫的三種備份和還原

二、LVM邏輯卷快照實作幾乎熱備(實質還是冷備):将資料庫内容在很短時間用邏輯卷快照備份下,之後先将資料庫推上線,再處理快照中的内容,結合二進制日志還原

1、備份

(1)新加硬碟并建立邏輯卷分區

開機添加硬碟掃描下,echo '- - -' > /sys/class/scsi_host/host0/scan,記得有每個host都需要掃描下

Linux環境下實作MariaDB資料庫的三種備份和還原

分區,分區時候記得更改硬碟分區檔案系統,代碼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

Linux環境下實作MariaDB資料庫的三種備份和還原

(3)資料遷移,需要更改配置檔案,開啟二進制日志功能,確定權限正确

注:如果重新開機服務後提示錯誤無法遷移,将原資料庫内mysql庫複制到新庫中重新開機即可

Linux環境下實作MariaDB資料庫的三種備份和還原

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

(4)基于快照備份

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

Linux環境下實作MariaDB資料庫的三種備份和還原

(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')

相比之前已經作出很多修改

Linux環境下實作MariaDB資料庫的三種備份和還原

POS點變化,說明從328往後的資料點都是在變化

Linux環境下實作MariaDB資料庫的三種備份和還原

(6)做完邏輯卷快照後,對資料的更改會影響伺服器性能能,也就是說舊的内容會添加到邏輯卷快照中,是以我們需要把快照裡的資料導出來,對邏輯卷快照挂載

直接挂載mount /dev/vgdb/snap_dbbak /mnt會報錯,因為快照snap_dbbak的邏輯卷uuid和lvdb邏輯卷uuid一樣,是以挂載輸入指令mount -o nouuid,norecovery /dev/vgdb/snap_dbbak  /mnt

Linux環境下實作MariaDB資料庫的三種備份和還原

(7)為確定資料安全性,可以挂載完成後将挂載目錄裡的資料存放至其它裝置中,因為實驗環境,依舊在本機上操作

Linux環境下實作MariaDB資料庫的三種備份和還原

cp -a /mnt/* /backups,此處用cp -a,保留權限,此時相當于備份完成

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

lvremove /dev/vgdb/snap_dbbak

(9)模拟損壞,删庫,之後跑路,不過被抓了回來需要負責到底

(10)還原開始,停止服務,拷貝原資料庫内容到資料庫存放目錄,再開放資料庫

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

Linux環境下實作MariaDB資料庫的三種備份和還原

(11)此時發現隻有邏輯卷快照時的備份,後面的增删改沒有了,是以這裡需要引入二進制日志。在利用二進制還原時候,要避免其他使用者連接配接資料庫産生資料變更,此處需要使用防火牆或者其它政策確定資料庫隻有自己一個人操作

引用之前的圖檔,此時利用二進制日志工具可以還原

Linux環境下實作MariaDB資料庫的三種備份和還原

mysqlbinlog --start-position=328 mysql-bin.000001,可以檢視到内容

Linux環境下實作MariaDB資料庫的三種備份和還原

往下翻

Linux環境下實作MariaDB資料庫的三種備份和還原

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

mysqlbinlog mysql-bin.000002 >> bl.sql

Linux環境下實作MariaDB資料庫的三種備份和還原

導入後再打開二進制日志功能,發現資料回來了

Linux環境下實作MariaDB資料庫的三種備份和還原

(12)還原後記得之前設定的防火牆或者其它拒絕通路政策再取消掉,完成

注意:如果删庫用的是drop,不像實驗中rm指令删除的,mybinlog BINLOG > *.sql,編輯該sql檔案,将drop指令那行注釋掉,再mysql < *.sql

3、mysqldump的備份和誤删除操作後的還原

(1)準備環境,條件允許情況下,将二進制日志檔案和資料庫存放目錄放到不同的磁盤中,而且二進制日志檔案最好單獨放在一個分區中

Linux環境下實作MariaDB資料庫的三種備份和還原

(2)加個資料庫作為準備環境

Linux環境下實作MariaDB資料庫的三種備份和還原

做點修改,二進制日志産生變化

Linux環境下實作MariaDB資料庫的三種備份和還原

(3)開始備份

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

Linux環境下實作MariaDB資料庫的三種備份和還原

(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');

最後表

Linux環境下實作MariaDB資料庫的三種備份和還原

(5)開始還原,還原過程中利用防火牆不允許其他人通路資料庫

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

mysql > set sql_log_bin=off;

      source /backups/db.sql;

此時完成完全備份的還原

Linux環境下實作MariaDB資料庫的三種備份和還原

(6)開始還原修改的資料,less /backups/db.sql,檢視CHANGE MASTER TO資訊

Linux環境下實作MariaDB資料庫的三種備份和還原

(7)利用工具将該日志導成sql資料庫檔案,并查找删除關鍵表的指令

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

Linux環境下實作MariaDB資料庫的三種備份和還原

完成後,如果後續還有其它二進制日志,将其它二進制日志也追加到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這一步就夠了

Linux環境下實作MariaDB資料庫的三種備份和還原

(8)導入資料,不過導入之前需要關閉臨時會話中的sql_log_bin,避免出現二進制日志重複記錄的現象

set sql_log_bin=off;

source  /data/incr.sql

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

Linux環境下實作MariaDB資料庫的三種備份和還原
Linux環境下實作MariaDB資料庫的三種備份和還原

 (9)關閉之前的拒絕使用者通路政策,完成