Mysql資料庫的增量備份與還原

2021-10-02 03:31:46 字數 3354 閱讀 7728

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;

可以看到資料成功插入了.

可以看到剛才插入資料的操作已經記錄在日誌檔案中了.

5 ,使用flush logs; 生成乙個新的日誌檔案

在實驗庫中再建立乙個新的表二

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

插入一條資料

insert into shiyan.kdata2 values(2,』wangwu』);

檢視資料

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; 檢視當前庫中的表

可以看到表二已經恢復了

檢視一下表二的記錄

表二中的資料也找回來了.

8,模擬實驗資料庫丟失了

drop database shiyan; 刪除實驗資料庫

然後恢復資料庫

1, 先利用 完全備份的檔案進行恢復

mysql -uroot -p密碼 < /root/shiyan_data_20200112131142.sql 資料還原

然後檢視實驗庫中的表

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

這時想要最大程度的恢復資料需要利用binlog檔案盡可能的去恢復資料庫丟失前的資料.

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

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

實驗總結:

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

Mysql 資料庫增量備份

mysql 的二進位制日誌檔案中,儲存了所有對資料庫進行更改的sql語句,所以增量備份就是 先把mysql資料庫進行完全備份,然後儲存完全備份以後產生的日誌檔案,等下次完全備份時,重複以上過程.具體操作 在my.ini中新增如下資訊 log bin 二進位制日誌檔名 新增了這條配置資訊以後,重啟my...

MySQL資料庫(7) MySQL 資料備份與還原

1 使用mysqldump命令備份 mysqldump命令將資料庫中的資料備份成乙個文字檔案。表的結構和表中的資料將儲存在生成的文字檔案中。mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文字檔案中生成乙個create語句。然後,將表中的所有記錄轉換成一條insert語句。然...

Mysql資料庫備份與恢復(一) 邏輯備份與還原

邏輯備份實際上就是把資料匯出為sql語句,優點是對於任何儲存引擎 myisam或innodb 都可用。一 備份 mysqldump options db name options 備份test資料庫中的documents 到指定的檔案d documentss.sql d xampp mysql bi...