Mysql數據庫的增量備份與還原

一、備份的目的

做災難恢復:對損壞的數據進行恢復和還原。

二、備份需要考慮的問題

可以接受丟失多少數據;

恢復數據的時間要多久;

恢復數據時是否持續提供服務;

恢復的對象,是一個庫,多個表,單個表,還是整個數據庫。

三、備份的類型

1,完全備份 每次對數據庫的數據進行完全備份,備份整個數據庫。所以完全備份耗時較長。

2,增量備份 在上次備份的基礎上,備份更新的數據。

四、如何完全備份

在數據庫較小,要備份的庫小於(50G)時可以使用mysql 自帶的備份工具mysqldump進行數據庫或者表的完全備份。

Mysqldump 工具備份

優點:

備份的粒度靈活,既可以備份整個mysql服務也可以備份單個的庫或者表。

缺點:

1,當數據浮點數時會出現精度丟失。

2,Mysqldump 備份的過程是串行化的,不會並行的進行備份,當備份的數據量較大時,耗時太長效率太低。

Mysqdump 工具對innodb 的儲存引擎支持熱備,即在不影響服務使用的情況下備份。

使用語法;

在命令行下 mysqldump -uroot -p‘password’ 數據庫名稱 > 備份文件的名稱以 . sql 結尾.

-B 選項 導出指定的某個/某幾個庫 用空格 隔開 包含 create database 的語句.

五、如何增量備份

二進制日誌,binary log

記錄著數據庫的所有增、刪、改、等操作日誌。可以使用 mysqlbinlog 在命令行下查看日誌。可利用binlog日誌文件進行數據的備份和還原。

查看數據binlog功能是否開啟

Show variables like ‘log_bin%’;

要開啟binlog功能可以修改 my.cnf文件

在文件尾部添加 log-bin=/data/mysql/log/mysql_bin

server-id=1

重啟mysql服務使其生效即可.

Mysqlbinlog 指定binlog 文件 | mysql -uroot -p 密碼 即可恢復指定日誌文件中所記錄的所有操作.

六、備份和恢復數據庫實驗。

準備實驗環境

1,進入mysql到中 ,創建實驗數據庫 create database shiyan;

Use shiyan; 切換當前數據庫為 shiyan

Create table kdata1(id int,name char(200)); 創建表一

2, 修改 my.cnf mysql配置文件. 在最後一行插入

Log-bin=/data/mysql/log/mysql_bin

Server-id=1

重啟mysql服務使修改的配置項生效 也就是開啟 binlog服務

3,

先對實驗數據庫做完全備份

Mysqldump -uroot -p密碼 --single-transaction --flush-logs -B shiyan > shiyan_data_$(date +%Y%m%d%H%M%S).sql

–single-transaction 是熱備份 只有在存儲引擎為 innodb 時有效

–flush-logs 是生成新的binlog 文件 刷新二級制日誌.

4,

在實驗庫 的kdata1表中插入數據 insert into shiyan.kdata1 values(1,’zhangsan’);

查看數據是否插入成功 select * from shiyan.kdata1;

Mysql數據庫的增量備份與還原

可以看到數據成功插入了.


Mysqlbinlog -vv /data/mysql/log/mysql_bin.000001

Mysql數據庫的增量備份與還原

可以看到剛才插入數據的操作已經記錄在日誌文件中了.

5 ,

使用flush logs; 生成一個新的日誌文件

在實驗庫中再創建一個新的表二

Create table kdata2(u_id int,b_name char(20));

插入一條數據

Insert into shiyan.kdata2 values(2,’wangwu’);

查看數據

Mysql數據庫的增量備份與還原

Set sql_log_bin=0 臨時關閉binlog功能

6, 模擬一個表的數據丟失

Drop table kdata2; 刪除表二

7, 使用binlog 日誌來恢復刪除的表二.

Mysqlbinlog /data/mysql/log/mysql_bin.000002 | mysql -uroot -p密碼 再命令行下

進入到mysql中 use shiyan; 切換到實驗庫

Show tables; 查看當前庫中的表

Mysql數據庫的增量備份與還原

可以看到表二已經恢復了

查看一下表二的記錄

Mysql數據庫的增量備份與還原

表二中的數據也找回來了.

8,模擬實驗數據庫丟失了

Drop database shiyan; 刪除實驗數據庫

然後恢復數據庫

1, 先利用 完全備份的文件進行恢復

Mysql -uroot -p密碼 < /root/shiyan_data_20200112131142.sql 數據還原

然後查看實驗庫中的表

Show tables;

Mysql數據庫的增量備份與還原

發現表一恢復回來了但是沒有表二

這時想要最大程度的恢復數據需要利用binlog文件儘可能的去恢復數據庫丟失前的數據.

Mysqlbinlog /data/mysql/log/mysql_bin.00000.2 | mysql -uroot -p密碼

這時再去查看實驗庫中的表就會看到表二也恢復了

實驗總結:

單獨的使用完全備份 無疑有很大缺點,當數據越來越多時備份的效率也越來越低. 但是我們使用 完全備份加 增量備份 binlog日誌 數據備份的效率不會有太大的影響 而且還原時也可以最大程度還原到數據丟失前的狀態,減少數據丟失.


分享到:


相關文章: