MYSQL 網頁設計 技巧
主要有四種日誌文件,分別係常規查詢日誌、慢查詢日誌、變更查詢日誌和二進製變更日誌。呢d日誌文件既創建需在啟動伺服器時用選項指定。
Table 4.3. 日誌啟動選項
--log[=file_name] | 常規日誌文件 |
--log-bin[=file_name] | 二進製變更日誌文件 |
--log-bin-index=file_name | 二進製變更日誌文件索引文件 |
--log-update[=file_name] | 變更日誌文件 |
--log-slow-queries[=file_name] | 慢查詢日誌文件 |
--log-isam[=file_name] | ISAM/MyISAM日誌文件 |
--log-long-format | 設置慢查詢日誌和變更日誌的格式 |
BDB和InnoDB數據表既日誌文件會自動創建不用指定選項。但可用以下選項指時日誌文件既存放路徑。
Table 4.4. BDB和InnoDB數據表日誌選項
--bdb-logdir=dir_name | 存放BDB日誌文件的位置 |
--innodb-log_arch_dir=dir_name | 存放InnoDB日誌文件的歸檔目錄 |
--innodb_log_group_home_dir=dir_name | 存放InnoDB日誌文件的位置 |
MySQL日誌文件選項可在mysqld和mysqld_safe腳本中使用,亦可在選項文件my.cnf[mysqld]中使用。推薦在選項文件中使用,因為每次啟動伺服器日誌選項基本上都係一致。
日誌既刷新可用mysqladmin flush-logs命令或flush logs語句實現。另外,對MySQL伺服器發送一條SIGHUP信號都會刷新日誌。錯誤日誌和DBD/InnoDB日誌唔可以用以上方法刷新。
錯誤日誌記錄MySQL數據庫系統既論斷和出錯資訊,由mysqld_safe腳本創建,文件名默認為hostname.err,亦可通過--err-log或選項文件既err-log語句指定另外的名字。如果直接用mysqld程式啟動伺服器,錯誤資訊會直接輸出到輸出設備,也就是螢幕。但我地可用重定向方法將錯誤資訊輸出到其它地方,如把錯誤資訊輸出到/var/log/mysql.err文件中,可以執行以下語句:
% mysqld > /var/log/mysql.err 2>&1 &
在windows平台下,MySQL伺服器默認把診斷資訊寫到數據目錄既mysql.err文件中,並且唔比另外指定錯誤日誌文件名。如在啟動MySQL伺服器時給出了--console選項,則MySQL會把診斷資訊輸出到控制台窗口而不創建錯誤日誌。但如MySQL係作為一個服務運行,則--console選項唔起作用。
4.5.1. 日誌失效處理
在伺服器正常運行中,會產生大量日誌文件。我們要對呢d日誌文件進行失效管理,以節省磁碟空間和方便查詢。進行日誌失效處理既方式主要有以下幾種:
-
日誌輪轉。該方法適用於常規查詢日誌和慢查詢日誌呢d文件名固定既日誌文件,在日誌輪轉時,應進行日誌刷新操作(mysqladmin flush-logs命令或flush logs語句),以確保緩存在內存中的日誌資訊寫入磁碟;
日誌輪轉既操作過程是咁既:第一次輪轉時,把log更名為log.1,然後伺服器再創建一個新既log文件,在第二輪轉時,再把log.1更名為log.2,把log更名為log.1,然後伺服器再創建一個新既log文件。如此循環,創建一系列既日誌文件。當到達日誌輪轉失效位置時,下次輪轉就唔洗再對它進行更名,直接把最後一個日誌文件覆蓋掉。例如:如果每天進行一次日誌輪轉並想保留最後7天的日誌文件,就要保留log.1--log.7共七個日誌文件,等下次輪轉時,用log.6覆蓋原來既log.7成新既log.7,原來既log.7就自然失效。下面係一個失效處理既shell腳本,以供參考:
#!/bin/sh # shell script --- rotate_log.sh if [ $# -ne 1 ]; then echo "Usage: $0 logname" 1>&2 exit 1 if logfile=$1 mv $logfile.6 $logfile.7 mv $logfile.5 $logfile.6 mv $logfile.4 $logfile.5 mv $logfile.3 $logfile.4 mv $logfile.2 $logfile.3 mv $logfile.1 $logfile.2 mv $logfile $logfile.1 mysqladmin -u flush -pflushpass flush-logs #執行mysqladmin flush-logs會打開一個日誌文件----重新生成一個新的日誌文件
該腳本以日誌文件名為參數,執行方法如下:
% rotate_log.sh /usr/local/mysql/data/log
注意,腳本中的mysqladmin命令係帶有-u和-p參數的,因為我們進行日誌刷新時需連接伺服器。為確保安全,我們建立一個flush用戶,密碼為flushpass。該用戶只有日誌刷新既權限(reload權限)。創建該用戶既語句如下:
GRANT RELOAD ON *.* TO 'flush'@'localhost' IDENTIFIED BY 'fulshpass';
設置好後,我們就可利用系統既自動處理機制定期運行該腳本以生成輪轉日誌。在Linux系統上既MySQL發行版中帶有一個用來安裝mysql-log-rotate日誌輪轉腳本的logrotate工具,如用RPM安裝,則在/usr/share/mysql目錄,如用二進製方式安裝,則在MySQL安裝目錄既support-files目錄,如用源碼安裝,則在安裝目錄的share/mysql目錄中。
在windows平台下,不能在線更名,需停掉伺服器,再進行。下面是一個進行日誌更名的批處理文件:
@echo off REM script name : rotate_log.bat if not "%1" == "" goto ROTATE @echo Usage: rotate_log logname goto DONE :ROTATE set logfile=%1 erase %logfile%.7 rename %logfile%.6 %logfile%.7 rename %logfile%.5 %logfile%.6 rename %logfile%.4 %logfile%.5 rename %logfile%.3 %logfile%.4 rename %logfile%.2 %logfile%.3 rename %logfile%.1 %logfile%.2 rename %logfile% %logfile%.1 :DONE
該腳本的執行方法如下:
c:\rotate_log c:\mysql\data\log
-
以時間為依據對日誌進行失效處理。該方法將定期刪除超過給定時間的日誌文件,適用於變更日誌和二進製日誌等文件名用數字編號標識的日誌文件。下面是一個用Perl寫成的處理腳本:
#!/usr/bin/perl -w # script name: expire_log.pl # Usage: expire_log.pl logfile ... use strict die "Usage: $0 logfile ...\n" if @ARGV == 0; my $max_allowed_age = 7; #max allowed age in days foreach my $file (@ARGV) #chack each argument { unlink ($file) if -e $file && -M $file >= $max_allowed_age; } exit(0);
該腳本需提供一個將被輪轉的日誌文件名作為參數,如:
% expire_log.pl /usr/local/mysql/data/log.[0-9]*
在給腳本參數時請小心,如給出*為參數,則會刪除目錄中所有更新時間大於7天的文件。 -
鏡像機制。把日誌文件鏡像到所有的從伺服器上。要使用鏡像機制,你必須知道主伺服器有多少個從伺服器,哪些正在運行,並需依次連接每一個從伺服器併發出show slave status語句以確定它正處理主伺服器的哪個二進製日誌文件(語句輸出列表的Master_Log_File項),只有所有的從伺服器都不會用到的日誌文件才能刪除。刪除方法是在主伺服器上發出以下語句:
mysql> PURGE MASTER LOGS TO 'last_log.xx';
上面語句中的last_log.xx是所有從伺服器已處理的最小編號日誌文件
留言列表