top
Loading...
5.9.1.數據庫備份
5.9.1. 數據庫備份

因為MySQL表保存為文件方式,很容易備份。要想保持備份的一致性,對相關表執行LOCK TABLES操作,然后對表執行FLUSH TABLES。參見13.4.5節,“LOCK TABLES和UNLOCK TABLES語法”和13.5.5.2節,“FLUSH語法”。你只需要讀鎖定;這樣當你復制數據庫目錄中的文件時,允許其它客戶繼續查詢表。需要FLUSH TABLES語句來確保開始備份前將所有激活的索引頁寫入硬盤。

如果你想要進行SQL級別的表備份,你可以使用SELECT INTO ...OUTFILEBACKUP TABLE。對于SELECT INTO ...OUTFILE, 輸出的文件不能先存在。對于BACKUP TABLE也如此,因為覆蓋完整的文件會有安全風險。參見13.2.7節,“SELECT語法”和13.5.2.2節,“BACKUP TABLE語法”。

備份數據庫的另一個技術是使用mysqldump程序或mysqlhotcopy腳本。參見8.8節,“mysqldump:數據庫備份程序”和8.9節,“mysqlhotcopy:數據庫備份程序”。

1.    完全備份數據庫:

2.            shell> mysqldump --tab=/path/to/some/dir --opt db_name

或:

shell> mysqlhotcopy db_name /path/to/some/dir

只要服務器不再進行更新,還可以只復制所有表文件(*.frm*.MYD*.MYI文件)mysqlhotcopy腳本使用該方法。(但請注意如果數據庫包含InnoDB表,這些方法不工作。InnoDB不將表的內容保存到數據庫目錄中,mysqlhotcopy只適合MyISAM表)

3.    如果mysqld在運行則停止,然后用--log-bin[=file_name]選項來啟動。參見5.11.3節,“二進制日志”。二進制日志文件中提供了  執行mysqldump之后對數據庫的更改進行復制所需要的信息。

對于InnoDB表,可以進行在線備份,不需要對表進行鎖定;參見8.8節,“mysqldump:數據庫備份程序”。

MySQL支持增量備份:需要用--log-bin選項來啟動服務器以便啟用二進制日志;參見5.11.3節,“二進制日志”。當想要進行增量備份時(包含上一次完全備份或增量備份之后的所有更改),應使用FLUSH LOGS回滾二進制日志。然后,你需要將從最后的完全或增量備份的某個時刻到最后某個點的所有二進制日志復制到備份位置。這些二進制日志為增量備份;恢復時,按照下面的解釋應用。下次進行完全備份時,還應使用FLUSH LOGSmysqlhotcopy --flushlogs回滾二進制日志。參見8.8節,“mysqldump:數據庫備份程序”8.9節,“mysqlhotcopy:數據庫備份程序”

如果MySQL服務器為從復制服務器,則無論選擇什么備份方法,當備份從機數據時,還應備份master.inforelay-log.info文件。恢復了從機數據后,需要這些文件來繼續復制。如果從機執行復制LOAD DATA INFILE命令,你應還備份用--slave-load-tmpdir選項指定的目錄中的SQL_LOAD-*文件。(如果未指定,該位置默認為tmpdir變量值)從機需要這些文件來繼續復制中斷的LOAD DATA INFILE操作。

如果必須恢復MyISAM表,先使用REPAIR TABLEmyisamchk -r來恢復。99.9%的情況下該方法可以工作。如果myisamchk失敗,試試下面的方法。請注意只有用--log-bin選項啟動了MySQL從而啟用二進制日志它才工作;參見5.11.3節,“二進制日志”。

1.    恢復原mysqldump備份,或二進制備份。

2.    執行下面的命令重新更新二進制日志:

3.            shell> mysqlbinlog hostname-bin.[0-9]* | mysql

在某些情況下,你可能只想要從某個位置重新運行某些二進制日志。(通常你想要從恢復備份的日期重新運行所有二進制日志,查詢不正確時例外)。關于mysqlbinlog工具和如何使用它的詳細信息參見8.6節,“mysqlbinlog:用于處理二進制日志文件的實用工具”。

還可以對具體文件進行選擇備份:

·         要想復制表,使用SELECT * INTO OUTFILE 'file_name' FROM tbl_name

·         要想重載表,使用LOAD DATA INFILE 'file_name' REPLACE ...并恢復。要避免復制記錄,表必須有PRIMARY KEY或一個UNIQUE索引。當新記錄復制唯一鍵值的舊記錄時,REPLACE關鍵字可以將舊記錄替換為新記錄。

如果備份時遇到服務器性能問題,可以有幫助的一個策略是在從服務器而不是主服務器上建立復制并執行備份。參見6.1節,“復制介紹”。

如果使用Veritas文件系統,可以這樣備份:

1.    從客戶端程序執行FLUSH TABLES WITH READ LOCK

2.    從另一個shell執行mount vxfs snapshot

3.    從第一個客戶端執行UNLOCK TABLES

4.    從快照復制文件。

5.    卸載快照。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗