時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)
在mysql服務(wù)器啟動(dòng)時(shí),它檢查其命令行的操作,來(lái)查看它是否應(yīng)該執(zhí)行登錄并打開相應(yīng)的日志文件(如果應(yīng)該的話)?梢宰尫⻊(wù)器生成兩種主要類型的日志文件:
常規(guī)日志文件。它報(bào)告客戶機(jī)的連接、查詢和其他各種各樣的事件。它對(duì)于跟蹤服務(wù)器的活動(dòng)很有用:誰(shuí)正在連接、從哪里連接,以及他們正在做什么。
更新日志。它報(bào)告修改數(shù)據(jù)庫(kù)的查詢。在此上下文中的術(shù)語(yǔ)"更新"不只涉及UPDATE語(yǔ)句,還涉及修改數(shù)據(jù)庫(kù)的所有語(yǔ)句。由于這個(gè)原因,它包含了對(duì)D E L E T E、INSERT、REPLACE、CREATE TABLE、DROP TABLE、GRANT 和REVOKE 的查
詢記錄。更新日志的內(nèi)容以SQL 語(yǔ)句的形式書寫,這些語(yǔ)句用作對(duì)mysql的輸入。如果在崩潰后必須恢復(fù)表的話,更新日志與備份是很有用的。您可以從備份文件中恢復(fù)數(shù)據(jù)庫(kù),然后通過(guò)將更新日志作為對(duì)mysql的輸入,重新運(yùn)行在該備份文件之后又修改數(shù)據(jù)庫(kù)的任何查詢。這樣,可將表恢復(fù)到崩潰時(shí)刻的狀態(tài)。
為了使日志有效,可使用--log 選項(xiàng)開啟常規(guī)日志,并用--log-update 選項(xiàng)開啟更新日志?梢栽趍ysqld.safe_mysqld 或mysql.server 的命令行中,或在某個(gè)選項(xiàng)的[mysqld] 組中指定這些選項(xiàng)。當(dāng)日志有效時(shí),日志文件在缺省時(shí)被寫到服務(wù)器的數(shù)據(jù)目錄中。
筆者建議在首次使用MySQL時(shí)應(yīng)使兩種日志類型都有效。在獲得一些使用MySQL的經(jīng)驗(yàn)后,可能會(huì)只用更新日志來(lái)對(duì)付,以便減少磁盤空間的需求。
在使日志有效后,要確保不用大量的日志信息將磁盤填滿,尤其是如果服務(wù)器正在處理大量的查詢?cè)?墒褂萌罩疚募h(huán)和截止時(shí)間,在避免日志文件無(wú)邊界地增長(zhǎng)的同時(shí)保持最近的幾個(gè)日志是聯(lián)機(jī)可用的。
日志文件循環(huán)工作如下。假定日志文件名為l o g。在第一個(gè)循環(huán)中, log 被重新命名為l o g . 0,且服務(wù)器開始寫新的l o g文件。在第二次循環(huán)中, log.0 被重命名為l o g . 1,log 重命名為l o g . 0,服務(wù)器開始寫另一個(gè)新的log 文件。這樣,每個(gè)文件循環(huán)通過(guò)名字l o g . 0、l o g . 1,等等。當(dāng)文件到達(dá)循環(huán)的某一點(diǎn)時(shí),可以終止它。
更新日志和LOAD DATA 語(yǔ)句
通常,當(dāng)服務(wù)器執(zhí)行LOAD DATE 語(yǔ)句時(shí),它只將該語(yǔ)句本身而不是被加載的行內(nèi)容寫到更新日志中。這意味著除非該數(shù)據(jù)文件仍然保持可訪問(wèn),否則使用更新日志的恢復(fù)操作將是不完整的。為了確保這一點(diǎn)的安全,除非數(shù)據(jù)庫(kù)已經(jīng)備份,否則不應(yīng)該刪除數(shù)據(jù)文件。
系統(tǒng)備份
更新日志對(duì)于數(shù)據(jù)庫(kù)恢復(fù)并不是任何時(shí)候都好,如果一個(gè)磁盤崩潰導(dǎo)致您失去了更新日志的話,應(yīng)確保您執(zhí)行定期的文件系統(tǒng)備份。將更新日志寫到與存儲(chǔ)數(shù)據(jù)庫(kù)不相同的磁盤中也是一個(gè)好主意。有關(guān)重新加載日志文件的介紹,請(qǐng)參閱第10 章的" MySQL數(shù)據(jù)目錄"
例如,如果您每天都循環(huán)日志,并且想保持一周的日志,則應(yīng)保留log.0 到l o g . 6。在下一個(gè)循環(huán)中,將通過(guò)令log.5 覆蓋log.6 使其成為新的log.6 來(lái)終止l o g . 6。這樣,您就可以保留許多日志而又避免了它們超過(guò)磁盤的限度。
日志循環(huán)頻率和保持的舊日志數(shù)量將依賴于服務(wù)器的繁忙程度(活動(dòng)的服務(wù)器產(chǎn)生更多的日志信息)以及您希望為舊日志投入多少磁盤空間。當(dāng)循環(huán)常規(guī)日志時(shí),可以用mysqla d - min flush-logs 命令告訴服務(wù)器關(guān)閉當(dāng)前的日志文件并打開新的日志文件。
執(zhí)行常規(guī)日志循環(huán)的腳本類似如下(可修改它來(lái)反映您的日志基名和數(shù)據(jù)目錄的位置,或許還有希望保留的舊日志的數(shù)量):
最好從mysqladm 賬號(hào)中運(yùn)行此腳本以確保日志文件屬于那個(gè)用戶。如果在.my.cnf 選項(xiàng)文件中保留連接參數(shù),您不需要在該腳本的mysqladmin 命令中指定任何參數(shù)。如果您不這樣做的話可以建立一個(gè)受限用戶,它除了發(fā)布刷新命令外什么也不做。然后可以以最小的風(fēng)險(xiǎn)在該腳本中放置這個(gè)用戶的口令。如果想這樣做,則該用戶應(yīng)只有RELOAD 權(quán)限。例如,要想調(diào)用用戶flush 并分配一個(gè)口令f l us h pass,可使用下列GRANT 語(yǔ)句:
GRANT RELOAD ON *.* TO flush@localhost IDENTIFIEDBY "flushpass"
當(dāng)需要在腳本中執(zhí)行刷新操作時(shí),可以這樣做:
mysqladmin -uflush -pflushpass flush -logs
在Linux 中,最好用logrotate 來(lái)安裝MySQL分發(fā)包中的mysql- log - rotate 腳本,而不是自己編寫腳本。如果mysql-log-rotate 不通過(guò)RPM 文件自動(dòng)安裝,應(yīng)查看MySQL分發(fā)包的support-files 目錄。
由于服務(wù)器處理更新日志文件的方法不同,日志文件的循環(huán)在更新日志與常規(guī)日志之間稍有不同。如果告訴服務(wù)器使用沒有擴(kuò)展名的更新日志文件名(如up date),則服務(wù)器將使用順序的up date . 0 0 1、update.002 等自動(dòng)創(chuàng)建更新日志文件名。在服務(wù)器啟動(dòng)以及在日志刷新時(shí),一個(gè)新的更新日志產(chǎn)生。如果您開啟更新日志而沒有指定文件名,服務(wù)器則使用主機(jī)名作為基名產(chǎn)生一個(gè)更新日志文件的序列。
當(dāng)終止一個(gè)由這種方法生成的文件序列時(shí),您或許想要根據(jù)其期限(最后被修改的時(shí)間)而非根據(jù)名字來(lái)終止它們。這樣做的理由是由于您不知道flush-log 命令將在何時(shí)發(fā)布,因此您不能指望在任何給定的時(shí)間周期內(nèi)創(chuàng)建固定數(shù)量的更新日志。例如,如果用mysqldump 備份表并使用--flush-logs 選項(xiàng),在該更新日志名序列中的一個(gè)新文件隨每個(gè)備份一同創(chuàng)建。
對(duì)于帶有由服務(wù)器自動(dòng)產(chǎn)生的順序文件名的更新日志,基于日志期限的終止腳本類似如下:
find 命令定位并刪除修改時(shí)間超過(guò)一個(gè)星期的更新日志文件。重要的是使用-name 參數(shù)來(lái)對(duì)一個(gè)數(shù)字的文件擴(kuò)展名進(jìn)行測(cè)試,以避免刪除由錯(cuò)誤的update 所指定的表。
還可以告訴服務(wù)器使用固定的更新日志文件名(如果希望的話),如果想用與常規(guī)日志相同的方法循環(huán)更新日志,這是有用的。要想使用固定的更新日志名,應(yīng)指定一個(gè)包含擴(kuò)展名的名字。例如,可以用--log-update=update.log 選項(xiàng)啟動(dòng)服務(wù)器來(lái)使用名字up date . l o g。服務(wù)器將一直關(guān)閉并在接收f(shuō)lush-logs 命令時(shí)打開該日志,但是服務(wù)器并不是每次都產(chǎn)生新的文件。在這種情況下,用于更新日志的日志循環(huán)腳本和用于常規(guī)日志的腳本僅在循環(huán)的文件基名上有所不同。
如果想自動(dòng)執(zhí)行日志循環(huán)和終止,可使用c r o n。假定循環(huán)常規(guī)日志和更新日志的腳本為rotate-logs 和r o t a t e - up date - l o g s,且安裝在/usr/user/mysql/bin 目錄中。以mysqlladm 用戶進(jìn)行注冊(cè),然后用以下命令編輯mysqladm 用戶的crontab 文件:
% crontab -e
此命令允許編輯當(dāng)前crontab 文件的備份(如果之前沒有這樣做,則它可能為空)。按以下方法將行增加到該文件中:
這個(gè)項(xiàng)告訴cron 在每天早上4 點(diǎn)運(yùn)行此腳本。您可以改變時(shí)間或按需要進(jìn)行調(diào)度。有關(guān)說(shuō)明請(qǐng)參見crontab 的人工頁(yè)。
關(guān)鍵詞標(biāo)簽:文件,維護(hù),日志,入門,
相關(guān)閱讀
熱門文章 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦MySQL常用維護(hù)管理工具Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)MySQL復(fù)制的概述、安裝、故障、技巧、工具
人氣排行 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)Mysql 1045錯(cuò)誤解決辦法10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法MySQL導(dǎo)出導(dǎo)入命令的用例MySQL無(wú)法啟動(dòng)、無(wú)法停止各種解決方法總結(jié)三種常用的MySQL建表語(yǔ)句Mysql清空表的實(shí)現(xiàn)方法