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是所有從伺服器已處理的最小編號日誌文件

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dettori 的頭像
    dettori

    Web Design

    dettori 發表在 痞客邦 留言(0) 人氣()