mysql配置文件结构_MariaDB/MySQL配置文件my.cnf解读
MariaDB/MySQL的默認(rèn)設(shè)置性能非常差,僅僅起一個(gè)功能測(cè)試的作用,不能用在生產(chǎn)環(huán)境中,因此要對(duì)一些參數(shù)進(jìn)行調(diào)整優(yōu)化。當(dāng)然,對(duì)配置文件各參數(shù)的調(diào)整需要根據(jù)實(shí)際環(huán)境,不同時(shí)期不同數(shù)量級(jí)的數(shù)據(jù)進(jìn)行性能優(yōu)化。
MySQL/MariaDB 配置文件位于 /etc/my.cnf。 每次更改此文件后你需要重啟 MySQL 服務(wù),以使更改生效。本文的參數(shù)配置基于MariaDB 10.2,硬件內(nèi)存4G。文中一些選項(xiàng)值的設(shè)置只是推薦值,不要盲目的接受這些建議。每個(gè) MySQL 設(shè)置都是不同的,在進(jìn)行任何更改之前需要慎重考慮。
基本結(jié)構(gòu)
[client]
port = 3306 #客戶端默認(rèn)連接端口
socket = /tmp/mysql.sock #用于本地連接的socket套接字
[mysqld] # 服務(wù)端基本配置
port = 3306 # mysql監(jiān)聽端口
socket = /tmp/mysql.sock #為MySQL客戶端程序和服務(wù)器之間的本地通訊指定一個(gè)套接字文件
user = mariadb # mysql啟動(dòng)用戶
basedir = /usr/local/mariadb # 安裝目錄
datadir = /data/mysql # 數(shù)據(jù)庫(kù)數(shù)據(jù)文件存放目錄
log_error = /data/mysql/mariadb.err #記錄錯(cuò)誤日志文件
pid-file = /data/mysql/mariadb.pid #pid所在的目錄
skip-external-locking #不使用系統(tǒng)鎖定,要使用myisamchk,必須關(guān)閉服務(wù)器
...
my.cnf配置文件以方括號(hào)如[client]區(qū)分模塊作用域,其中[client]表示客戶端配置,[mysqld]是服務(wù)端配置。以上幾個(gè)選項(xiàng)是最基礎(chǔ)的,每個(gè)選項(xiàng)有簡(jiǎn)單說明,其中有關(guān)路徑的配置是基于本站文章:CentOS7下源碼編譯安裝MariaDB 10.2和Linux下使用二進(jìn)制格式安裝MariaDB的安裝路徑來配置的,所以在配置前可以先按照兩文先安裝好MairaDB。
選項(xiàng)配置及說明
key_buffer_size = 32M 這個(gè)參數(shù)用來緩存MyISAM存儲(chǔ)引擎的索引參數(shù)。MySQL5.5默認(rèn)為InnoDB存儲(chǔ)引擎,所以這個(gè)參數(shù)可以設(shè)置小點(diǎn),64MB即可。
max_allowed_packet = 1M 允許最大接收數(shù)據(jù)包的大小,防止服務(wù)器發(fā)送過大的數(shù)據(jù)包。可以設(shè)置為16MB或者更大,但設(shè)置的太大也可能有危險(xiǎn)。
table_open_cache = 128 #MySQL每打開一個(gè)表,都會(huì)讀入一些數(shù)據(jù)到table_open_cache緩存中,當(dāng)MySQL在這個(gè)緩存中找不到相應(yīng)信息時(shí),才會(huì)去磁盤上讀取。默認(rèn)值64,假定系統(tǒng)有200個(gè)并發(fā)連接,則需將此參數(shù)設(shè)置為200*N(N為每個(gè)連接所需的文件描述符數(shù)目);當(dāng)把table_open_cache設(shè)置為很大時(shí),如果系統(tǒng)處理不了那么多文件描述符,那么就會(huì)出現(xiàn)客戶端失效,連接不上。
sort_buffer_size = 768K 在表進(jìn)行order by和group by排序操作時(shí),由于排序的字段沒有索引,會(huì)出現(xiàn)Using filesort,為了提高性能,可用此參數(shù)增加每個(gè)線程分配的緩沖區(qū)大小。默認(rèn)為256KB,這個(gè)參數(shù)不要設(shè)置過大,一般在128~256KB即可。另外,一般出現(xiàn)Using filesort的時(shí)候,要通過增加索引來解決。
net_buffer_length = 8K 包消息緩沖區(qū)初始化為net_buffer_length字節(jié),但需要時(shí)可以增長(zhǎng)到max_allowed_packet字節(jié)。
read_buffer_size = 768K 該參數(shù)用于表的順序掃描,表示每個(gè)線程分配的緩沖區(qū)大小。比如在進(jìn)行全表掃描時(shí),MySQL會(huì)按照數(shù)據(jù)的存儲(chǔ)順序依次讀取數(shù)據(jù)塊,每次讀取的數(shù)據(jù)塊首先會(huì)暫存在read_buffer_size中,當(dāng)buffer空間被寫滿或者全部數(shù)據(jù)讀取結(jié)束后,再將buffer中的數(shù)據(jù)返回給上層調(diào)用者,以提高效率。默認(rèn)為128K,這個(gè)參數(shù)不要設(shè)置過大,一般在128~256之間。
read_rnd_buffer_size = 512K 該參數(shù)用于表的隨機(jī)讀取,表示每個(gè)線程分配的緩沖區(qū)大小。比如,按照一個(gè)非索引字段做order by排序操作時(shí),就會(huì)利用這個(gè)緩沖區(qū)來暫存讀取的數(shù)據(jù)。默認(rèn)為256KB,這個(gè)參數(shù)不要設(shè)置過大,一般在128~512KB。
myisam_sort_buffer_size = 8M 當(dāng)對(duì)MyISAM表執(zhí)行repair table或創(chuàng)建索引時(shí),用以緩存排序索引;設(shè)置太小時(shí)可能會(huì)遇到” myisam_sort_buffer_size is too small”
thread_cache_size = 16 線程池,線程緩存。用來緩存空閑的線程,以至于不被銷毀,如果線程緩存在的空閑線程,需要重新建立新連接,則會(huì)優(yōu)先調(diào)用線程池中的緩存,很快就能響應(yīng)連接請(qǐng)求。每建立一個(gè)連接,都需要一個(gè)線程與之匹配。
query_cache_size = 16M 緩存select語(yǔ)句和結(jié)果集大小的參數(shù)。查詢緩存會(huì)存儲(chǔ)一個(gè)select查詢的文本與被傳送到客戶端的相應(yīng)結(jié)果。如果之后接收到一個(gè)相同的查詢,服務(wù)器會(huì)從查詢緩存中檢索結(jié)果,而不是再次分析和執(zhí)行這個(gè)同樣的查詢。如果你的環(huán)境中寫操作很少,讀操作頻繁,那么打開query_cache_type=1,會(huì)對(duì)性能有明顯提升。如果寫操作頻繁,則應(yīng)該關(guān)閉它(query_cache_type=0)。
tmp_table_size = 32M 臨時(shí)HEAP數(shù)據(jù)表的最大長(zhǎng)度(默認(rèn)設(shè)置是32M); 超過這個(gè)長(zhǎng)度的臨時(shí)數(shù)據(jù)表將被轉(zhuǎn)換為MyISAM數(shù)據(jù)表并存入一個(gè)臨時(shí)文件。
explicit_defaults_for_timestamp = true 是否顯示默認(rèn)時(shí)間戳
#skip-networking
max_connections = 500 該參數(shù)用來設(shè)置最大連接數(shù),告訴你當(dāng)前你的服務(wù)器允許多少并發(fā)連接。默認(rèn)為100,一般設(shè)置為512-1000即可。請(qǐng)記住,太多的連接會(huì)導(dǎo)致內(nèi)存的使用量過高并且會(huì)鎖住你的 MySQL 服務(wù)器。一般小網(wǎng)站需要 100-200 的連接數(shù),而較大可能需要 500-800 甚至更多。這里的值很大程度上取決于你 MySQL/MariaDB 的使用情況。
max_connect_errors = 100 如果有時(shí)網(wǎng)絡(luò)抽風(fēng),或者應(yīng)用配置錯(cuò)誤,或者其他原因?qū)е驴蛻舳硕虝r(shí)間內(nèi)不斷的嘗試連接,客戶端可能會(huì)被列入黑名單,然后將無法連接,直到再次刷新主機(jī)緩存。這個(gè)選項(xiàng)默認(rèn)值太小了,可以考慮設(shè)的足夠大(如果你的服務(wù)器配置夠強(qiáng)大的話)。
open_files_limit = 65535 mysql打開最大文件數(shù)
log-bin=mysql-bin 這些路徑相對(duì)于datadir
binlog_format=mixed 日志格式
server-id = 1 給服務(wù)器分配一個(gè)獨(dú)一無二的ID編號(hào); n的取值范圍是1~2的32次方啟用二進(jìn)制日志功能。在復(fù)制數(shù)據(jù)同步的時(shí)候會(huì)用到,Helloweba后面會(huì)有文章介紹。
expire_logs_days = 10 啟用二進(jìn)制日志后,保留日志的天數(shù)。服務(wù)器會(huì)自動(dòng)清理指定天數(shù)前的日志文件,如果不設(shè)置則會(huì)導(dǎo)致服務(wù)器空間耗盡。一般設(shè)置為7~14天。
default_storage_engine = InnoDB 新數(shù)據(jù)表的默認(rèn)存儲(chǔ)引擎(默認(rèn)設(shè)置是MyISAM)。這項(xiàng)設(shè)置還可以通過–default-table-type選項(xiàng)來設(shè)置。
innodb_file_per_table = 1 InnoDB 提供了更靈活的方式,它把每個(gè)數(shù)據(jù)庫(kù)的信息保存在一個(gè) .ibd 數(shù)據(jù)文件中。每個(gè) .idb 文件代表它自己的表空間。通過這樣的方式可以更快地完成類似 “TRUNCATE” 的數(shù)據(jù)庫(kù)操作,當(dāng)刪除或截?cái)嘁粋€(gè)數(shù)據(jù)庫(kù)表時(shí),你也可以回收未使用的空間。這樣配置的另一個(gè)好處是你可以將某些數(shù)據(jù)庫(kù)表放在一個(gè)單獨(dú)的存儲(chǔ)設(shè)備。這可以大大提升你磁盤的 I/O 負(fù)載。
innodb_data_home_dir = /data/mysql InnoDB主目錄,所有與InnoDB數(shù)據(jù)表有關(guān)的目錄或文件路徑都相對(duì)于這個(gè)路徑。在默認(rèn)的情況下,這個(gè)主目錄就是MySQL的數(shù)據(jù)目錄。
innodb_data_file_path = ibdata1:10M:autoextend 用來容納InnoDB為數(shù)據(jù)表的表空間: 可能涉及一個(gè)以上的文件; 每一個(gè)表空間文件的最大長(zhǎng)度都必須以字節(jié)(B)、兆字節(jié)(MB)或千兆字節(jié)(GB)為單位給出; 表空間文件的名字必須以分號(hào)隔開; 最后一個(gè)表空間文件還可以帶一個(gè)autoextend屬性和一個(gè)最大長(zhǎng)度(max:n)。
innodb_log_group_home_dir = /data/mysql 用來存放InnoDB日志文件的目錄路徑(如ib_logfile0、ib_logfile1等)。在默認(rèn)的情況下,InnoDB驅(qū)動(dòng)程序?qū)⑹褂?MySQL數(shù)據(jù)目錄作為自己保存日志文件的位置。
innodb_buffer_pool_size = 128M 這個(gè)參數(shù)是InnoDB存儲(chǔ)引擎的核心參數(shù),默認(rèn)為128KB,這個(gè)參數(shù)要設(shè)置為物理內(nèi)存的60%~70%。
innodb_log_file_size = 32M 事務(wù)日志文件寫操作緩存區(qū)的最大長(zhǎng)度(默認(rèn)設(shè)置是1MB)。
innodb_log_buffer_size = 8M 事務(wù)日志所使用的緩存區(qū)。InnoDB在寫事務(wù)日志的時(shí)候,為了提高性能,先將信息寫入Innodb Log Buffer中,當(dāng)滿足innodb_flush_log_trx_commit參數(shù)所設(shè)置的相應(yīng)條件(或者日志緩沖區(qū)寫滿)時(shí),再將日志寫到文件(或者同步到磁盤)中。可以通過innodb_log_buffer_size參數(shù)設(shè)置其可以使用的最大內(nèi)存空間。默認(rèn)是8MB,一般為16~64MB即可。
innodb_flush_log_at_trx_commit = 1 這個(gè)選項(xiàng)決定著什么時(shí)候把日志信息寫入日志文件以及什么時(shí)候把這些文件物理地寫(術(shù)語(yǔ)稱為”同步”)到硬盤上。設(shè)置值0的意思是每隔一秒寫一次日 志并進(jìn)行 同步,這可以減少硬盤寫操作次數(shù),但可能造成數(shù)據(jù)丟失; 設(shè)置值1(設(shè)置設(shè)置)的意思是在每執(zhí)行完一條COMMIT命令就寫一次日志并進(jìn)行同步,這可以防止數(shù)據(jù)丟失,但硬盤寫操作可能會(huì)很頻繁; 設(shè)置值2是一般折衷的辦法,即每執(zhí)行完一條COMMIT命令寫一次日志,每隔一秒進(jìn)行一次同步。
innodb_lock_wait_timeout = 50 如果某個(gè)事務(wù)在等待n秒(s)后還沒有獲得所需要的資源,就使用ROLLBACK命令放棄這個(gè)事務(wù)。這項(xiàng)設(shè)置對(duì)于發(fā)現(xiàn)和處理未能被InnoDB數(shù)據(jù)表驅(qū)動(dòng) 程序識(shí)別出來的死鎖條件有著重要的意義。這個(gè)選項(xiàng)的默認(rèn)設(shè)置是50s。
示例:內(nèi)存4G的my.cnf配置
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
user = mariadb
basedir = /usr/local/mariadb
datadir = /data/mysql
log_error = /data/mysql/mariadb.err
pid-file = /data/mysql/mariadb.pid
skip-external-locking
key_buffer_size = 64M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
net_buffer_length = 8K
read_buffer_size = 1M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 16M
thread_cache_size = 32
query_cache_size = 32M
tmp_table_size = 64M
explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_data_home_dir = /data/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/mysql
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 1M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
總結(jié)
以上是生活随笔為你收集整理的mysql配置文件结构_MariaDB/MySQL配置文件my.cnf解读的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《暗黑破坏神:不朽》即将上线:主战役20
- 下一篇: 30万、2.0T以下购置税减半!多家车企