一、備份sql
(1)中止服務,3306端口關閉
數據庫
(2)看下配置文件有沒有關鍵日誌存放於其它目錄的,檢查/etc/my.cnf,再檢查下/etc/my.cnf.d/下有沒有配置文件放置其餘地方,有的話也須要一塊兒拷貝歸檔安全
(1)這裏有個不當心輸入刪重要mysql庫的命令,開始還原工具
(2)關閉服務,systemctl stop mariadb性能
(3)必定要注意配置文件和備份前的配置是否同樣,拷貝剛纔歸檔文件並解壓至庫裏ui
(4)解壓後文件注意權限,務必確保mysql.mysql權限
(4)開啓服務,systemctl start mariadb
2、LVM邏輯卷快照實現幾乎熱備(實質仍是冷備):將數據庫內容在很短期用邏輯卷快照備份下,以後先將數據庫推上線,再處理快照中的內容,結合二進制日誌還原
(1)新加硬盤並創建邏輯卷分區
開機添加硬盤掃描下,echo '- - -' > /sys/class/scsi_host/host0/scan,記得有每一個host都須要掃描下
分區,分區時候記得更改硬盤分區文件系統,代碼8e,Linux LVM
lvcreate -n lvdb -L +6G /dev/vgdb ----->創建邏輯卷用來放置數據庫數據
lvcreate -n lvdb -L +4G /dev/vgbin ----->創建邏輯卷用來單獨放置二進制日誌
mkdir -pv /data/{mysql,binlog}
mount /dev/vgdb/lvdb /data/mysql
mount /dev/vgdb/lvbin /data/binlog
(3)數據遷移,須要更改配置文件,開啓二進制日誌功能,確保權限正確
注:若是重啓服務後提示錯誤沒法遷移,將原數據庫內mysql庫複製到新庫中重啓便可
lvcreate -p -r -s -n snap_dbbak -L 2G /dev/vgdb/lvdb,設置了只讀屬性
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')
(6)作完邏輯卷快照後,對數據的更改會影響服務器性能能,也就是說舊的內容會添加到邏輯卷快照中,所以咱們須要把快照裏的數據導出來,對邏輯卷快照掛載
直接掛載mount /dev/vgdb/snap_dbbak /mnt會報錯,由於快照snap_dbbak的邏輯卷uuid和lvdb邏輯卷uuid同樣,因此掛載輸入指令mount -o nouuid,norecovery /dev/vgdb/snap_dbbak /mnt
(7)爲確保數據安全性,能夠掛載完成後將掛載目錄裏的數據存放至其它設備中,由於實驗環境,依舊在本機上操做
cp -a /mnt/* /backups,此處用cp -a,保留權限,此時至關於備份完成
(10)還原開始,中止服務,拷貝原數據庫內容到數據庫存放目錄,再開放數據庫
systemctl stop mariadb;cp -av /backups/* mysql/
(11)此時發現只有邏輯卷快照時的備份,後面的增刪改沒有了,因此這裏須要引入二進制日誌。在利用二進制還原時候,要避免其餘用戶鏈接數據庫產生數據變動,此處須要使用防火牆或者其它策略確保數據庫只有本身一我的操做
mysqlbinlog --start-position=328 mysql-bin.000001,能夠查看到內容
mysqlbinlog --start-position=328 mysql-bin.000001 > bl.sql
mysqlbinlog mysql-bin.000002 >> bl.sql
(12)還原後記得以前設置的防火牆或者其它拒絕訪問策略再取消掉,完成
注意:若是刪庫用的是drop,不像實驗中rm指令刪除的,mybinlog BINLOG > *.sql,編輯該sql文件,將drop命令那行註釋掉,再mysql < *.sql
三、mysqldump的備份和誤刪除操做後的還原
(1)準備環境,條件容許狀況下,將二進制日誌文件和數據庫存放目錄放到不一樣的磁盤中,並且二進制日誌文件最好單獨放在一個分區中
mysqldump -A -F --single-transacation --master-data=2 | gzip > /backupsq/db.sql.gz
(4)備份完,繼續修改點小數據,再刪個表以後繼續作點修改,此時模仿環境中數據庫時時刻刻都有增刪改操做,不能說是由於刪了某個表就中止了其餘增刪改
修改:alter table students add job varchar(20);、update students set job='nurse' where stuid=1;
再修改:insert into students values(26,'Yang Guo',28,'M',NULL,NULL,'CEO');
(5)開始還原,還原過程當中利用防火牆不容許其餘人訪問數據庫
進入數據庫,先暫時關閉臨時會話的二進制日誌,避免二進制日誌重複記錄導入過程
(6)開始還原修改的數據,less /backups/db.sql,查看CHANGE MASTER TO信息
(7)利用工具將該日誌導成sql數據庫文件,並查找刪除關鍵表的指令
mysqlbinlog /data/binlog/mysql-bin.000003 > /data/incr.sql
完成後,若是後續還有其它二進制日誌,將其它二進制日誌也追加到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這一步就夠了
(8)導入數據,不過導入以前須要關閉臨時會話中的sql_log_bin,避免出現二進制日誌重複記錄的現象
這下咱們的teachers表回來了,修改的students表也還原了
(9)關閉以前的拒絕用戶訪問策略,完成