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...