raid在硬件級別保證硬件損壞而不會致使業務停止。
一 備份類型
按是否離線
1)熱備份,在線備份,讀寫不受影響;難度大
2)溫備份,能讀不能寫
3)冷備份,離線備份,讀寫均停止
物理備份,複製數據文件
邏輯備份,複製數據導出至文本文件中
徹底備份:備份所有數據,多是一個數據庫的所有數據
增量備份:僅備份上次徹底備份或增量備份之後變化的數據;
差別備份:僅備份上次徹底備份以來變化的數據;
備份方式可自由組合
二 備份需考慮的問題
1 備份什麼?
2 離線備份仍是在線備份?
MyISAM不宜進行熱備,一旦備份中出現問題,不能用於還原,推薦
使用溫備份(
以共享方式鎖定全部表)
若是必須使用熱備,使用LVM進行快照
InnoDB熱備工具:
xtrabackup(物理備份), mysqldump(邏輯備份)
最好使用離線備份,較爲安全,使用主從實現,能夠在某一時刻停掉從服務器的服務,進行離線備份
3 物理備份仍是邏輯備份?
物理備份,
優點:直接複製數據文件,速度快
缺點:有些數據依賴文件系統,移植能力有限
邏輯備份
優點:方便使用文本處理工具直接對其處理,移植能力強
缺點:複製
數據導出至文本文件中,數據慢,丟失浮點數精度(轉化爲文本時丟失)
4 備份策略選擇?
徹底備份+
增量
備份 或者 徹底備份+
差別
備份
三 mysql備份工具
mysqldump,
邏輯備份
工具,MyISAN(溫備),InnoDB(熱備)
mysqlhotcopy,
物理備份
工具,冷備
文件系統備份工具
cp:冷備
lvm:邏輯卷快照,幾乎熱備
mysql> lock tables user read;
mysql> FLUSH TABLES;
建立快照:釋放鎖,然後複製數據
注意:
InnoDB有一個問題:flush和lock tables後,數據庫還可能有數據操做,好比沒有commit的事物
因此要確保數據徹底寫入磁盤後才能進行快照
ibback,商業工具
extrabackup,開源工具
網絡備份工具
porconna-tool
四 mysqldump實現備份
1 備份一個庫
mysqldump DB_NAME [tb1] [tb2]
備份單個數據庫,或庫中特定表;恢復時,須要手動建立
數據庫
mysql> LOCK TABLES;
鎖表
mysql> FLUSH TABLES;數據
寫入磁盤
mysql> flush logs;
二進制文件日誌
mysql> show bianry log;顯示二進制日誌
備份:mysqldump -u root -h localhost -p jiaowu > jiaowu_bak.sql
還原:mysql jiaowu < jiaowu_bak.sql
--master-data={0|1|2}
0: 不記錄二進制日誌文件及路位置;
1:以CHANGE MASTER TO的方式記錄位置,可用於恢復後直接啓動從服務器;
2:以CHANGE MASTER TO的方式記錄位置,但默認爲被註釋;
--lock-all-tables:鎖定全部表
--flush-logs: 執行日誌flush;
若是指定庫中的表類型均爲InnoDB,可以使用--single-transaction啓動熱備,不須要鎖表
2 備份多個庫:
--all-databases: 備份全部庫
--databases DB_NAME,DB_NAME,...: 備份指定庫
--events
--routines
--triggers
五 即時點還原
1 備份策略:每週徹底+每日增量
徹底備份:mysqldump
增量備份:備份二進制日誌文件(flush logs)
2 徹底備份
#
mysqldump -u root -p
--flush-logs
--master-data=2 --flush-logs --all-databases --lock-all-tables [--triggers --routines] --events > alldb.sql
時間過去一天
3 增量備份
# cd /data/mysql/
# mysqladmin flush-logs
# mysqlbinlog mysql-bin.000019 > /root/monday-increment.sql
3.1 增量備份
# mysqladmin flush-logs
# mysqlbinlog mysql-bin.000020 > /root/tuesday-increment.sql
4 數據庫損壞mysql沒法啓動
初始化mysql數據庫
4.1 恢復徹底備份
# mysql < alldb.sql
4.2 恢復增量備份便可
4.3 導出最後的二進制日誌並恢復
mysql> mysqlbinlog
mysql-bin.000020
| mysql
說明:清除二進制文件至
mysql> show binary logs;
mysql> purge binary logs to 'mysql-bin.000019';
# mysqladmin flush-logs