Mariadb數(shù)據(jù)庫的備份與恢復過程詳細介紹
一、前提條件:二進制日志配置
作用
用于數(shù)據(jù)庫恢復(時間點恢復)
?建議?:單獨存儲路徑,與數(shù)據(jù)文件分離
啟用步驟
效果# 編輯配置文件 vim /etc/my.cnf # 添加內(nèi)容 [mysqld] log_bin=/path/to/binlogs/bin-log # 自定義路徑和文件名前綴
效果
日志文件:
/path/to/binlogs/bin-log.000001索引文件:
/path/to/binlogs/bin-log.index
二、mysqldump 備份恢復
特性?
邏輯備份工具,支持所有存儲引擎
支持溫備(InnoDB 可熱備)
支持完全/部分備份,增量備份需結合 binlog
備份與還原場景
| 場景? | ?備份命令? | ?還原命令? | ?關鍵說明? |
|---|---|---|---|
| 單庫或多表(不備份庫定義) | mysqldump -uroot -p db1 [tb1] > dump.sql | mysql db1 < dump.sql | ?庫必須已存在? |
| 單庫或多庫(含庫定義) | mysqldump -uroot -p -B db1 [db2] > dump.sql | mysql < dump.sql | 自動創(chuàng)建庫 |
| 所有數(shù)據(jù)庫(不含系統(tǒng)庫) | mysqldump -uroot -p -A > alldb.sql | mysql < alldb.sql | 排除 performance_schema/information_schema |
還原優(yōu)化操作
-- 臨時關閉二進制日志記錄(避免記錄恢復操作) SET sql_log_bin = OFF; -- 清除歷史 binlog(可選) RESET MASTER; -- 導入備份文件 SOURCE /path/to/alldb.sql; -- 重新開啟二進制日志 SET sql_log_bin = ON;
三、mysqldump關鍵參數(shù)詳解
--master-data=[=#] | ?必須開啟 binlog? |
| 1:所備份的數(shù)據(jù)之前加一條記錄為CHANGE MASTER TO語句,非注釋,不指定#,默認為1 | |
| 2:記錄為注釋的CHANGE MASTER TO語句此選項會自動關閉–lock-tables功能,自動打開-x | –lock-all-tables功能(除非開啟–single-transaction) |
-A / --all-databases | 備份所有數(shù)據(jù)庫,含create database |
-B / --databases db_name… | 指定備份的數(shù)據(jù)庫,包括create database語句 |
-E / --events | 備份相關的所有event scheduler 計劃任務 |
-R / --routines | 備份所有存儲過程和自定義函數(shù) |
--triggers | 備份表相關觸發(fā)器,默認啟用,用–skip-triggers,不備份觸發(fā)器 |
--default-character-set=utf8 | 指定字符集 |
-F / --flush-logs | 備份前滾動日志,鎖定表完成后,執(zhí)行flush logs命令,生成新的二進制日志文件,配合-A 或 -B 選項時,會導致刷新多次數(shù)據(jù)庫。建議在同一時刻執(zhí)行轉儲和日志刷新,可通過和–single-transaction或-x,–master-data 一起使用實現(xiàn),此時只刷新一次日志 |
--compact | 去掉注釋,適合調(diào)試,生產(chǎn)不使用 |
-d / --no-data | 只備份表結構 |
-t / --no-create-info | 只備份數(shù)據(jù),不備份create table |
-n / --no-create-db | 不備份create database,可被-A或-B覆蓋 |
--flush-privileges | 刷新權限,備份mysql或相關時需要使用 |
-f / --force | 忽略SQL錯誤,繼續(xù)執(zhí)行 |
--hex-blob | 使用十六進制符號轉儲二進制列,當有包括BINARY,VARBINARY,BLOB,BIT的數(shù)據(jù)類型的列時使用,避免亂碼 |
-q / --quick | 不緩存查詢,直接輸出,加快備份速度 |
??
--master-data會自動啟用--lock-all-tables(除非搭配--single-transaction)
通過備份文件和二進制文件恢復數(shù)據(jù)庫到當前裝填
通常數(shù)據(jù)庫的備份都發(fā)生在凌晨用戶訪問量較少的時候進行,例如我們在凌晨3點對數(shù)據(jù)庫進行了完全備份,但是在上午11點的時候,因為管理員的誤操作,到時候數(shù)據(jù)庫某張表被刪除,如果我們用數(shù)據(jù)庫的完整備份的話,就只能恢復到凌晨3點,那么要恢復3點到11點這段時間的數(shù)據(jù),就需要用到二進制日志
前提:在進行數(shù)據(jù)庫備份的時候加了–master-data=[1|2]選項,記錄了數(shù)據(jù)庫備份時,日志的位置
四、Binlog + 全備恢復流程
場景模擬?
凌晨 3:00 進行全備
上午 11:00 誤刪除數(shù)據(jù)表
?目標?:恢復到誤刪前狀態(tài)(3:00 ~ 11:00 的數(shù)據(jù)從 binlog 恢復)
操作步驟
4.1 全量備份?(記錄 binlog 位置)
[ root@Centos~]# mysqldump -A --master-data=2 > database.sql [ root@Centos~]# less database.sql -- CHANGE MASTER TO MASTER_LOG_FILE='XX-bin.000001', MASTER_LOG_POS=2638793; 這條記錄了當前的備份所在的日志位置,為XX-bin.000001的2638793
4.2 提取增量 binlog
[root@Centos~]# mysqlbinlog --start-position=2638793 /XXX/mariadb-bin.000007 > binary.sql
4.3 恢復數(shù)據(jù)
-- 關閉 binlog 記錄 SET sql_log_bin = OFF; -- 導入全量備份 SOURCE full_backup.sql; -- 導入增量 binlog SOURCE incremental.sql; -- 重新啟用 binlog SET sql_log_bin = ON;
五、注意事項?
?遷移數(shù)據(jù)庫?:不可用
rm -rf /var/lib/mysql/*暴力刪除(破壞系統(tǒng)表),應用mysqladmin正規(guī)操作。?路徑安全?:Binlog 存儲目錄需確保 MySQL 用戶有寫權限。
?一致性?:MyISAM 表備份需加
--lock-all-tables,InnoDB 推薦加--single-transaction。?版本兼容?:備份/恢復建議使用相同 MySQL 版本。
? ?進階提示?:定期清理 binlog(PURGE BINARY LOGS)避免磁盤寫滿,建議配合 expire_logs_days參數(shù)使用。
請不要以此視為定論,這只是我的個人經(jīng)驗
到此這篇關于Mariadb數(shù)據(jù)庫的備份與恢復的文章就介紹到這了,更多相關Mariadb備份與恢復內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
win10下mysql 5.7.23 winx64安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了win10下mysql 5.7.23 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09
mysql如何增加數(shù)據(jù)表的字段(ALTER)
這篇文章主要介紹了mysql如何增加數(shù)據(jù)表的字段(ALTER),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
MySql數(shù)據(jù)庫之a(chǎn)lter表的SQL語句集合
mysql之a(chǎn)lter表的SQL語句集合,包括增加、修改、刪除字段,重命名表,添加、刪除主鍵等。本文給大家介紹MySql數(shù)據(jù)庫之a(chǎn)lter表的SQL語句集合,感興趣的朋友一起學習吧2016-04-04

