MySQL MyISAM和InNodb備份與恢復技巧
該選項用于轉儲大的表。它強制mysqldump從服務器一次一行地檢索表中的行而不是檢索所有行并在輸出前將它緩存到內存中。
· --quote-names,-Q
用‘`’字符引用數據庫、表和列名。如果服務器SQL模式包括ANSI_QUOTES選項,用‘’字符引用名。默認啟用該選項。可以用--skip-quote-names禁用,但該選項應跟在其它選項后面,例如可以啟用--quote-names的--compatible。
· --result-file=file,-r file
將輸出轉向給定的文件。該選項應用在Windows中,因為它禁止將新行‘/n’字符轉換為‘/r/n’回車、返回/新行序列。
· --routines,-R
在轉儲的數據庫中轉儲存儲程序(函數和程序)。使用---routines產生的輸出包含CREATE PROCEDURE和CREATE FUNCTION語句以重新創建子程序。但是,這些語句不包括屬性,例如子程序定義者或創建和修改時間戳。這說明當重載子程序時,對它們進行創建時定義者應設置為重載用戶,時間戳等于重載時間。
如果你需要創建的子程序使用原來的定義者和時間戳屬性,不使用--routines。相反,使用一個具有mysql數據庫相應權限的MySQL賬戶直接轉儲和重載mysql.proc表的內容。
該選項在MySQL 5.1.2中添加進來。在此之前,存儲程序不轉儲。
· --set-charset
將SET NAMES default_character_set加到輸出中。該選項默認啟用。要想禁用SET NAMES語句,使用--skip-set-charset。
· --single-transaction
該選項從服務器轉儲數據之前發出一個BEGIN SQL語句。它只適用于事務表,例如InnoDB和BDB,因為然后它將在發出BEGIN而沒有阻塞任何應用程序時轉儲一致的數據庫狀態。
當使用該選項時,應記住只有InnoDB表能以一致的狀態被轉儲。例如,使用該選項時任何轉儲的MyISAM或HEAP表仍然可以更改狀態。
--single-transaction選項和--lock-tables選項是互斥的,因為LOCK TABLES會使任何掛起的事務隱含提交。
要想轉儲大的表,應結合--quick使用該選項。
· --socket=path,-S path
當連接localhost(為默認主機)時使用的套接字文件。
· --skip--comments
參見---comments選項的描述。
· --tab=path,-T path
產生tab分割的數據文件。對于每個轉儲的表,mysqldump創建一個包含創建表的CREATE TABLE語句的tbl_name.sql文件,和一個包含其數據的tbl_name.txt文件。選項值為寫入文件的目錄。
默認情況,.txt數據文件的格式是在列值和每行后面的新行之間使用tab字符。可以使用--fields-xxx和--行--xxx選項明顯指定格式。
注釋:該選項只適用于mysqldump與mysqld服務器在同一臺機器上運行時。你必須具有FILE權限,并且服務器必須有在你指定的目錄中有寫文件的許可。
· --tables
覆蓋---database或-B選項。選項后面的所有參量被看作表名。
· --triggers
為每個轉儲的表轉儲觸發器。該選項默認啟用;用--skip-triggers禁用它。
· --tz-utc
在轉儲文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同時區的服務器之間轉儲和重載。(不使用該選項,TIMESTAMP列在具有本地時區的源服務器和目的服務器之間轉儲和重載)。--tz-utc也可以保護由于夏令時帶來的更改。--tz-utc默認啟用。要想禁用它,使用--skip-tz-utc。該選項在MySQL 5.1.2中加入。
· --user=user_name,-u user_name
連接服務器時使用的MySQL用戶名。
· --verbose,-v
冗長模式。打印出程序操作的詳細信息。
· --version,-V
顯示版本信息并退出。
· --where='where-condition', -w 'where-condition'
只轉儲給定的WHERE條件選擇的記錄。請注意如果條件包含命令解釋符專用空格或字符,一定要將條件引用起來。
2.2. 文件冷備份
當mysql服務器停止時,通過復制所有表文件(*.frm、*.MYD和*.MYI文件)來備份MyISAM數據庫。
2.3. MyISAM 表恢復
1、 如果是通過mysqldump備份的,就執行:mysql –u root 備份文件名。
2、 如果通過mysqlhotcopy或文件冷/熱拷貝來備份的,停止mysql服務,使用備份文件來覆蓋現有文件。
3、 如果是采用BACKUP TABLE備份的,使用restore table來恢復。因為backup table不會備份索引文件,恢復表注意重建索引。
4、 如果是采用SELECT INTO ...OUTFILE備份的,使用load data恢復數據,也可以使用mysqlimport命令來代替。
3. 日志備份
3.1. 日志備份的好處及如何啟用
日志備份可以支持MyISAM和InnoDB,這跟有些備份工具只支持MyISAM不一樣。
另外,日志可以做增量備份,這是其他方法無法做到的。
啟動日志備份:用--log-bin[=file_name]選項來啟動mysql服務。
3.2. 增量備份
先執行FLUSH LOGS刷新日志,同步日志緩存到磁盤,關閉當前的日志并產生新的日志文件。
拷貝上一次完整備份或增量備份后的一個或一些日志文件到一個安全的地方。
這樣就制作了一個增量備份。
3.3. 日志恢復
日志恢復可以選擇恢復某個數據庫、某些操作點或時間范圍,非常靈活。
通過mysqlbinlog工具可以恢復二進制日志,可以一次恢復多個日志文件,命令如下:
shell> mysqlbinlog [options] hostname-bin.[0-9]* | mysql
mysqlbinlog命令選項
· ---help,-?
顯示幫助消息并退出。
· ---database=db_name,-d db_name
只列出該數據庫的條目(只用本地日志)。
· --force-read,-f
使用該選項,如果mysqlbinlog讀它不能識別的二進制日志事件,它會打印警告,忽略該事件并繼續。沒有該選項,如果mysqlbinlog讀到此類事件則停止。
· --hexdump,-H
評論