MySQL設置裝備擺設文件my.cnf參數優化和中文詳解。本站提示廣大學習愛好者:(MySQL設置裝備擺設文件my.cnf參數優化和中文詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL設置裝備擺設文件my.cnf參數優化和中文詳解正文
Mysql參數優化關於老手來說,是比擬難明的器械,其實這個參數優化,是個很龐雜的器械,關於分歧的網站,及其在線量,拜訪量,帖子數目,收集情形,和機械硬件設置裝備擺設都有關系,優化弗成能一次性完成,須要赓續的不雅察和調試,才有能夠獲得最好後果。
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1 #表現是本機的序號為1,普通來說就是master的意思
skip-name-resolve
# 制止MySQL對內部銜接停止DNS解析,應用這一選項可以清除MySQL停止DNS解析的時光。但須要留意,假如開啟該選項,
# 則一切長途主機銜接受權都要應用IP地址方法,不然MySQL將沒法正常處置銜接要求
#skip-networking
back_log = 600
# MySQL能有的銜接數目。當重要MySQL線程在一個很短時光內獲得異常多的銜接要求,這就起感化,
# 然後主線程花些時光(雖然很短)檢討銜接而且啟動一個新線程。back_log值指出在MySQL臨時停滯答復新要求之前的短時光內若干個要求可以被存在客棧中。
# 假如希冀在一個短時光內有許多銜接,你須要增長它。也就是說,假如MySQL的銜接數據到達max_connections時,新來的要求將會被存在客棧中,
# 以期待某連續接釋放資本,該客棧的數目即back_log,假如期待銜接的數目跨越back_log,將不被授與銜接資本。
# 別的,這值(back_log)限於您的操作體系對到來的TCP/IP銜接的偵聽隊列的年夜小。
# 你的操作體系在這個隊列年夜小上有它本身的限制(可以檢討你的OS文檔找出這個變量的最年夜值),試圖設定back_log高於你的操作體系的限制將是有效的。
max_connections = 1000
# MySQL的最年夜銜接數,假如辦事器的並發銜接要求量比擬年夜,建議調高此值,以增長並行銜接數目,固然這樹立在機械能支持的情形下,由於假如銜接數越多,介於MySQL會為每一個銜接供給銜接緩沖區,就會開支越多的內存,所以要恰當調劑該值,不克不及自覺進步設值。可以過'conn%'通配符檢查以後狀況的銜接數目,以決議確定該值的年夜小。
max_connect_errors = 6000
# 關於統一主機,假如有超越該參數值個數的中止毛病銜接,則該主機將被制止銜接。如需對該主機停止解禁,履行:FLUSH HOST。
open_files_limit = 65535
# MySQL翻開的文件描寫符限制,默許最小1024;當open_files_limit沒有被設置裝備擺設的時刻,比擬max_connections*5和ulimit -n的值,哪一個年夜用哪一個,
# 當open_file_limit被設置裝備擺設的時刻,比擬open_files_limit和max_connections*5的值,哪一個年夜用哪一個。
table_open_cache = 128
# MySQL每翻開一個表,都邑讀入一些數據到table_open_cache緩存中,當MySQL在這個緩存中找不到響應信息時,才會去磁盤上讀取。默許值64
# 假定體系有200個並發銜接,則需將此參數設置為200*N(N為每一個銜接所需的文件描寫符數量);
# 當把table_open_cache設置為很年夜時,假如體系處置不了那末多文件描寫符,那末就會湧現客戶端掉效,銜接不上
max_allowed_packet = 4M
# 接收的數據包年夜小;增長該變量的值非常平安,這是由於僅當須要時才會分派額定內存。例如,僅當你收回長查詢或MySQLd必需前往年夜的成果行時MySQLd才會分派更多內存。
# 該變量之所以取較小默許值是一種預防辦法,以捕捉客戶端和辦事器之間的毛病信息包,並確保不會因有時應用年夜的信息包而招致內存溢出。
binlog_cache_size = 1M
# 一個事務,在沒有提交的時刻,發生的日記,記載到Cache中;比及事務提交須要提交的時刻,則把日記耐久化到磁盤。默許binlog_cache_size年夜小32K
max_heap_table_size = 8M
# 界說了用戶可以創立的內存表(memory table)的年夜小。這個值用來盤算內存表的最年夜行數值。這個變量支撐靜態轉變
tmp_table_size = 16M
# MySQL的heap(聚積)表緩沖年夜小。一切結合在一個DML指令內完成,而且年夜多半結合乃至可以不消暫時表便可以完成。
# 年夜多半暫時表是基於內存的(HEAP)表。具有年夜的記載長度的暫時表 (一切列的長度的和)或包括BLOB列的表存儲在硬盤上。
# 假如某個外部heap(聚積)表年夜小跨越tmp_table_size,MySQL可以依據須要主動將內存中的heap表改成基於硬盤的MyISAM表。還可以經由過程設置tmp_table_size選項來增長暫時表的年夜小。也就是說,假如調高該值,MySQL同時將增長heap表的年夜小,可到達進步聯接查詢速度的後果
read_buffer_size = 2M
# MySQL讀入緩沖區年夜小。對表停止次序掃描的要求將分派一個讀入緩沖區,MySQL會為它分派一段內存緩沖區。read_buffer_size變量掌握這一緩沖區的年夜小。
# 假如對表的次序掃描要求異常頻仍,而且你以為頻仍掃描停止得太慢,可以經由過程增長該變量值和內存緩沖區年夜小進步其機能
read_rnd_buffer_size = 8M
# MySQL的隨機讀緩沖區年夜小。當按隨意率性次序讀取行時(例如,依照排序次序),將分派一個隨機讀緩存區。停止排序查詢時,
# MySQL會起首掃描一遍該緩沖,以免磁盤搜刮,進步查詢速度,假如須要排序年夜量數據,可恰當調高該值。但MySQL會為每一個客戶銜接發放該緩沖空間,所以應盡可能恰當設置該值,以免內存開支過年夜
sort_buffer_size = 8M
# MySQL履行排序應用的緩沖年夜小。假如想要增長ORDER BY的速度,起首看能否可讓MySQL應用索引而不是額定的排序階段。
# 假如不克不及,可以測驗考試增長sort_buffer_size變量的年夜小
join_buffer_size = 8M
# 結合查詢操作所能應用的緩沖區年夜小,和sort_buffer_size一樣,該參數對應的分派內存也是每銜接獨享
thread_cache_size = 8
# 這個值(默許8)表現可以從新應用保留在緩存中線程的數目,當斷開銜接時假如緩存中還有空間,那末客戶真個線程將被放到緩存中,
# 假如線程從新被要求,那末要求將從緩存中讀取,假如緩存中是空的或許是新的要求,那末這個線程將被從新創立,假如有許多新的線程,
# 增長這個值可以改良體系機能.經由過程比擬Connections和Threads_created狀況的變量,可以看到這個變量的感化。(–>表現要調劑的值)
# 依據物理內存設置規矩以下:
# 1G —> 8
# 2G —> 16
# 3G —> 32
# 年夜於3G —> 64
query_cache_size = 8M
#MySQL的查詢緩沖年夜小(從4.0.1開端,MySQL供給了查詢緩沖機制)應用查詢緩沖,MySQL將SELECT語句和查詢成果寄存在緩沖區中,
# 往後關於異樣的SELECT語句(辨別年夜小寫),將直接從緩沖區中讀取成果。依據MySQL用戶手冊,應用查詢緩沖最多可以到達238%的效力。
# 經由過程檢討狀況值'Qcache_%',可以曉得query_cache_size設置能否公道:假如Qcache_lowmem_prunes的值異常年夜,則注解常常湧現緩沖不敷的情形,
# 假如Qcache_hits的值也異常年夜,則注解查詢緩沖應用異常頻仍,此時須要增長緩沖年夜小;假如Qcache_hits的值不年夜,則注解你的查詢反復率很低,
# 這類情形下應用查詢緩沖反而會影響效力,那末可以斟酌不消查詢緩沖。另外,在SELECT語句中參加SQL_NO_CACHE可以明白表現不應用查詢緩沖
query_cache_limit = 2M
#指訂單個查詢可以或許應用的緩沖區年夜小,默許1M
key_buffer_size = 4M
#指定用於索引的緩沖區年夜小,增長它可獲得更利益理的索引(對一切讀和多重寫),到你能累贅得起那樣多。假如你使它太年夜,
# 體系將開端換頁而且真的變慢了。關於內存在4GB閣下的辦事器該參數可設置為384M或512M。經由過程檢討狀況值Key_read_requests和Key_reads,
# 可以曉得key_buffer_size設置能否公道。比例key_reads/key_read_requests應當盡量的低,
# 至多是1:100,1:1000更好(上述狀況值可使用SHOW STATUS LIKE 'key_read%'取得)。留意:該參數值設置的過年夜反而會是辦事器全體效力下降
ft_min_word_len = 4
# 分詞辭匯最小長度,默許4
transaction_isolation = REPEATABLE-READ
# MySQL支撐4種事務隔離級別,他們分離是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如沒有指定,MySQL默許采取的是REPEATABLE-READ,ORACLE默許的是READ-COMMITTED
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30 #跨越30天的binlog刪除
log_error = /data/mysql/mysql-error.log #毛病日記途徑
slow_query_log = 1
long_query_time = 1 #慢查詢時光 跨越1秒則為慢查詢
slow_query_log_file = /data/mysql/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1 #不辨別年夜小寫
skip-external-locking #MySQL選項以免內部鎖定。該選項默許開啟
default-storage-engine = InnoDB #默許存儲引擎
innodb_file_per_table = 1
# InnoDB為自力表空間形式,每一個數據庫的每一個表都邑生成一個數據空間
# 自力表空間長處:
# 1.每一個表都有自已自力的表空間。
# 2.每一個表的數據和索引都邑存在自已的表空間中。
# 3.可以完成單表在分歧的數據庫中挪動。
# 4.空間可以收受接管(除drop table操作處,表空不克不及自已收受接管)
# 缺陷:
# 單表增長過年夜,如跨越100G
# 結論:
# 同享表空間在Insert操作上少有優勢。其它都沒自力表空間表示好。當啟用自力表空間時,請公道調劑:innodb_open_files
innodb_open_files = 500
# 限制Innodb能翻開的表的數據,假如庫裡的表特殊多的情形,請增長這個。這個值默許是300
innodb_buffer_pool_size = 64M
# InnoDB應用一個緩沖池來保留索引和原始數據, 不像MyISAM.
# 這裡你設置越年夜,你在存取內外面數據時所須要的磁盤I/O越少.
# 在一個自力應用的數據庫辦事器上,你可以設置這個變量到辦事器物理內存年夜小的80%
# 不要設置過年夜,不然,因為物理內存的競爭能夠招致操作體系的換頁波動.
# 留意在32位體系上你每一個過程能夠被限制在 2-3.5G 用戶層面內存限制,
# 所以不要設置的太高.
innodb_write_io_threads = 4
innodb_read_io_threads = 4
# innodb應用後台線程處置數據頁上的讀寫 I/O(輸出輸入)要求,依據你的 CPU 核數來更改,默許是4
# 注:這兩個參數不支撐靜態轉變,須要把該參數參加到my.cnf裡,修正完後重啟MySQL辦事,許可值的規模從 1-64
innodb_thread_concurrency = 0
# 默許設置為 0,表現不限制並發數,這裡推舉設置為0,更好去施展CPU多核處置才能,進步並發量
innodb_purge_threads = 1
# InnoDB中的消除操作是一類按期收受接管無用數據的操作。在之前的幾個版本中,消除操作是主線程的一部門,這意味著運轉時它能夠會梗塞其它的數據庫操作。
# 從MySQL5.5.X版本開端,該操作運轉於自力的線程中,並支撐更多的並發數。用戶可經由過程設置innodb_purge_threads設置裝備擺設參數來選擇消除操作能否應用單
# 獨線程,默許情形下參數設置為0(不應用零丁線程),設置為 1 時表現應用零丁的消除線程。建議為1
innodb_flush_log_at_trx_commit = 2
# 0:假如innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日記文件到磁盤,提交事務的時刻不做任何操作(履行是由mysql的master thread線程來履行的。
# 主線程中每秒會將重做日記緩沖寫入磁盤的重做日記文件(REDO LOG)中。豈論事務能否曾經提交)默許的日記文件是ib_logfile0,ib_logfile1
# 1:當設為默許值1的時刻,每次提交事務的時刻,都邑將log buffer刷寫到日記。
# 2:假如設為2,每次提交事務都邑寫日記,但其實不會履行刷的操作。每秒准時會刷到日記文件。要留意的是,其實不能包管100%每秒必定都邑刷到磁盤,這要取決於過程的調劑。
# 每次事務提交的時刻將數據寫入事務日記,而這裡的寫入僅是挪用了文件體系的寫入操作,而文件體系是有 緩存的,所以這個寫入其實不能包管數據曾經寫入到物理磁盤
# 默許值1是為了包管完全的ACID。固然,你可以將這個設置裝備擺設項設為1之外的值來換取更高的機能,然則在體系瓦解的時刻,你將會喪失1秒的數據。
# 設為0的話,mysqld過程瓦解的時刻,就會喪失最初1秒的事務。設為2,只要在操作體系瓦解或許斷電的時刻才會喪失最初1秒的數據。InnoDB在做恢復的時刻會疏忽這個值。
# 總結
# 設為1固然是最平安的,但機能頁是最差的(絕對其他兩個參數而言,但不是不克不及接收)。假如對數據分歧性和完全性請求不高,完整可以設為2,假如只最求機能,例如高並發寫的日記辦事器,設為0來取得更高機能
innodb_log_buffer_size = 2M
# 此參數肯定些日記文件所用的內存年夜小,以M為單元。緩沖區更年夜能進步機能,但不測的毛病將會喪失數據。MySQL開辟人員建議設置為1-8M之間
innodb_log_file_size = 32M
# 此參數肯定數據日記文件的年夜小,更年夜的設置可以進步機能,但也會增長恢復毛病數據庫所需的時光
innodb_log_files_in_group = 3
# 為進步機能,MySQL可以以輪回方法將日記文件寫到多個文件。推舉設置為3
innodb_max_dirty_pages_pct = 90
# innodb主線程刷新緩存池中的數據,使髒數據比例小於90%
innodb_lock_wait_timeout = 120
# InnoDB事務在被回滾之前可以期待一個鎖定的超時秒數。InnoDB在它本身的鎖定表中主動檢測事務逝世鎖而且回滾事務。InnoDB用LOCK TABLES語句留意到鎖定設置。默許值是50秒
bulk_insert_buffer_size = 8M
# 批量拔出緩存年夜小, 這個參數是針對MyISAM存儲引擎來講的。實用於在一次性拔出100-1000+筆記錄時, 進步效力。默許值是8M。可以針對數據量的年夜小,翻倍增長。
myisam_sort_buffer_size = 8M
# MyISAM設置恢復表之時應用的緩沖區的尺寸,當在REPAIR TABLE或用CREATE INDEX創立索引或ALTER TABLE進程中排序 MyISAM索引分派的緩沖區
myisam_max_sort_file_size = 10G
# 假如暫時文件會變得跨越索引,不要應用疾速排序索引辦法來創立一個索引。正文:這個參數以字節的情勢給出
myisam_repair_threads = 1
# 假如該值年夜於1,在Repair by sorting進程中並行創立MyISAM表索引(每一個索引在本身的線程內)
interactive_timeout = 28800
# 辦事器封閉交互式銜接前期待運動的秒數。交互式客戶端界說為在mysql_real_connect()中應用CLIENT_INTERACTIVE選項的客戶端。默許值:28800秒(8小時)
wait_timeout = 28800
# 辦事器封閉非交互銜接之前期待運動的秒數。在線程啟動時,依據全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,
# 取決於客戶端類型(由mysql_real_connect()的銜接選項CLIENT_INTERACTIVE界說)。參數默許值:28800秒(8小時)
# MySQL辦事器所支撐的最年夜銜接數是有下限的,由於每一個銜接的樹立都邑消費內存,是以我們願望客戶端在銜接到MySQL Server處置完響應的操作後,
# 應當斷開銜接並釋放占用的內存。假如你的MySQL Server有年夜量的閒置銜接,他們不只會白白消費內存,並且假如銜接一向在累加而赓續開,
# 終究確定會到達MySQL Server的銜接下限數,這會報'too many connections'的毛病。關於wait_timeout的值設定,應當依據體系的運轉情形來斷定。
# 在體系運轉一段時光後,可以經由過程show processlist敕令檢查以後體系的銜接狀況,假如發明有年夜量的sleep狀況的銜接過程,則解釋該參數設置的過年夜,
# 可以停止恰當的調劑小些。要同時設置interactive_timeout和wait_timeout才會失效。
[mysqldump]
quick
max_allowed_packet = 16M #辦事器發送和接收的最年夜包長度
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M