MySQL的全域(global)參數初始化是透過參數檔進行設置,如果沒有設置參數檔,MySQL會依照預設值來進行,我們可以透過「mysqld –verbose –help」指令來查看目前所有的參數配置。
參數檔可被放置在多個位置,資料庫啟動時會根據不同順序搜尋(如下圖),如果多個位置都有參數檔,順序靠後中的參數配置會覆蓋順序較前面的參數。
因為我們是使用RPM方式安裝的,my.cnf檔案會自動產生在/etc底下,就讓我們來看一下裡面長怎樣吧!
以下我會介紹一些MySQL的參數。
參數名稱 | 說明 |
---|---|
datadir | data目錄放置路徑。 |
socket | socket檔案放置路徑(供本機使用者連線) |
log-error | 錯誤日誌路徑 |
pid-file | pid file放置路徑(供server紀錄process ID) |
plugin-dir | 指定plugin目錄 |
binlog(二進制日誌):當資料有變動時,指令都會被記錄在裡面,可以用來做MySQL Replication和還原資料庫。因為Binlog是二進位制檔案,所以無法直接打開檢視,必須要透過mysqlbinlog。
補充:MySQL8.0之前,binlog預設是沒有被打開的。
參數名稱 | 說明 |
---|---|
log-bin | binlog檔案位置 |
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’;
原始資料(如圖)
如果是採row格式,就會出現三條紀錄,因為整張表裡有三個Andy,但如果是statement格式,只會紀錄update test set id=5 where name=’andy’。
參數名稱 | 說明 |
---|---|
Slow-query-log | 啟動/關閉慢查詢日誌 |
Slow-query-log-file | 慢查詢日誌檔案位置 |
Long-query-time | 若超過此設定時間,將會被紀錄 |
Log-output [file;table] | 配置要將日誌存放置檔案或是日誌(亦可同時存放) |
稽查來源是從哪一個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