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