台北市松山區八德路四段666號7樓之3
(02)2528-0119 gsld_sales@gsld.com.tw

認識 MySQL 參數

認識 MySQL 參數

MySQL 的全域(global)參數初始化是透過參數檔進行設置,如果沒有設置參數檔, MySQL 會依照預設值來進行,我們可以透過「mysqld –verbose –help」指令來查看目前所有的參數配置。

參數檔可被放置在多個位置,資料庫啟動時會根據不同順序搜尋(如下圖),如果多個位置都有參數檔,順序靠後中的參數配置會覆蓋順序較前面的參數。
https://ithelp.ithome.com.tw/upload/images/20200921/20129969QJOEjS4lqJ.png

因為我們是使用RPM方式安裝的,my.cnf檔案會自動產生在/etc底下,就讓我們來看一下裡面長怎樣吧!
https://ithelp.ithome.com.tw/upload/images/20200921/20129969g6WpMiH8CV.png

以下我會介紹一些MySQL的參數。

  • 關於目錄及檔案
參數名稱說明
datadirdata目錄放置路徑。
socketsocket檔案放置路徑(供本機使用者連線)
log-error錯誤日誌路徑
pid-filepid file放置路徑(供server紀錄process ID)
plugin-dir指定plugin目錄
  • binlog參數

binlog(二進制日誌):當資料有變動時,指令都會被記錄在裡面,可以用來做MySQL Replication和還原資料庫。因為Binlog是二進位制檔案,所以無法直接打開檢視,必須要透過mysqlbinlog。
補充:MySQL8.0之前,binlog預設是沒有被打開的。

參數名稱說明
log-binbinlog檔案位置
expire-logs-day設置binlog保留天數
binlog-format設置binlog紀錄格式

binlog format分為三種格式row、statement、mixed。

row:只要有資料變更,每一行都會被記錄下來,所以內容會非常清楚,但有可能產生大量內容,若是執行alter table更改表結構,基本上是變動了整張表格,產生的日誌量更為驚人。

statement:當資料被修改時,當時下達的sql指令會被記錄 ,減少了binlog的日誌量,節省I/O。

mixed:MySQL會根據每一條SQL指令區分紀錄的日誌格式(statement or row),

是不是有點複雜,看看以下範例會比較明瞭哦!
EX: update test set id=5 where name=’andy’;
原始資料(如圖)
https://ithelp.ithome.com.tw/upload/images/20200921/20129969xyCBTQoDcG.png

如果是採row格式,就會出現三條紀錄,因為整張表裡有三個Andy,但如果是statement格式,只會紀錄update test set id=5 where name=’andy’。

  • 慢查詢日誌(slow log)
    用來記錄MySQL運行時間超過設定值的指令,可以幫助我們省去時間,找出執行過慢的指令,進行處理,預設是沒有啟動的,需要手動更改參數開啟。
參數名稱說明
Slow-query-log啟動/關閉慢查詢日誌
Slow-query-log-file慢查詢日誌檔案位置
Long-query-time若超過此設定時間,將會被紀錄
Log-output [file;table]配置要將日誌存放置檔案或是日誌(亦可同時存放)
  • 稽查日誌(Audit Log)

稽查來源是從哪一個IP針對某個資料庫表格,做了哪些動作,或是登入MySQL成功或是失敗的資訊,可以儲存的格式有json、old(舊xml)或new(新XML),但要使用功能必需要是MySQL Enterprise的版本。

參數名稱說明
Audit-log-file設置audit log 位置
Audit-log-format [json;old;newl]設置audit log儲存格式
  • 關於語言配置
參數名稱說明
Character-set-server新的資料庫或表的預設字符集
Collation-server新的資料庫或表的預設排序方式

參考網站:

https://codertw.com/%E8%B3%87%E6%96%99%E5%BA%AB/126313/
http://www.linuxidc.com/Linux/2012-11/74359.htm
https://www.netadmin.com.tw/netadmin/zh-tw/technology/BB40A3DA009A43F780864702D13C42FE?page=2

No Comments Yet.

Leave a comment