天天看點

mysql資料備分與步聚

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,如需轉載請自行聯系原作者