遇到系統出問題時,第一個動作會是去查看系統上的Log紀錄,各種日誌都紀錄著不同用途,透過日誌紀錄的內容能幫助管理者快速判斷問題點,分析Mysql操作狀況與錯誤資訊等,提供在MySQL管理和優化上的重要資訊。
前面有提到MYSQL設定檔my.cnf用來設置Mysql全域參數初始化(EX:開啟功能or調整參數限制&作用),沒有設置會依照預設值運行,所以只要異動到設定檔,需重啟服務配置才會生效喔!
溫馨提醒! 以下參數設定更動皆需重啟Mysql服務來生效作用喔
systemctl restart mysql
首先從預設開啟的錯誤日誌開始,分別了解各日誌紀錄用途與設定 ~
1.錯誤日誌- error log
內容: mysqld服務器(啟動/關閉/運行)期間發生的錯誤,警告與註釋。
EX:擷取error log 一小段關閉mysqld時紀錄的log內容
用途: 查詢mysql服務異常問題&診斷警告。
相關配置: my.cnf設定檔(/etc/mysql/my.cnf)
[mysqld]
#錯誤日誌路徑&檔名
log-error=/var/log/mysql/error.log
2.查詢日誌- general log
內容: 紀錄所有mysql相關SQL操作指令
EX:擷取general log部分內容可以看到從使用者連線登入到對資料做異動的指令通通都會被紀錄到log
用途: 排查錯誤時可能用到(還沒遇過...XD) 或debug期間內有哪些執行語法。
相關配置: my.cnf設定檔(/etc/mysql/my.cnf)
[mysqld]
#general log是否開啟(default:0禁用 / 1啟用)
general_log = 1
#查詢日誌路徑&檔名
general_log_file = /mnt/mysql_data/mysql/general.log
#指定日誌輸出目的地(default:FILE=記錄到general.log / TABLE=紀錄到mysql.general_log表)
log-output=TABLE
內容: 紀錄超過設定秒數執行的SQL語法。
EX: 把long_query_time設定秒數改成0,等於執行語法都會被紀錄到log
相關配置: my.cnf設定檔(/etc/mysql/my.cnf)
[mysqld]
#slow log是否開啟(1啟用/0禁用)
slow-query-log = 1
#慢查詢日誌路徑&檔名
slow_query_log_file=/mnt/mysql_data/mysql/slow.log
#執行超過x秒就紀錄 (EX: 1s)
long_query_time = 1
補充: 在生產環境上不是隨時都能重啟服務的,總不可能為了不是必要到需立即修改的功能而重啟服務 (馬上被抬走...
所以在運行中狀態時部分變數可以透過修改環境變數的方式達到不停機生效的作用。不過要注意使用set修改的變數值重啟後是會失效的。<< 想要永久生效,還是得寫入my.cnf檔 >>
#無需修改my.cnf 依舊能開啟log功能
mysql> SET GLOBAL slow_query_log = 1
簡單介紹一下設定上差異:
區分: 1.全域(GLOBAL)級變數 2.會話(SESSION)級變數
MYSQL官方文件:變數範圍Var Scope & 可否動態變更參數Dynamic
EX:圖中可以看到我們以SESSION級的方式更改。但因為slow_query_log屬於GLOBAL變數級別所以會噴ERROR!以 global方式修改就能將日誌功能關閉~
作用範圍: 以long_query_time來看Both等於2種方式都支援,Yes等於可動態更改。
Example 圖1-0中先開啟2個SESSION連線資料庫 SESSION-1 & SESSION-2,透過左邊SESSION-1使用GLOBAL方式修改long_query_time變數,修改完成後再開啟新連線SESSION-3。
SESSION-1 (左)
起始設定值: 0
參數修改後: SESSION = 0 , GLOBAL = 5
SESSION-2 (中)
起始設定值: 0
參數修改後: SESSION = 0 , GLOBAL = 5
SESSION-3 (右) 新建立的連線
參數修改後: SESSION = 5 , GLOBAL = 5
當變數同時擁有兩個級別,在建立連線時用全域級變數初始化會話級變數,但一旦連線建立之後,全域級不會影響到會話級變數!! 看圖自己做一次馬上就能知道差異囉~
圖.1-0
Example 圖1-1中開啟2個SESSION連線資料庫使用,透過左邊SESSION-1用session方式修改long_query_time變數。
SESSION-1 (左)
起始設定值: 0
參數修改後: SESSION = 5 , GLOBAL = 0
SESSION-2 (右)
起始設定值: 0
參數修改後: SESSION = 0 , GLOBAL = 0
圖.1-1
以上內容目前配置參考:
[client]
#mysql 客戶端連線服務端預設port
port=3306
socket=/mnt/mysql_data/mysql/mysql.sock
[mysqld]
#mysql使用socket方式登陸的sock檔案路徑
socket=/mnt/mysql_data/mysql/mysql.sock
#mysql 資料庫檔案所在目錄
datadir=/mnt/mysql_data/mysql
#錯誤日誌路徑&檔名
log-error=/var/log/mysql/error.log
#mysql服務端預設監聽port
port=3306
# 設定字符集utf8
character_set_server=utf8
#general log是否開啟(1啟用/0禁用)
general_log = 1
#查詢日誌路徑&檔名
general_log_file = /mnt/mysql_data/mysql/general.log
#指定日誌輸出目的地(default: FILE) FILE=寫入general.log , TABLE=寫入mysql.general_log表
log-output=FILE
#slow log是否開啟(1啟用/0禁用)
slow-query-log = 1
#慢查詢日誌路徑&檔名
slow_query_log_file=/mnt/mysql_data/mysql/slow.log
#執行超過x秒就紀錄 (EX: 1s)
long_query_time = 1
今天介紹了幾個MYSQL日誌的不同特點~
下集預告: 一樣分享MYSQL相關日誌但不同的是這些日誌跟資料庫的資料處理與數據恢復有關 !
還有( binlog / redo-log / undo-log / relay-log )後面都會提到....好多