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