1. 程式人生 > 其它 >MySQL——日誌管理

MySQL——日誌管理

一、MySQL日誌型別
1、錯誤:--log--error      ---------------------***
           host_name.err

2、常規: --general_log     
          host_name.log   general_log

3、慢速查詢: --slow_query_log    --long_query_time      ---------------------***
              host_name-slow.log  slow_log

4、二進位制: --log-bin    --expire-logs-days     ---------------------***
             host_name-bin.000001

5、審計: --audit_log   --audit_log_file
          audit.log


二、MySQL日誌配置
        (1)錯誤日誌
        [mysqld]
        log-error=/data/mysql/mysql.log

        檢視配置:
                show variables like '%log%error%';

        作用:
                記錄MySQL資料庫的一般狀態資訊和報錯資訊,是我們對於資料庫常規報錯處理的常用日誌。


        (2)一般查詢日誌
        [mysqld]
        general_log=on
        general_log_file=路徑

        作用:
                記錄所有執行成功的SQL語句資訊。

        檢視方式:
                show variables like '%gen%';


        (3)二進位制日誌(依賴於SQL層,不依賴於儲存引擎)(不記錄select,只記錄變化)
         1、記錄已經執行完成的語句和已經完成的事務
         
         2、功能:備份和時間點恢復、主從
         
         3、二進位制日誌的控制和操作:
                    a: 開啟二進位制日誌:
                            vim /etc/my.cnf
                            
                            [mysqld]
                            log-bin=“datadir”/mysql-bin(檔名字首)(不寫路徑預設是datadir下)

         
                    b: 定義記錄方式:
                            statement: 記錄執行的語句

                            row(推薦):以行模式記錄---->記錄所有行的變化日誌
                            
                            mixed:
        
                    c: 設定:
                            vim /etc/my.cnf
                            
                            [mysqld]
                            log-bin=“datadir”/mysql-bin
                            binlog-format=row

                    d: 操作:
                            1)檢視二進位制日誌:
                                --檢視檔案本身:
                                        --作業系統層面檢視:
                                                    ls -l
                                                    重啟資料庫的時候、執行flush命令的時候會滾動----生成新的檔案重新記錄
                                        --mysql命令列中檢視:
                                                    show master status;----檢視當前正在使用的二進位制日誌
                                                    show binary logs;----檢視所有存在的二進位制日誌


                                --檢視檔案內容:
                                        ---- 事件events: 命令的最小發生單元

                                        ---- 事件的位置號position: 每個事件在二進位制檔案中的相對位置號就是position號

                                        ---- 檢視二進位制日誌內容:
                                                --檢視所有內容:
                                                        進入目錄下:
                                                            mysqlbinlog mysql-bin.000003
                                                --擷取內容:
                                                        1 show master status;
                                                        2 show binlog events in 'mysql-bin.000003' ;                                                      
                                                        3 mysqlbinlog --start-position=120 --stop-position=339 mysql-bin.000003
                                                       
                                                        匯出:mysqlbinlog --start-position=120 --stop-position=339 mysql-bin.000003 >/tmp/inc.sql
                                                      
                                                        4 匯出的內容可以用來恢復:
                                                                1)使用source
                                                                2)使用 <
                            2)刪除二進位制日誌:
                                    在配置檔案中加上過期時間: SET GLOBAL expire_logs_days=30;(天)
                                    或者:
                                    PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
                                    根據檔名刪除日誌:
                                    PURGE BINARY LOGS TO 'mysql-bin.0000010';





        (4)慢查詢日誌
            1、功能:記錄所有條件內的慢的SQL語句
            2、作用:定位問題的工具日誌

            3、控制:
                vim /etc/my.cnf

                [mysqld]
                slow_query_log=on ------------------------------開啟
                slow_query_log_file=/data/slow.log -------------定義檔案
                long_query_time=10 -----------------------------超過30秒為操作慢的語句
                min_examined_row_limit=10-----------------------查詢檢查返回少於該引數指定行的SQL語句不被記錄到慢日誌
                log_queries_not_using_indexes-------------------不使用索引的慢查詢日誌是否記錄到索引

            4、處理:
                mysqldumpslow -s c -t 10 /database/mysql/slow-log
                        輸出記錄次數最多的10條SQL語句,其中:
                        -s: 表示按照何種方式排序,c t l r分別為按照記錄次數、時間、查詢時間、返回的記錄數來排序,
                            ac  at  al  ar為相應的倒敘

                        -t: 返回前面多少條的資料

                        -g: 後邊可以接正則匹配模式,大小寫不敏感