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