MYSQL日誌檔案維護

2021-04-17 07:21:54 字數 3202 閱讀 9879

mysql伺服器啟動時,它檢查其命令列的操作,來檢視它是否應該執行登入並開啟相應的日誌檔案(如果應該的話)。可以讓伺服器生成兩種主要型別的日誌檔案:

常規日誌檔案。它報告客戶機的連線、查詢和其他各種各樣的事件。它對於跟蹤伺服器的活動很有用:誰正在連線、從**連線,以及他們正在做什麼。

更新日誌。它報告修改資料庫的查詢。在此上下文中的術語「更新」不只涉及update語句,還涉及修改資料庫的所有語句。由於這個原因,它包含了對d e l e t e、insert、replace、create table、drop table、grant 和revoke 的查

詢記錄。更新日誌的內容以sql 語句的形式書寫,這些語句用作對

mysql的輸入。如果在崩潰後必須恢復表的話,更新日誌與備份是很有用的。您可以從備份檔案中恢復資料庫,然後通過將更新日誌作為對

mysql的輸入,重新執行在該備份檔案之後又修改資料庫的任何查詢。這樣,可將表恢復到崩潰時刻的狀態。

為了使日誌有效,可使用--log 選項開啟常規日誌,並用--log-update 選項開啟更新日誌。可以在

mysqld.safe_

mysqld 或

mysql.server 的命令列中,或在某個選項的[

mysqld] 組中指定這些選項。當日誌有效時,日誌檔案在預設時被寫到伺服器的資料目錄中。

筆者建議在首次使用

mysql時應使兩種日誌型別都有效。在獲得一些使用

mysql的經驗後,可能會只用更新日誌來對付,以便減少磁碟空間的需求。

在使日誌有效後,要確保不用大量的日誌資訊將磁碟填滿,尤其是如果伺服器正在處理大量的查詢話。可使用日誌檔案迴圈和截止時間,在避免日誌檔案無邊界地增長的同時保持最近的幾個日誌是聯機可用的。

日誌檔案迴圈工作如下。假定日誌檔名為l o g。在第乙個迴圈中, log 被重新命名為l o g . 0,且伺服器開始寫新的l o g檔案。在第二次迴圈中, log.0 被重新命名為l o g . 1,log 重新命名為l o g . 0,伺服器開始寫另乙個新的log 檔案。這樣,每個檔案迴圈通過名字l o g . 0、l o g . 1,等等。當檔案到達迴圈的某一點時,可以終止它。

更新日誌和load data 語句

通常,當伺服器執行load date 語句時,它只將該語句本身而不是被載入的行內容寫到更新日誌中。這意味著除非該資料檔案仍然保持可訪問,否則使用更新日誌的恢復操作將是不完整的。為了確保這一點的安全,除非資料庫已經備份,否則不應該刪除資料檔案。

系統備份

mysql資料目錄」

例如,如果您每天都迴圈日誌,並且想保持一周的日誌,則應保留log.0 到l o g . 6。在下乙個迴圈中,將通過令log.5 覆蓋log.6 使其成為新的log.6 來終止l o g . 6。這樣,您就可以保留許多日誌而又避免了它們超過磁碟的限度。

日誌迴圈頻率和保持的舊日誌數量將依賴於伺服器的繁忙程度(活動的伺服器產生更多的日誌資訊)以及您希望為舊日誌投入多少磁碟空間。當迴圈常規日誌時,可以用

mysqla d - min flush-logs 命令告訴伺服器關閉當前的日誌檔案並開啟新的日誌檔案。

執行常規日誌迴圈的指令碼類似如下(可修改它來反映您的日誌基名和資料目錄的位置,或許還有希望保留的舊日誌的數量):

最好從mysqladm 賬號中執行此指令碼以確保日誌檔案屬於那個使用者。如果在.my.cnf 選項檔案中保留連線引數,您不需要在該指令碼的

mysqladmin 命令中指定任何引數。如果您不這樣做的話可以建立乙個受限使用者,它除了發布重新整理命令外什麼也不做。然後可以以最小的風險在該指令碼中放置這個使用者的口令。如果想這樣做,則該使用者應只有reload 許可權。例如,要想呼叫使用者flush 並分配乙個口令f l us h pass,可使用下列grant 語句:

grant reload on *.* to flush@localhost identifiedby "flushpass"

當需要在指令碼中執行重新整理操作時,可以這樣做:

mysqladmin -uflush -pflushpass flush -logs

在linux 中,最好用logrotate 來安裝

mysql分發包中的

mysql- log - rotate 指令碼,而不是自己編寫指令碼。如果

mysql-log-rotate 不通過rpm 檔案自動安裝,應檢視

mysql分發包的support-files 目錄。

由於伺服器處理更新日誌檔案的方法不同,日誌檔案的迴圈在更新日誌與常規日誌之間稍有不同。如果告訴伺服器使用沒有副檔名的更新日誌檔名(如up date),則伺服器將使用順序的up date . 0 0 1、update.002 等自動建立更新日誌檔名。在伺服器啟動以及在日誌重新整理時,乙個新的更新日誌產生。如果您開啟更新日誌而沒有指定檔名,伺服器則使用主機名作為基名產生乙個更新日誌檔案的序列。

當終止乙個由這種方法生成的檔案序列時,您或許想要根據其期限(最後被修改的時間)而非根據名字來終止它們。這樣做的理由是由於您不知道flush-log 命令將在何時發布,因此您不能指望在任何給定的時間週期內建立固定數量的更新日誌。例如,如果用

mysqldump 備份表並使用--flush-logs 選項,在該更新日誌名序列中的乙個新檔案隨每個備份一同建立。

對於帶有由伺服器自動產生的順序檔名的更新日誌,基於日誌期限的終止指令碼類似如下:

find 命令定位並刪除修改時間超過乙個星期的更新日誌檔案。重要的是使用-name 引數來對乙個數字的副檔名進行測試,以避免刪除由錯誤的update 所指定的表。

還可以告訴伺服器使用固定的更新日誌檔名(如果希望的話),如果想用與常規日誌相同的方法迴圈更新日誌,這是有用的。要想使用固定的更新日誌名,應指定乙個包含副檔名的名字。例如,可以用--log-update=update.log 選項啟動伺服器來使用名字up date . l o g。伺服器將一直關閉並在接收flush-logs 命令時開啟該日誌,但是伺服器並不是每次都產生新的檔案。在這種情況下,用於更新日誌的日誌迴圈指令碼和用於常規日誌的指令碼僅在迴圈的檔案基名上有所不同。

如果想自動執行日誌迴圈和終止,可使用c r o n。假定迴圈常規日誌和更新日誌的指令碼為rotate-logs 和r o t a t e - up date - l o g s,且安裝在/usr/user/

mysql/bin 目錄中。以

mysqlladm 使用者進行註冊,然後用以下命令編輯

mysqladm 使用者的crontab 檔案:

% crontab -e

這個項告訴cron 在每天早上4 點執行此指令碼。您可以改變時間或按需要進行排程。有關說明請參見crontab 的人工頁。

MYSQL日誌檔案維護

在mysql伺服器啟動時,它檢查其命令列的操作,來檢視它是否應該執行登入並開啟相應的日誌檔案 如果應該的話 可以讓伺服器生成兩種主要型別的日誌檔案 常規日誌檔案。它報告客戶機的連線 查詢和其他各種各樣的事件。它對於跟蹤伺服器的活動很有用 誰正在連線 從 連線,以及他們正在做什麼。更新日誌 它報告修改...

資料庫PostrageSQL 日誌檔案維護

把資料庫伺服器的日誌輸出儲存在乙個地方是個好主意,而不是僅僅通過 dev null丟棄它們。在進行問題診斷的時候,日誌輸出是非常寶貴的。不過,日誌輸出可能很龐大 特別是在比較高的除錯級別上 因此你不會希望無休止地儲存它們。你需要輪轉日誌檔案,這樣在一段合理的時間後會開始新的日誌檔案並且移除舊的。如果...

innodb引擎redo檔案維護

如果要對innodb的redo日誌檔案的大小與個數進行調整可以採用如下步驟 1 關閉mysql mysqladmin h127.0.0.1 p3306 uroot p shutdown 2 修改配置檔案中的innodb log file size innodb log files in group ...