MySQL管理與優化(20):備份與恢復

備份與恢復:

  • 備份使得數據庫的中的數據更加高效安全

備份/恢復策略:

進行備份或恢復時須要考慮的一些因素: html

  • 肯定要備份的表的存儲引擎是事務性仍是非事務性,兩種不一樣存儲引擎備份方式在處理數據一致性方面是不太同樣的。
  • 確實使用全量備份仍是增量備份。全備份的優勢是備份保持最新備份,恢復的時候能夠花費更少的時間;缺點是若是數據量過大,將花費不少的時間,並對系統形成較長時間的壓力。增量備份則偏偏相反,只需備份天天的增量日誌,備份時間少,對負載壓力下;缺點是恢復的時候須要全備份加上次備份到故障前的全部日誌,恢復時間會長些。
  • 能夠考慮採起複製的方法來作異地備份,但複製不能代替備份,它對數據庫的誤操做也是無能爲力。
  • 按期作備份,備份的週期要充分考慮系統能夠承受的恢復時間。備份要在系統負載較小的時候進行。
  • 確保MySQL打開log-bin選項,有了BINLOG,MySQL才能夠在必要的時候作完整恢復,或基於時間點的恢復,或基於位置的恢復。
  • 要常常作備份恢復測試,確保備份是有效的,而且是能夠恢復的。

邏輯備份和恢復:

  • 邏輯備份能夠針對不一樣的存儲引擎,而使用相同的方法來備份;而物理備份對於不一樣的存儲引擎會有不一樣的方法。

備份:

  • MySQL中的邏輯備份將數據庫中的數據備份爲一個文本文件,備份的文件能夠查看和編輯。
  • 咱們能夠是使用mysqldump工具實現備份,如:
-- 備份全部數據庫
mysqldump -uroot -p --all-database > all.sql

-- 備份數據庫test
mysqldump -uroot -p test > test.sql

-- 備份數據庫test下的表emp
mysqldump -uroot -p test emp > test_emp.sql

-- 備份數據庫test下的表emp, dept
mysqldump -uroot -p test emp dept > test_emp_dept.sql

-- mysqldump --help可查看更多選項
  • 爲了保證數據備份的一致性,對於MyISAM表備份時須要加上-l參數,對於InnoDB可採用--single-transaction選項。

徹底恢復:

  • 一樣,咱們可使用mysqldump實現簡單的恢復:
-- 恢復某個數據庫
mysql -uroot -p db_name < bakfile

-- 上面的恢復可能不完整,還須要將備份後執行的日誌進行重作
mysqlbinlog binlog-file | mysql -uroot -p db_name

基於時間點恢復:

  • MySQL恢復中分爲徹底恢復非徹底恢復,非徹底恢復分爲基於時間點的恢復和基於位置的恢復。
  • 基於時間點的恢復:
-- 若上午10點發生了誤操做,能夠用下面的語句進行恢復
mysqlbinlog --stop-date="2014-10-06 9:59:59" bin_log_file | mysql -uroot -p****

-- 跳過10點的誤操做,再恢復
mysqlbinlog --start-date="2014-10-06 10:00:01" bin_log_file | mysql -uroot -p****

基於位置恢復:

-- 保存某時間段內的日誌
mysqlbinlog --start-date="2014-10-06 12:10:20" --stop-date="2014-10-06 12:15:00" bin_log_file > temp_file

-- 越過某些位置的日誌,進行恢復,如跳過1000~2000位置的日誌
mysqlbinlog --stop-position="1000" bin_log_file | mysql -uroot -p****
mysqlbinlog --start-position="2000" bin_log_file | mysql -uroot -p****

物理備份和恢復:

  • 物理備份又分爲冷備份熱備份兩種,和邏輯備份相比,優勢是備份和恢復的速度更快。

冷備份:

  • 停掉MySQL服務,在操做系統級別恢復MySQL的數據文件;重啓MySQL服務,使用mysqlbinlog工具恢復備份以來全部的BINLOG。

熱備份:

  • 熱備份須要針對不一樣存儲引擎,主要是MyISAM和InnoDB。
  • MyISAM存儲引擎:
-- 1. 使用mysqlhotcopy工具
mysqlhotcopy -u root -p **** db_name /path/to/new_directory

-- 2. 手動鎖表複製
flush tables for read;
-- 複製數據文件到備份目錄
  • InnoDB存儲引擎:

能夠參考收費工具ibbackup,http://dev.mysql.com/doc/mysql-enterprise-backup/3.7/en/ihb-meb-compatibility.html mysql

表的導入導出:

導出:

  • 有時咱們須要對數據庫表進行導出,以:

        1. 做爲Excel顯示; sql

        2. 爲了節省備份空間數據庫

        3. 爲了快速加載數據,LOAD DATA的加載速度比普通的SQL加載快20倍以上。 安全

  • 能夠有兩種辦法來實現:
-- 使用SELECT ... INTO OUTFILE ...
SELECT * FROM table_name INTO OUTFILE 'file_name' [option];

其中option選項: 工具


NOTE: 
SELECT ... INTO OUTFILE ...產生的輸出文件若是已存在,將會建立失敗,不會覆蓋原文件。

第2種方法是用mysqldump導出: 測試

mysqldump -u username -T target_dir db_name table_name [option]
其中option選項:

導入:

  • 使用LOAD DATA INFILE:
LOAD DATA [LOCAL] INFILE 'file_name' INTO TABLE table_name [option]
其中option選項以下:

  • 使用mysqlimport:
mysqlimport -u root -p*** [--LOCAL] db_name file_name [option]
其中option:

NOTE: 若是導入和導出是跨平臺操做的(Windows和Linux),那麼要注意設置參數line-terminated-by,Windows上設置爲line-terminated-by='\r\n',Linux上設置line-terminated-by='\n'。 spa

不吝指正。 操作系統

相關文章
相關標籤/搜索