備份的目的 能夠防止由於機械故障以及人為誤操作帶來的數據丟失,例如將資料庫文件保存在了其它地方。 備份的分類 以操作過程中服務的可用性分: 冷備份:cold backup mysql服務關閉,mysql離線 溫備份:warm backup mysql服務線上,但是不允許寫請求,例如 read loc ...
備份的目的
能夠防止由於機械故障以及人為誤操作帶來的數據丟失,例如將資料庫文件保存在了其它地方。
備份的分類
以操作過程中服務的可用性分:
冷備份:cold backup mysql服務關閉,mysql離線
溫備份:warm backup mysql服務線上,但是不允許寫請求,例如 read lock,線上的某些功能需要中止。
熱備份:hot backup 備份同時,業務讀寫請求繼續,業務不受干擾。(沒有絕對的熱備份,無限接近,停止的時間忽略不計)
myisam :不支持熱備
innodb : 需要專用工具
以操作方式區分:
邏輯備份: 備份的是建表、建庫、插入等操作所執行SQL語句(DDL DML DCL),適用於中小型資料庫,效率相對較低(相對複雜,且在恢復過程中容易丟失數據,不推薦使用)
物理備份: 直接複製資料庫文件,適用於大型資料庫環境,不受存儲引擎的限制,
但不能恢復到不同的MySQL版本。(推薦使用)
lvm快照備份的優缺點
優點:
幾乎是熱備 (創建快照前把表上鎖,創建完後立即釋放)
支持所有存儲引擎
備份速度快
無需使用昂貴的商業軟體(它是操作系統級別的)
缺點:
可能需要跨部門協調(使用操作系統級別的命令,DBA一般沒許可權)
無法預計服務停止時間
數據如果分佈在多個捲上比較麻煩 (針對存儲級別而言)
lvm 快照備份原理:
LVM對LV提供的快照功能,只對LVM有效。
當一個snapshot創建的時候,僅拷貝 原始捲 里數據的 元數據(meta-data)。因此建立快照的速度非常快
創建的時候,並不會有數據的物理拷貝,因此 snapshot的創建幾乎是實時的,當原始捲上有寫操作執行時,
snapshot 跟蹤原始捲塊的改變,這個時候原始捲上將要改變的數據在 改變之前被拷貝到 snapshot預留的空間里,
因此這個原理的實現叫做寫時複製 (copy-on-write)。
在寫操作寫入塊之前,將原始數據移動到 snapshot空間里,這樣就保證了所有的數據在snapshot創建時保持一致。
而對於snapshot的讀操作,如果是讀取數據塊是沒有修改過的,那麼會將讀操作直接重定向到原始捲上,如果是要
讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。
LVM 快照備份流程:
LVM快照: 鎖表時間接近熱備
1. 加全局讀鎖
mysql> flush tables with read lock;
2.創建快照, lvcreate -L 500M -s -n lv-mysql-snap /dev/datavg/lv-mysql ;
3.刷新二進位日誌 mysql> flush logs
4 釋放鎖 mysql>unlock tables
5. 掛載 快照設備 ,並從快照設備中,對資料庫文件進行打包與 壓縮
6、卸載快照設備
7、 移除快照設備 lvremove -f /dev/datavg/lv-mysql-snap
產生了一份新的 二進位日誌。
此時,手動插入 幾條數據,修改幾條數據 ======》 體現最新的 二進位日誌中。!
模擬崩潰:
停止服務,刪除 資料庫所有文件 ( 二進位日誌不要和資料庫數據放在同一目錄 )
要求,恢復所有數據,包括 剛纔 新增 和 修改了的 數據。
恢復流程:
1、恢復最近的一次 完全備份, mysql-2018-9-19-full.tar.gz /mysql 解壓。
2、將最近的一份二進位日誌 進行導出 mysqlbinlog /data/mysql-binlog/mysql.000025 > /tmp/a.sql
3、啟動mysql服務(產生一份新的二進位日誌 ),登錄mysql
4、設置 臨時 停止記錄 二進位 日誌。 mysql> set session sql_log_bin=0;
5、mysql> source /tmp/a.sql;
6、mysql> set session sql_log_bin=1; 重新開啟二進位日誌功能
至此,恢復完成! 用 select 語句 進行 查詢驗證,看數據是否恢復 。