簡介: 本篇文章主要介紹 MySQL 初始化應當注意的參數,對於不一樣環境間實例遷移,這些參數一樣應當注意。html
注: 本文介紹的參數都是在配置文件 [mysqld] 部分。mysql
server_id
和 log_bin
,binlog_format
這幾個系統變量一般成對出現,當咱們想指定log_bin
選項時,必須也要指定server_id
。sql
log_bin
是全局變量 不可動態修改 默認爲OFF。當咱們須要開啓binlog時,可將該參數設爲binlog名字或絕對路徑加名字。數據庫
binlog_format
指定binlog格式 5.7.7版本以上默認是ROW模式緩存
建議設置:安全
#server_id 各個實例建議設置不一樣 log_bin不指定路徑時默認在數據文件目錄 server_id = 213306 log_bin = mysqlbin binlog_format = row 或者 server_id = 213306 log_bin = /data/mysql/logs/mysqlbin binlog_format = row
sql_mode
該參數控制 MySQL server 在不一樣的SQL模式下運行,對於客戶端發送的請求不一樣的模式會有不一樣的應答。服務器
sql_mode
參數分爲全局和會話級別 能夠動態修改工具
#sql_mode 默認爲: sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION #關於修改和各個模式的做用 可參考官方文檔: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
該參數建議去掉ONLY_FULL_GROUP_BY,具體採用嚴格或非嚴格模式能夠根據需求來修改。注意該參數在不一樣實例要保持一致,否則可能會出現一條sql在此環境下能夠執行 在另一個環境不能執行的狀況。測試
max_connections
該參數指定 MySQL 的最大鏈接數,是全局變量 可動態修改 默認爲151。建議設置大些 防止出現鏈接數用滿的錯誤。版本控制
character_set_server
該參數指定 MySQL server端字符集,分爲全局和會話級別 能夠動態修改 5.7版本默認值爲latin1。
建議設置該參數爲utf8或utf8mb4,不一樣實例間保持一致 特別是主從實例。
lower_case_table_names
該參數控制 MySQL 是否大小寫敏感,主要影響庫名及表名。
Linux下該參數默認爲0 即對大小寫敏感,是全局變量 不可動態修改,建議設置爲1。
transaction_isolation
該參數指定 MySQL server 採用哪一種事務隔離級別,默認是REPEATABLE-READ 可動態修改。
採用哪一種隔離級別要根據應用要求來選擇,通常可改成READ-COMMITTED,不一樣實例間建議保持一致。
innodb_buffer_pool_size
該參數控制InnoDB緩衝池大小,默認值爲134217728字節(128MB)5.7.5版本以上可動態修改。
緩衝池是緩存數據和索引的地方,儘量大的緩存池將確保使用內存而不是磁盤來進行大多數讀取操做。典型值爲5-6GB(8GB RAM),20-25GB(32GB RAM),100-120GB(128GB RAM),在一個獨立使用的數據庫服務器上,你能夠設置這個變量到服務器物理內存大小的80%。
innodb_log_file_size
該參數定義redo日誌組中每一個日誌文件的大小(以字節爲單位),是全局變量 不可動態修改 默認爲48M。
當MySQL server 讀寫比較頻繁時,建議增大該參數 可與 innodb_log_files_in_group
參數配合使用。
innodb_io_capacity
和 innodb_io_capacity_max
innodb_io_capacity
參數設置InnoDB後臺任務每秒執行的IO操做數的上限,默認值爲200 可動態修改。
此參數應設置爲系統每秒大約可執行的IO操做數 即系統的IOPS。該值取決於你的系統配置。
當MySQL server 寫操做特多 刷新髒頁落後時 , innodb_io_capacity_max
參數是後臺任務定義每秒執行的IO操做數的上限,innodb_io_capacity_max一般設置爲innodb_io_capacity的2倍。
若是MySQL服務器是SSD高速磁盤,咱們能夠設置 innodb_io_capacity_max= 6000 和 innodb_io_capacity = 3000 (最大值的50%)。固然 運行sysbench或任何其餘基準測試工具來對磁盤吞吐量進行基準測試是個好主意。
除了上面列舉的參數 還有些其餘參數須要注意 ,篇幅關係 我將其彙總以下:
#禁用全部DNS解析 建議開啓 惟一的限制是GRANT語句必須僅使用IP地址 skip_name_resolve = 1 #MySQL server關閉空閒鏈接等待的秒數 默認爲28800 interactive_timeout = ? wait_timeout = ? #日誌記錄時間與系統保持一致 log_timestamps = SYSTEM #一些日誌相關參數 log_error = error.log slow_query_log = 1 slow_query_log_file = slow.log long_query_time = 3 #binlog日誌刪除策略 單位爲天 默認爲0 及不自動清理 expire_logs_days = 30 #容許master建立function並同步到slave,有潛在的數據安全問題 log_bin_trust_function_creators = 1 #導出文件安全目錄 默認爲空 secure_file_priv = /tmp
總結:
本篇文章介紹了部分MySQL初始化應當注意的參數,給出了相關參數的默認值及是否可動態修改。對於不可動態修改的參數 建議啓動前設置合理,這樣能夠減小後面維護重啓次數。
在你們修改參數以前 請記住如下幾點:
- 一次更改一個設置!這是估計變動是否有益的惟一方法。
- 不容許在配置文件中進行重複設置。若是要跟蹤更改,請使用版本控制。
- 更改前應該在測試環境演練。
- 確保參數位置正確,單位合理,不和其餘參數衝突。
- 不要作天真的數學運算,好比「個人新服務器有2x內存,我只須要將全部值設置爲之前的2倍」。