mysql備份和恢複:
1、災難恢複;
2、審計;
3、測試;
備份:目的用于恢複;對備份資料做恢複測試;
備份類型:
根據備份時,資料庫伺服器是否線上:
冷備:cold backup
溫備:warm backup
熱備:hot backup
根據備份的資料集:
完全備份:full backup
部分備份: partial backup
根據備份時的接口(直接備份資料檔案還是通過mysql伺服器導出資料):
實體備份:直接複制(歸檔)資料檔案的備份方式;physical backup
邏輯備份:把資料從庫中提出出來儲存為文本檔案;logical backup
mysqldump
根據備份時是備份整個資料還是僅備份變化的資料:
增量備份:incremental backup
差異備份:differential backup
備份政策:
選擇備份方式
選擇備份時間
考慮到恢複成本
恢複時長
備份成本:
鎖時間
備份時長
備份負載
備份對象:
資料
配置檔案
代碼:存儲過程,存儲函數,觸發器
OS相關的配置檔案,如crontab配置計劃及相關的腳本
跟複制相關的配置;
二進制日志檔案
備份工具:
mysqldump:邏輯備份工具
InnoDB熱備、MyISAM溫備、Aria溫備
備份和恢複過程較慢
mysqldumper: 多線程的mysqldump
很難實作差異或增量備份;
lvm-snapshot:
接近于熱備的工具:因為要先請求全局鎖,而後建立快照,并在建立快照完成後釋放全局鎖;
使用cp、tar等工具進行實體備份;
備份和恢複速度較快;
很難實作增量備份,并且請求全局需要等待一段時間,在繁忙的伺服器上尤其如此;
SELECT clause INTO OUTFILE '/path/to/somefile'
LOAD DATA INFILE '/path/from/somefile'
部分備份工具, 不會備份關系定義,僅備份表中的資料;
邏輯備份工具,快于mysqldump
Innobase: 商業備份工具, innobackup
Xtrabackup: 由Percona提供的開源備份工具
InnoDB熱備,增量備份;
MyISAM溫備,不支援增量;
實體備份,速度快;
mysqlhotcopy: 幾乎冷備
mysqldump:
mysqldump [options] [db_name [tbl_name ...]]
備份單個庫:mysqldump [options] db_name
恢複時:如果目标庫不存在,需要事先手動建立
--all-databases: 備份所有庫
--databases db1 db2 ...: 備份指定的多個庫
注意:備份前要加鎖
--lock-all-tables:請求鎖定所有表之後再備份,對MyISAM、InnoDB、Aria做溫備
--single-transaction: 能夠對InnoDB存儲引擎實作熱備;
備份代碼:
--events: 備份事件排程器代碼
--routines: 備份存儲過程和存儲函數
--triggers:備份觸發器
備份時滾動日志:
--flush-logs: 備份前、請求到鎖之後滾動日志;
複制時的同步位置标記:
--master-data=[0|1|2]
0: 不記錄
1:記錄為CHANGE MASTER語句
2:記錄為注釋的CHANGE MASTER語句
使用mysqldump備份:
請求鎖:--lock-all-tables或使用--singe-transaction進行innodb熱備;
滾動日志:--flush-logs
標明要備份的庫:--databases
記錄二進制日志檔案及位置:--master-data=
恢複:
建議:關閉二進制日志,關閉其它使用者連接配接;
備份政策:基于mysqldump
備份:mysqldump+二進制日志檔案;
周日做一次完全備份:備份的同時滾動日志
周一至周六:備份二進制日志;
恢複:
完全備份+各二進制日志檔案中至此刻的事件
對MySQL配置檔案,以及與MySQL相關的OS配置檔案在每次修改後都應該直接進行備份;
備份步驟:
1、請求全局鎖,并滾動日志
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
2、做二進制日志檔案及位置标記(手動進行);
# mysql -e 'show master status' > /path/to/somefile
3、建立快照卷
# lvcreate -L -s -n -p r /path/to/some_lv
4、釋放全局鎖
mysql> UNLOCK TABLES;
5、挂載快照卷并備份
# cp
6、備份完成之後,删除快照卷
1、二進制日志儲存好;
提取備份之後的所有事件至某sql腳本中;
2、還原資料,修改權限及屬主屬組等,并啟動mysql
3、做即時點還原
mylvbackup: perl腳本,快速基于Lvm備份mysql
xtrabackup:
備份 注意:
1、将資料和備份放在不同的磁盤裝置上;異機或異地備份存儲較為理想;
2、備份的資料應該周期性地進行還原測試;
3、每次災難恢複後都應該立即做一次完全備份;
4、針對不同規模或級别的資料量,要定制好備份政策;
5、二進制日志應該跟資料檔案在不同磁盤上,并周期性地備份好二進制日志檔案;
從備份中恢複應該遵循步驟:
1、停止MySQL伺服器;
2、記錄伺服器的配置和檔案權限;
3、将資料從備份移到MySQL資料目錄;其執行方式依賴于工具;
4、改變配置和檔案權限;
5、以限制通路模式重新開機伺服器;mysqld的--skip-networking選項可跳過網絡功能;
方法:編輯my.cnf配置檔案,添加如下項:
skip-networking
socket=/tmp/mysql-recovery.sock
6、載入邏輯備份(如果有);而後檢查和重放二進制日志;
7、檢查已經還原的資料;
8、重新以完全通路模式重新開機伺服器;
注釋前面在my.cnf中添加的選項,并重新開機;
SELECT clause INTO OUTFILE ''
LOAD DATA INFILE '' INTO TABLE tb_name
本文轉自 zouqingyun 51CTO部落格,原文連結:http://blog.51cto.com/zouqingyun/1690149,如需轉載請自行聯系原作者