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