程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 對MySQL備份和恢復的具體描述

對MySQL備份和恢復的具體描述

編輯:MySQL綜合教程

以下的文章主要介紹的是MySQL備份和恢復的實際操作與具體應用,我們大家都知道 MySQL備份和恢復在實際操作中其應用率還是很高的,以下的文章就是對MySQL備份和恢復的實際操作的具體內容的描述。

備份/恢復策略:

1. 要定期做 MySQL備份,並考慮系統可以承受的恢復時間。

2. 確保 MySQL 打開log-bin,有了 binarylog,MySQL才可以在必要的時候做完整恢復,或基於時間點的恢復,或基於位置的恢復。

3. 要經常做備份恢復測試,確保備份是有效的,並且是可以恢復的。

冷備份

備份:

1. 停掉 MySQL服務,在操作系統級別備份 MySQL的數據文件。

2. 重啟 MySQL服務,備份重啟以後生成的 binlog。

恢復:

1. 停掉 MySQL服務,在操作系統級別恢復 MySQL的數據文件。

2. 重啟 MySQL服務,使用 MySQLbinlog恢復自MySQL備份以來的 binlog。

邏輯備份

備份:

1. 選擇在系統空閒時,比如在夜間,使用 MySQLdump –F(flush-logs)備份數據

庫。

  1. MySQLdump –u root –p*** pointcard –F > pointcard.sql 

2. 並備份 MySQLdump開始以後生成的 binlog。

恢復:

1. 停掉應用,執行 MySQL 導入備份文件.

  1. MySQL –u root –p*** pointcard < pointcard.sql 

2. 使用 MySQLbinlog 恢復自MySQLdump 備份以來的binlog。

MySQLbinlog $HOME/data/MySQL-bin.123456 | MySQL -u root –p***

單個表的備份:

備份:

1. 方法 1:

  1. MySQL > select * into outfile ‘/tmp/order_tab’ fields-terminated-by=’,’ from order_tab; 

2. 方法 2:

  1. MySQLdump –u root –p*** –T /tmp pointcard order_tab --fields-terminated-by=’,’; 

恢復:

1. 方法 1:

  1. MySQL > load data [local] infile ‘/tmp/order_tab’ into table order_tab fields-terminated-by=’,’; 

2. 方法 2:

  1. MySQLimport –u root –p*** [--local] pointcatd order_tab.txt --fields-terminated-by=’,’; 

注意:如果導入和導出是跨平台操作的windows和 linux),那麼要注意設置參數line-

terminated-by, windows上設置為 line-terminated-by=’\r\n’,linux上設置為

  1. line-terminated-by=’\n’. 

使用MySQL備份工具ibbackup

ibbackup是 innodb公司www.innodb.com)的一個熱備份工具,專門對 innodb存儲引擎進行物理熱備份,此工具是收費的,不能免費使用。現在innodb 公司已經被oracle收購

使用方法:

編輯用於啟動的配置文件my.cnf和用於備份的配置文件my2.cnf

my.cnf的例子如下:

代碼

  1. [MySQLd]  
  2. datadir = /home/heikki/data   
  3. innodb_data_home_dir = /home/heikki/data  
  4. innodb_data_file_path = ibdata1:10M:autoextend  
  5. innodb_log_group_home_dir = /home/heikki/data  
  6. set-variable = innodb_log_files_in_group=2  
  7. set-variable = innodb_log_file_size=20M  

如果想備份到/home/heikki/backup,則my2.cnf的例子如下:

代碼

  1. [MySQLd]datadir = /home/heikki/backupinnodb_data_home_dir = 

    /home/heikki/backupinnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /home/heikki/backupset-variable = innodb_log_files_in_group=2  
  2. set-variable = innodb_log_file_size=20M  

開始備份ibbackup my.cnf my2.cnf如果需要恢復,則進行日志重做ibbackup --apply-log my2.cnf恢復後重啟數據庫服務./bin/MySQLd_saft --defaults-file=my2.cnf &

時間點恢復:

1. 如果上午 10點發生了誤操作,可以用以下語句用備份和 binglog將數據恢復到故

障前:

  1. MySQLbinlog --stop-date="2005-04-20 9:59:59" 
  2. /var/log/MySQL/bin.123456 | MySQL -u root –pmypwd 

2. 跳過故障時的時間點,繼續執行後面的 binlog,完成恢復

  1. MySQLbinlog --start-date="2005-04-20 10:01:00" 
  2. /var/log/MySQL/bin.123456| MySQL -u root -pmypwd \ 

位置恢復:

和時間點恢復類似,但是更精確,步驟如下:

  1. MySQLbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20  
  2. 10:05:00" /var/log/MySQL/bin.123456 > /tmp/MySQL_restore.sql 

該命令將在/tmp目錄創建小的文本文件,編輯此文件,找到出錯語句前後的位置號 ,例如前後位置號分別是368312 和368315。恢復了以前的MySQL備份文件後,你應從命令行輸入下面內容:

  1. MySQLbinlog --stop-position="368312" /var/log/MySQL/bin.123456 \  
  2. | MySQL -u root -pmypwd  
  3. MySQLbinlog --start-position="368315" /var/log/MySQL/bin.123456 \  
  4. | MySQL -u root -pmypwd \ 

上面的第1 行將恢復到停止位置為止的所有事務。下一行將恢復從給定的起始位置

直到二進制日志結束的所有事務。因為MySQLbinlog 的輸出包括每個SQL 語句記錄

之前的SET TIMESTAMP 語句,恢復的數據和相關MySQL 日志將反應事務執行的原時

間。

MyISAM表修復:

一張損壞的表的症狀通常是查詢意外中斷並且能看到下述錯誤:

? “tbl_name.frm”被鎖定不能更改。

? 不能找到文件“tbl_name.MYI”Errcode:nnn)。

? 文件意外結束。

? 記錄文件被毀壞。

? 從表處理器得到錯誤nnn

解決方法如下:

方法一:

  1. myisamchk -r tablename 

上面的方法幾乎能解決所有問題,如果不行,則使用:

  1. myisamchk -o tablename 

方法二:

  1. 1) CHECK TABLE tbl_name [, tbl_name] ... [option] ...  
  2. option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}  
  3. 2) REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE  
  4. tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]  

以上的相關內容就是對MySQL備份與恢復的介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved