mysql備份與恢復

Mysql的備份工具備mysql

實踐:sql

1、使用mysqldump備份。(該條備份能夠在數據量不大狀況下在線重導數據,亦能夠修復主從同步,由於備份出來的sql文件中記錄有binglog和post值)數據庫

mysqldump -uxxx -h127.0.0.1 -pxxx -R --triggers  --single-transaction --flush-logs --master-data --database xxx xxx xxx > xxx.sql 服務器

-R : 導出數據庫的存儲過程和函數app

--triggers :爲每一個轉儲的錶轉儲觸發器。該選項默認啓用;用--skip-triggers禁用它。函數

 --single-transaction:從服務器轉儲數據以前發出一個BEGIN SQL語句。適用於事務表,例如InnoDB和BDB,由於而後它將在發出BEGIN而沒有阻塞任何應用程序時轉儲一致的數據庫狀態。工具

 --flush-logs --master-data :開始轉儲前刷新MySQL服務器日誌文件,若是你想要同時轉儲和刷新日誌,應使用--flush-logs連同--master-data。post

二:使用xtrabackup備份及數據恢復rest

Xtrabackup是一個對InnoDB作數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。
    Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
  (1)xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
  (2)innobackupex-1.5.1則封裝了xtrabackup,是一個腳本封裝,因此能同時備份處理innodb和myisam,但在處理myisam時須要加一個讀鎖日誌

環境:CentOS 5.4,xtrabackup-1.6.tar.gz

一、首先從http://www.percona.com/下載
       wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6/Linux/binary/i686/xtrabackup-1.6.tar.gz    

二、檢查服務器是否安裝了Mysql版本,若是沒有就要安裝好mysql
   my.cnf中必須有     datadir         = /usr/local/mysql/var

三、開始安裝xtrabackup
     1)解壓     
         cd /opt
         tar zxvf xtrabackup-1.6.tar.gz 
     2)拷貝innobackupex、xtrabackup、xtrabackup_51 工具到/usr/bin
        cp xtrabackup-1.6/bin/innobackupex /usr/bin/innobackupex
        cp xtrabackup-1.6/bin/xtrabackup  /usr/bin/xtrabackup
        cp xtrabackup-1.6/bin/xtrabackup_51  /usr/bin/xtrabackup_51

四、備份並打包壓縮
      innobackupex --user=xxx --password=xxx --port=3306  --database=xxx --stream=tar +備份目錄 2>> /opt/innobackupex.log | gzip > xxx.sql.tar.gz 
      說明:
      --database=x單獨對某個庫備份,如果不添加此參數那就那就是對全庫作備份
      2>> /opt/innobackupex.log    輸出信息寫入日誌中
      gzip > xxx.sql.tar.gz      打包壓縮存儲到該文件中

五、恢復數據
      1) 先中止數據庫:service mysqld stop
      2) 解壓 tar -izxvf xxx.tar.gz -C datadir目錄
      3) 恢復

xtrabackup --prepare --target-dir=datadir目錄

innobackupex-1.5.1 --apply-log datadir目錄
      4) 賦權 chown -R mysql.mysql datadir目錄
      5) 重啓數據庫 service mysqld restart
      進入數據庫查看,一切OK~

 

恢復最近一個小時以內的數據,可從bin-log日誌中導出數據:

直接本機導出,例如:導出 "2017-06-06 11:25:56"至"2016-06-06 14:56"的binlog數據:
mysqlbinlog --start-datetime="2017-06-06 11:25:56" --stop-datetime="2016-06-06 14:56" mysql-bin.000012 > 000012.sql

再把全部sql導入到數據庫中
mysql -uxxx -pxxx -h127.0.0.1 -f < 000012.sql

-f, --force //若是有錯誤跳過去,繼續執行下面的 

使用腳本進行天天4點備份。

相關文章
相關標籤/搜索