Mysql -- 完全備份 + 增量備份 + 恢復

文章目錄

一、數據庫備份的分類

二、MySQL 完全備份

(1)完全備份特點

(2)mysqldump 備份庫

1、針對單個庫進行完全備份

2、針對多個庫進行完全備份

3、對所有庫進行完全備份

(3)恢復數據庫操作

1、source 命令

2、使用 mysql 命令

(4)mysqldump 備份表

1、備份表

2、備份表的結構

(5)恢復表的操作

三、MySQL 增量備份

一、數據庫備份的分類:

1、從物理與邏輯的角度,備份可以分爲:

物理備份:對數據庫操作系統的物理文件(數據文件、日誌文件等)備份;

邏輯備份:對數據庫邏輯組件(如表等數據庫對象)備份;

2、從數據庫的備份策略角度,備份可分爲:

完全備份:每次對數據進行完整的備份;

差異備份:備份那些自從上次完全備份之後被修改過後的文件;

增量備份:只有那些在上次完全備份或者增量備份後被修改的文件纔會被備份。

二、MySQL 完全備份:

完全備份是對整個數據庫的備份、數據庫結構和文件結構的備份;

完全備份保存的是對備份完成時刻的數據庫;

完全備份是增強備份的基礎

(1)完全備份特點:

備份與恢復操作簡單方便;

數據存在大量的重複,會導致佔用大量的備份空間

備份與恢復時間長

(2)mysqldump 備份庫

mysql 數據庫的備份可以採取多種方式:

直接打包數據庫文件夾;

使用專用的備份工具 ----- mysqldump ;

該命令工具可以將指定的庫、表或全部的庫導出爲 SQL 腳本,在需要恢復時可進行數據恢復。

tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
//直接對整個數據庫的數據文件進行打包,備份,並以時間命名壓縮包名稱

1、針對單個庫進行完全備份:

Mysql -- 完全備份 + 增量備份 + 恢復

 mysqldump -uroot -p school > /opt/school.sql
 將名爲school的數據庫備份到/opt/目錄下,起名爲school.sql

2、針對多個庫進行完全備份:

Mysql -- 完全備份 + 增量備份 + 恢復

mysqldump -uroot -pabc123 --databases school team > /opt/db_s_t.sql
 //對school和team這兩個數據庫進行備份,起名爲db_s_t.sql

3、對所有庫進行完全備份:

Mysql -- 完全備份 + 增量備份 + 恢復

mysqldump -uroot -pabc123 --all-databases > /opt/all.sql
//對所有的數據庫進行備份

(3)恢復數據庫操作

使用 mysqldump 命令導出的 SQL 備份腳本,在進行數據恢復時可使用兩種方法導入:

source 命令

mysql 命令

1、source 命令:

先登錄到 mysql 數據庫,再執行 source 備份sql腳本的路徑。

mysql> source /opt/school.sql;
//恢復school數據庫

2、使用 mysql 命令:

Mysql -- 完全備份 + 增量備份 + 恢復

 mysql -uroot -pabc123 school < /opt/school.sql 
//恢復school數據庫

(4)mysqldump 備份表

1、備份表:

Mysql -- 完全備份 + 增量備份 + 恢復

mysqldump -uroot -pabc123 school info > /opt/school_info.sql
//對數據庫school下的info表進行備份

2、備份表的結構:

 mysqldump -uroot -pabc123 -d school info > /opt/school_info.sql
 //加-d 選項,就是備份表的結構,不備份表內的信息

(5)恢復表的操作

恢復表時,同樣可以使用 source 命令 和 mysql 命令 進行,操作與恢復庫的操作相同;

需要注意的是:當備份文件中只包含表的備份,而不包括創建庫的語句時,必須指定庫名,且目標庫必須存在。

Mysql -- 完全備份 + 增量備份 + 恢復

三、MySQL 增量備份:

增量備份就是備份自上一次備份之後增加或變化的文件或者內容,必須先有完全備份才能進行增量備份。

使用 mysqldump 進行完全備份的存在的問題:

備份數據中有重複數據;

備份時間與恢復時間長;

(1)增量備份的特點:

沒有重複數據,備份量不大,時間短;

恢復麻煩,需要上次完全備份及完全備份之後所有的增量備份才能恢復,而且要對所有增量備份進行逐個反推恢復。

增量備份依賴二進制日誌文件,首先需要開啓二進制日誌文件:

修改 my.cnf文件,添加:log-bin=mysql-bin

Mysql -- 完全備份 + 增量備份 + 恢復

Mysql -- 完全備份 + 增量備份 + 恢復

mysqladmin -uroot -pabc123 flush-logs
//刷新所有日誌

Mysql -- 完全備份 + 增量備份 + 恢復

(2)MySQL 數據庫增量恢復方法:

1、例如,對數據庫進行了以下操作:

 insert into info (id,name,score) values (7,'wang',33);
 //插入一條信息
 delete from info where name='jack';
 //刪除一條信息;
insert into info (id,name,score) values (10,'qian',44);
//再插入一條信息

Mysql -- 完全備份 + 增量備份 + 恢復

2、查看日誌文件:

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

方法一:一般恢復

Mysql -- 完全備份 + 增量備份 + 恢復

命令:

mysqlbinlog [--no-defaults] 增量備份文件 | mysql -u 用戶名 -p

方法二:基於位置恢復

將某個起始時間的二進制日誌導入數據庫中,從而跳過某個發生錯誤的時間實現數據的恢復。

1、恢復數據到指定的位置:

Mysql -- 完全備份 + 增量備份 + 恢復

mysqlbinlog --no-defaults --stop-position='293' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p

2、從指定的位置開始恢復數據:

Mysql -- 完全備份 + 增量備份 + 恢復

mysqlbinlog --no-defaults --start-position='396' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p

方法三:基於時間點恢復

使用基於時間點的恢復,可能會出現在一個時間點裏既同時存在正確的操作又存在錯誤的操作,所以我們需要一種更爲精確的恢復方式。

1、從日誌開頭截止到某個時間點的恢復:

Mysql -- 完全備份 + 增量備份 + 恢復

 mysqlbinlog --no-defaults --stop-datetime='2020-01-14 17:56:36' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p

2、從某個時間點到日誌結尾的恢復:

Mysql -- 完全備份 + 增量備份 + 恢復

 mysqlbinlog --no-defaults --start-datetime='2020-01-14 17:57:03' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p

3、從某個時間點到某個時間點的恢復:

Mysql -- 完全備份 + 增量備份 + 恢復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章