MySQL服務(wù)器參數(shù)配置

MySQL運(yùn)行時(shí)的性能與配置參數(shù)有著密切的聯(lián)系,為了保證我們的MySQL服務(wù)高效,就必須對(duì)各項(xiàng)參數(shù)進(jìn)行優(yōu)化。

MariaDB提供了多個(gè)適合不同規(guī)模的配置文件供選擇和參考,位于/usr/share/mysql

[root@localhost ~]# ls /usr/share/mysql/my-*.cnf -l
-rw-r--r--. 1 root root  4920 5月   2 01:18 /usr/share/mysql/my-huge.cnf
-rw-r--r--. 1 root root 20441 5月   2 01:18 /usr/share/mysql/my-innodb-heavy-4G.cnf
-rw-r--r--. 1 root root  4907 5月   2 01:18 /usr/share/mysql/my-large.cnf
-rw-r--r--. 1 root root  4920 5月   2 01:18 /usr/share/mysql/my-medium.cnf
-rw-r--r--. 1 root root  2846 5月   2 01:18 /usr/share/mysql/my-small.cnf
[root@localhost ~]#

1. 內(nèi)存配置參數(shù)

1.1 配置MySQL可以使用的內(nèi)存上限
1.2 配置每個(gè)MySQL連接(線程)使用的內(nèi)存
# 排序緩沖區(qū)
sort_buffer_size
# 連接查詢緩沖區(qū)
join_buffer_size
# 對(duì)MyISAM進(jìn)行全表掃描時(shí)的讀緩沖區(qū)
read_buffer_size
# 索引緩沖區(qū)
read_rnd_buffer_size
1.3 為緩存池分配內(nèi)存
# innodb緩存池:總內(nèi)存-(每個(gè)線程內(nèi)存*連接數(shù))-系統(tǒng)保留內(nèi)存;經(jīng)驗(yàn)值為服務(wù)器內(nèi)存的75%
Innodb_buffer_pool_size
# MyISAM緩存池:即使數(shù)據(jù)庫表全部為InnoDB,也要分配此緩存池(因?yàn)镸ySQL系統(tǒng)表依然使用MyISAM引擎)
key_buffer_size
# 以下sql可以查看
mysql> select sum(index_length) from information_schema.tables where engine = 'myisam'\G;

2. IO配置參數(shù)

2.1 InnoDB
# 事務(wù)日志文件大?。ㄈ绻麡I(yè)務(wù)繁忙,建議事務(wù)日志文件大小設(shè)置大些)
Innodb_log_file_size
# 事務(wù)日志文件數(shù)量
Innodb_log_files_in_group
# 事務(wù)日志緩沖區(qū),不需要太大,32M-128M足夠了(事務(wù)日志不是直接寫入磁盤文件)
Innodb_log_buffer_size
# 事務(wù)日志刷新頻率
#   0:每秒從緩沖區(qū)將log寫入操作系統(tǒng)cache,并flush log到磁盤
#   1:每次提交事務(wù),從緩沖區(qū)將log寫入操作系統(tǒng)cache,并flush log到磁盤(默認(rèn))
#   2:每次提交事務(wù),從緩沖區(qū)將log寫入操作系統(tǒng)cache,每秒flush log到磁盤(建議)
Innodb_flush_log_at_trx_commit
# InnoDB數(shù)據(jù)文件和日志文件刷新方式
Innodb_flush_method=O_DIRECT(不緩存,直接寫入存儲(chǔ)設(shè)備,避免雙重緩存)
# 設(shè)為1,InnoDB為每個(gè)表建立單獨(dú)的表空間
Innodb_file_per_table=1(強(qiáng)烈建議)
# 雙寫緩沖,避免數(shù)據(jù)頁沒有寫完整造成數(shù)據(jù)損壞,增加安全性
Innodb_doublewrite=1
2.2 MyISAM
# 延遲刷新關(guān)鍵字緩沖中的臟塊到磁盤文件
# OFF:每次寫操作后刷新鍵緩沖中的臟塊到磁盤
# ON:只對(duì)制定了delay_key_write的表使用延遲刷新
# ALL:對(duì)所有表使用延遲刷新
delay_key_write

3. 安全配置參數(shù)

# 自動(dòng)清理binlog日志的天數(shù)(至少覆蓋兩次全備間隔的天數(shù))
expire_logs_days
# MySQL可以接受的包的大小 (建議32M左右)
max_allow_packet
# 禁用DNS查找(此時(shí)應(yīng)使用ip授權(quán),或者對(duì)MySQL服務(wù)器host中出現(xiàn)的域名授權(quán))
skip_dns_resolve
# 確保sysdate()返回確定性日期
sysdate_is_now
# 禁止非super權(quán)限用戶寫操作(建議在從庫中啟用)
read_only
# 禁止slave重啟后自動(dòng)復(fù)制(建議在從庫啟用)
skip_slave_start
# MySQL使用的sql模式
sql_mode

4. 其它配置參數(shù)

# MySQL何時(shí)向磁盤刷新binlog
# 0:不主動(dòng)刷新,操作系統(tǒng)決定何時(shí)刷新(默認(rèn)為0)
# n:沒n次寫操作,向磁盤刷新binlog(建議Master設(shè)為1)
sync_binlog
# 控制內(nèi)存臨時(shí)表大?。ㄔO(shè)為一致,不要太大)
tmp_table_size和max_heap_table_size
# MySQL允許的最大連接數(shù)(默認(rèn)為100,建議1000、2000...)
max_connections

最后,MySQL服務(wù)器參數(shù)配置應(yīng)綜合考慮硬件環(huán)境、操作系統(tǒng)以及業(yè)務(wù)場景等多種因素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容