溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

my.cnf常用配置

發(fā)布時(shí)間:2020-07-15 18:32:29 來(lái)源:網(wǎng)絡(luò) 閱讀:4957 作者:大飛俠大蝦 欄目:MySQL數(shù)據(jù)庫(kù)

自動(dòng)生成cnf配置文件:http://imysql.com/my-cnf-wizard.html


常用配置:


[mysql]字段 

no-auto-rehash  #開(kāi)啟命令補(bǔ)全

[mysqld]字段 

#port = 3306 #默認(rèn)
#bind-address = 0.0.0.0  #默認(rèn)
pid-file =  /data/mysql/mysql.pid
basedir =  /usr/local/mysql/
symbolic-link = 0   
    #等同于skip-symbolic-links,不能使用連接文件,多個(gè)客戶(hù)可能會(huì)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù),因此這防止外部客戶(hù)鎖定 MySQL 服務(wù)器。 該選項(xiàng)默認(rèn)開(kāi)啟
#tmpdir =  /usr/local/mysql/tmp/  
    #此目錄被 MySQL用來(lái)保存臨時(shí)文件.例如,它被用來(lái)處理基于磁盤(pán)的大型排序,如果你不創(chuàng)建非常大的臨時(shí)文件,將其放置到 swapfs/tmpfs 文件系統(tǒng)上也許比較好。另一種選擇是你也可以將其放置在獨(dú)立的磁盤(pán)上.你
    可以使用”;”來(lái)放置多個(gè)路徑,他們會(huì)按照 roud-robin 方法被輪詢(xún)使用.
open_files_limit = 65535
    #MySQL打開(kāi)的文件描述符限制,默認(rèn)最小1024;當(dāng)open_files_limit沒(méi)有被配置的時(shí)候,比較max_connections*5和ulimit-n的值,哪個(gè)大用哪個(gè),
    當(dāng)open_file_limit被配置的時(shí)候,比較open_files_limit和max_connections*5的值,哪個(gè)大用哪個(gè)。
    需要修改服務(wù)腳本,例centos7中/etc/systemd/system/mysql.service在mysql.service中最后一行添加LimitNOFILE=65535重啟服務(wù),修改了mysql.server有可能需要systemctl daemon-reload
    同時(shí)ulimit -n 65535 重啟后失效 所以還需要修改系統(tǒng)配置文件
        修改系統(tǒng)配置文件/etc/security/limits.conf  
        * soft nofile 65535
        * hard nofile 65535
datadir=/data/mysql
log-error = /data/mysql/error.log

slow_query_log=on       #慢查詢(xún)?nèi)罩鞠嚓P(guān)
long_query_time=2       #默認(rèn)10秒
slow_query_log_file=/var/log/mariadb/slow_query.log
log-queries-not-using-indexes      #如果運(yùn)行的SQL語(yǔ)句沒(méi)有使用索引,則mysql數(shù)據(jù)庫(kù)同樣會(huì)將這條SQL語(yǔ)句記錄到慢查詢(xún)?nèi)罩疚募小?#log_output = FILE 
    #參數(shù) log_output 指定了慢查詢(xún)輸出的格式,默認(rèn)為 FILE,你可以將它設(shè)為 TABLE,然后就可以查詢(xún) mysql 架構(gòu)下的 slow_log 表了
socket=/var/lib/mysql/mysql.sock    #該條配置需在[client]段同時(shí)配置,port也要配置。否則可能出錯(cuò)
default_storage_engine=InnoDB
innodb_file_per_table = on     #InnoDB為獨(dú)立表空間模式,每個(gè)數(shù)據(jù)庫(kù)的每個(gè)表都會(huì)生成一個(gè)數(shù)據(jù)空間
innodb_buffer_pool_size=4G     #生產(chǎn)中要改,建議為操作系統(tǒng)內(nèi)存的70%-80%,需重啟服務(wù)生效
skip_name_resolve = on         #忽略主機(jī)名解析,提高訪問(wèn)速度(注意配置文件中使用主機(jī)名將不能解析)
lower_case_table_names = 1     #忽略表單大小寫(xiě)
character-set-server=utf8mb4   #設(shè)定默認(rèn)字符為utf8mb4

1.使用innodb注意事項(xiàng)

a) 所有InnoDB數(shù)據(jù)表都創(chuàng)建一個(gè)和業(yè)務(wù)無(wú)關(guān)的自增數(shù)字型作為主鍵,對(duì)保證性能很有幫助;
b) 杜絕使用text/blob,確實(shí)需要使用的,盡可能拆分出去成一個(gè)獨(dú)立的表;
c) 時(shí)間戳建議使用 TIMESTAMP 類(lèi)型存儲(chǔ);
d) IPV4 地址建議用 INT UNSIGNED 類(lèi)型存儲(chǔ);
e) 性別等非是即非的邏輯,建議采用 TINYINT 存儲(chǔ),而不是 CHAR(1);例可以使用0,1,2來(lái)表示,未知,男,女,優(yōu)點(diǎn)搜索快,缺點(diǎn)顯示/存儲(chǔ)都要轉(zhuǎn)換
f) 存儲(chǔ)較長(zhǎng)文本內(nèi)容時(shí),建議采用JSON/BSON格式存儲(chǔ);

2.查詢(xún)緩存相關(guān)

query_cache_type=1
    #0表示禁用緩存,1表示會(huì)緩存所有的結(jié)果,除非你的select語(yǔ)句使用SQL_NO_CACHE禁用了查詢(xún)緩存,2表示只緩存在select語(yǔ)句中通過(guò)SQL_CACHE指定需要緩存的查詢(xún)
query_cache_limit = 2M  
    #不緩存查詢(xún)大于該值的結(jié)果.只有小于此設(shè)定值的結(jié)果才會(huì)被緩沖,  此設(shè)置用來(lái)保護(hù)查詢(xún)緩沖,防止一個(gè)極大的結(jié)果集將其他所有的查詢(xún)結(jié)果都覆蓋.
query_cache_size = 64M 或32M 或128M
    #此值為0表示未啟用查詢(xún)緩存功能,查看是否支持SHOW VARIABLES LIKE 'have_query_cache';值為yes表示支持查詢(xún)緩存
    
緩存相關(guān)字段意義show status like ‘%Qcache%’; 
    Qcache_free_blocks:表示查詢(xún)緩存中目前還有多少剩余的blocks,如果該值顯示較大,則說(shuō)明查詢(xún)緩存中的內(nèi)存碎片過(guò)多了,可能在一定的時(shí)間進(jìn)行整理。
    Qcache_free_memory  剩余查詢(xún)緩存大小,根據(jù)此值調(diào)整query_cache_size
    Qcache_hits:表示有多少次命中緩存
    Qcache_inserts: 表示多少次未命中然后插入,SQL請(qǐng)求在緩存中未找到,不得不執(zhí)行查詢(xún)處理,執(zhí)行查詢(xún)處理后把結(jié)果insert到查詢(xún)緩存中。這樣的情況的次 數(shù)越多,表示查詢(xún)緩存應(yīng)用到的比較少,效果也就不理想。當(dāng)然系統(tǒng)剛啟動(dòng)后,查詢(xún)緩存是空的
    Qcache_lowmem_prunes:該參數(shù)記錄有多少條查詢(xún)因?yàn)閮?nèi)存不足而被移除出查詢(xún)緩存。通過(guò)這個(gè)值,用戶(hù)可以適當(dāng)?shù)恼{(diào)整緩存大小

3.系統(tǒng)資源相關(guān)

back_log = 500 
    #接受隊(duì)列,對(duì)于沒(méi)建立 tcp 連接的請(qǐng)求隊(duì)列放入緩存中,隊(duì)列大小為 back_log,受限制與OS參數(shù),查看方式cat /proc/sys/net/ipv4/tcp_max_syn_backlog。
    可以編輯/etc/sysctl.conf去調(diào)整它。如:net.ipv4.tcp_max_syn_backlog = 2048,改完后執(zhí)行sysctl -p 讓修改立即生效。試圖設(shè)定 back_log 高于你的操作系統(tǒng)的限制將是無(wú)效的。
    默認(rèn)值為 50。對(duì)于 Linux 系統(tǒng)推薦設(shè)置為小于512的整數(shù)。如果系統(tǒng)在一個(gè)短時(shí)間內(nèi)有很多連接,則需要增大該參數(shù)的值
max_connections = 1000  
    #指定MySQL允許的最大連接進(jìn)程數(shù)。如果在訪問(wèn)數(shù)據(jù)庫(kù)時(shí)經(jīng)常出現(xiàn)"Too Many Connections"的錯(cuò)誤提 示,默認(rèn)100生產(chǎn)則需要增大該參數(shù)值。MySQL服務(wù)器允許的最大連接數(shù)16384

4.二進(jìn)制日志相關(guān)

server_id=1                    
log_bin=master-bin
#log-bin-index=master-bin.index
expire_logs_days = 7
#binlog_format = row    #默認(rèn)為mix,新版中設(shè)為這兩項(xiàng)可提高安全性
#binlog_row_image = minimal
max_binlog_size = 100m   #默認(rèn)是1G
binlog_cache_size = 4m
#binlog-do-db = DBNAME #指定mysql的binlog日志只記錄哪個(gè)庫(kù)
max_binlog_cache_size = 512m  #生產(chǎn)4g
#skip-slave-start #注意:當(dāng)從庫(kù)有數(shù)據(jù)恢復(fù)時(shí),從庫(kù)應(yīng)該關(guān)閉slave進(jìn)程自動(dòng)啟動(dòng)避免數(shù)據(jù)不一致,要在從庫(kù)上手動(dòng)啟動(dòng)。

5.附配置主從相關(guān)操作:

    準(zhǔn)備工作:

        確認(rèn)開(kāi)啟binlog  #show global variables like 'log_bin';

        記錄二進(jìn)制日志文件及編號(hào):show master status;

        主節(jié)點(diǎn)創(chuàng)建有復(fù)制權(quán)限的用戶(hù)賬號(hào)

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.5.%' identified by 'repluser';
flush privileges;


    從節(jié)點(diǎn)配置:

server_id=2
relay_log=relay-log #開(kāi)啟中繼日志
#max_relay_log_size = 200M 
    #標(biāo)記relaylog允許的最大值,如果該值為0,則默認(rèn)值為max_binlog_size(1G);如果不為0,則max_relay_log_size則為最大的relay_log文件大??;
relay_log_index=relay-log.index
read_only=ON   #重啟生效,對(duì)有super或all privileges權(quán)限的用戶(hù)不受限制
#replicate_wild_do_table=DB_NAME.%       #僅復(fù)制某庫(kù)某表,加wild可以使用通配符
#replicate_wild_ignore_table=DB_NAME.%   #忽略復(fù)制某庫(kù)某表。忽略某庫(kù)replicate_ignore_db,或者主節(jié)點(diǎn)指定數(shù)據(jù)庫(kù)不記錄某庫(kù)的binlog,binlog-ignore-db=
#slave_skip_errors=all

        #定義復(fù)制過(guò)程中從服務(wù)器可以自動(dòng)跳過(guò)的錯(cuò)誤號(hào),當(dāng)復(fù)制過(guò)程中遇到定義的錯(cuò)誤號(hào),就可以自動(dòng)跳過(guò),直接執(zhí)行后面的SQL語(yǔ)句。

        slave_skip_errors選項(xiàng)有四個(gè)可用值,分別為:off,all,ErorCode,ddl_exist_errors。

        默認(rèn)情況下該參數(shù)值是off,我們可以列出具體的error code,也可以選擇all,mysql5.6及MySQL Cluster NDB 7.3以及后續(xù)版本增加了參數(shù)ddl_exist_errors,該參數(shù)包含一系列error             code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)

一些error code代表的錯(cuò)誤如下

1007:數(shù)據(jù)庫(kù)已存在,創(chuàng)建數(shù)據(jù)庫(kù)失敗
1008:數(shù)據(jù)庫(kù)不存在,刪除數(shù)據(jù)庫(kù)失敗
1050:數(shù)據(jù)表已存在,創(chuàng)建數(shù)據(jù)表失敗
1051:數(shù)據(jù)表不存在,刪除數(shù)據(jù)表失敗
1054:字段不存在,或程序文件跟數(shù)據(jù)庫(kù)有沖突
1060:字段重復(fù),導(dǎo)致無(wú)法插入
1061:重復(fù)鍵名
1068:定義了多個(gè)主鍵
1094:位置線(xiàn)程ID
1146:數(shù)據(jù)表缺失,請(qǐng)恢復(fù)數(shù)據(jù)庫(kù)
1053:復(fù)制過(guò)程中主服務(wù)器宕機(jī)
1062:主鍵沖突 Duplicate entry '%s' for key %d

    #從相關(guān)操作

        指定主節(jié)點(diǎn)

change master to master_host='192.168.5.106',master_user='repluser',master_password='repluser',master_log_file='master_bin.000002',master_log_pos=343;  #MASTER_PORT=默認(rèn)3306,
start slave [[IO_THREAD|SQL_THREAD] #啟動(dòng)復(fù)制線(xiàn)程  
		檢查:show slave status;如下則正常啟動(dòng)
			Slave_IO_Running=yes
			Slave_SQl_Running=yes
			Seconds_Behind_Master:0   #落后主庫(kù)的秒數(shù),0比較正常
		看從庫(kù)relay-log.info 給sql線(xiàn)程用記錄上一次同步到的位置,一般情況主從切換后,需要reset slave,清除relay-log.info。
		skip-slave-start #注意:當(dāng)從庫(kù)有數(shù)據(jù)恢復(fù)時(shí),從庫(kù)應(yīng)該關(guān)閉slave進(jìn)程自動(dòng)啟動(dòng)避免數(shù)據(jù)不一致,要在從庫(kù)上手動(dòng)啟動(dòng)。

安裝谷歌插件實(shí)現(xiàn)半同步復(fù)制:

Master:
install plugin rpl_semi_sync_master soname 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled =1;
Slave:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; 
SET GLOBAL rpl_semi_sync_slave_enabled =1;
#備庫(kù)而言,為了保證半同步立即生效,需要重啟slave的IO線(xiàn)程


安裝插件后:

master在配置文件添加

rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 #單位是毫秒,默認(rèn)是10000。master等待超時(shí),則切換為普通的異步復(fù)制。

slave添加

rpl_semi_sync_slave_enabled =1



筆者不常使用待發(fā)掘的配置:



[mysqld]

slave-load-tmpdir =  /usr/local/mysql/tmp/   #當(dāng) slave 執(zhí)行 load data infile 時(shí)用
skip-external-locking                        #不使用系統(tǒng)鎖定,要使用 myisamchk,必須關(guān)閉服務(wù)器 ,避免 MySQL的外部鎖定,減少出錯(cuò)幾率增強(qiáng)穩(wěn)定性。
skip-networking 
    #開(kāi)啟該選項(xiàng)可以徹底關(guān)閉 MySQL 的 TCP/IP 連接方式,如果 WEB 服務(wù)器是以遠(yuǎn)程連接的方式訪問(wèn) MySQL 數(shù)據(jù)庫(kù)服務(wù)器則不要開(kāi)啟該選項(xiàng)!否則將無(wú)法正常連接!
    如果所有的進(jìn)程都是在同一臺(tái)服務(wù)器連接到本地的 mysqld, 這樣設(shè)置將是增強(qiáng)安全的方法。
sysdate-is-now = 1 #把SYSDATE 函數(shù)編程為 NOW的別名
default-time-zone = system         #服務(wù)器時(shí)區(qū),或者'+08:00'
default_table_type = InnoDB        #默認(rèn)表類(lèi)型
default-storage-engine = InnoDB    #默認(rèn)存儲(chǔ)引擎


#系統(tǒng)資源相關(guān)

max_connect_errors = 10000  
    #如果某個(gè)用戶(hù)發(fā)起的連接 error 超過(guò)該數(shù)值,則該用戶(hù)的下次連接將被阻塞,直到管理員執(zhí)行 flush hosts命令或者服務(wù)重啟, 防止非法的密碼以及其他在鏈接時(shí)的錯(cuò)誤會(huì)增加此值
connect-timeout = 10 
    #連接超時(shí)之前的最大秒數(shù),在 Linux 平臺(tái)上,該超時(shí)也用作等待服務(wù)器首次回應(yīng)的時(shí)間
wait-timeout = 28800 #等待關(guān)閉連接的時(shí)間
interactive-timeout = 28800 
    #關(guān)閉連接之前,允許 interactive_timeout(取代了wait_timeout)秒的不活動(dòng)時(shí)間??蛻?hù)端的會(huì)話(huà) wait_timeout 變量被設(shè)為會(huì)話(huà)interactive_timeout 變量的值。
    如果前端程序采用短連接,建議縮短這2個(gè)值, 如果前端程序采用長(zhǎng)連接,可直接注釋掉這兩個(gè)選項(xiàng),默認(rèn)配置(8小時(shí))  
slave-net-timeout = 600 
    #從服務(wù)器也能夠處理網(wǎng)絡(luò)連接中斷。但是,只有從服務(wù)器超過(guò)slave_net_timeout 秒沒(méi)有從主服務(wù)器收到數(shù)據(jù)才通知網(wǎng)絡(luò)中斷
net_read_timeout = 30      #從服務(wù)器讀取信息的超時(shí)
net_write_timeout = 60     #從服務(wù)器寫(xiě)入信息的超時(shí)
net_retry_count = 10       #如果某個(gè)通信端口的讀操作中斷了,在放棄前重試多次。
net_buffer_length = 16384  #包消息緩沖區(qū)初始化為 net_buffer_length 字節(jié),但需要時(shí)可以增長(zhǎng)到 max_allowed_packet 字節(jié)
max_allowed_packet = 64M
    #服務(wù)所能處理的請(qǐng)求包的最大大小以及服務(wù)所能處理的最大的請(qǐng)求大小(當(dāng)與大的BLOB 字段一起工作時(shí)相當(dāng)必要), 每個(gè)連接獨(dú)立的大小.大小動(dòng)態(tài)增加。
    設(shè)置最大包,限制server接受的數(shù)據(jù)包大小,避免超長(zhǎng)SQL的執(zhí)行有問(wèn)題 默認(rèn)值為16M,當(dāng)MySQL客戶(hù)端或mysqld服務(wù)器收到大于 max_allowed_packet 字節(jié)的信息包時(shí),
    將發(fā)出“信息包過(guò)大”錯(cuò)誤,并關(guān)閉連接。對(duì)于某些客戶(hù)端,如果通信信息包過(guò)大,在執(zhí)行查詢(xún)期間,可能會(huì)遇到“丟失與 MySQL 服務(wù)器的連接”錯(cuò)誤。默認(rèn)值 16M。
table_cache = 512 
    # 所有線(xiàn)程所打開(kāi)表的數(shù)量. 增加此值就增加了mysqld所需要的文件描述符的數(shù)量這樣你需要確認(rèn)在[mysqld_safe]中 “open-files-limit” 變量設(shè)置打開(kāi)文件數(shù)量允許至少4096
thread_stack = 192K 
    # 線(xiàn)程使用的堆大小. 此容量的內(nèi)存在每次連接時(shí)被預(yù)留.MySQL 本身常不會(huì)需要超過(guò) 64K 的內(nèi)存如果你使用你自己的需要大量堆的 UDF 函數(shù)或者你的操作系統(tǒng)對(duì)于某些操作需要更多的堆,
    你也許需要將其設(shè)置的更高一點(diǎn).默認(rèn)設(shè)置足以滿(mǎn)足大多數(shù)應(yīng)用
thread_cache_size = 20 
    #在 cache 中保留多少線(xiàn)程用于重用.當(dāng)一個(gè)客戶(hù)端斷開(kāi)連接后,如果 cache 中的線(xiàn)程還少于 thread_cache_size,則客戶(hù)端線(xiàn)程被放入 cache 中.
    這可以在你需要大量新連接的時(shí)候極大的減少線(xiàn)程創(chuàng)建的開(kāi)銷(xiāo)(一般來(lái)說(shuō)如果你有好的線(xiàn)程模型的話(huà),這不會(huì)有明顯的性能提升.)
thread_concurrency = 8  #允許應(yīng)用程序給予線(xiàn)程系統(tǒng)一個(gè)提示在同一時(shí)間給予渴望被運(yùn)行的線(xiàn)程的數(shù)量.該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量×2
query_cache_min_res_unit = 2K 
    #查詢(xún)緩存分配的最小塊大小.默認(rèn)是 4KB,設(shè)置值大對(duì)大數(shù)據(jù)查詢(xún)有好處,但如果你的查詢(xún)都是小數(shù)據(jù)查詢(xún),就容易造成內(nèi)存碎片和浪費(fèi)
查詢(xún)緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
    如果查詢(xún)緩存碎片率超過(guò) 20%,可以用 FLUSH QUERY CACHE 整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢(xún)都是小數(shù)據(jù)量的話(huà)。
查詢(xún)緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size *100%
    查詢(xún)緩存利用率在 25%以下的話(huà)說(shuō)明 query_cache_size 設(shè)置的過(guò)大,可適當(dāng)減小;查詢(xún)緩存利用率在 80%以上而且 Qcache_lowmem_prunes > 50 的話(huà)說(shuō)明 query_cache_size 可能有點(diǎn)小,要不就是碎片太多。
查詢(xún)緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

tmp_table_size = 512M        #臨時(shí)表的最大大小,如果超過(guò)該值,則結(jié)果放到磁盤(pán)中,此限制是針對(duì)單個(gè)表的,而不是總和
max_heap_table_size = 512M   #獨(dú)立的內(nèi)存表所允許的最大容量.此選項(xiàng)為了防止意外創(chuàng)建一個(gè)超大的內(nèi)存表導(dǎo)致用盡所有的內(nèi)存資源


#日志相關(guān)

log_slave_updates = 1 #表示slave將復(fù)制事件寫(xiě)進(jìn)自己的二進(jìn)制日志
log-warnings = 1 
log_long_format       #在慢速日志中記錄更多的信息.一般此項(xiàng)最好打開(kāi),打開(kāi)此項(xiàng)會(huì)記錄使得那些沒(méi)有使用索引的查詢(xún)也被作為到慢速查詢(xún)附加到慢速日志里
min_examined_row_limit=1000    #記錄那些由于查找了多余1000次而引發(fā)的慢查詢(xún)
long-slow-admin-statements     #記錄那些慢的optimize table,analyze table和alter table語(yǔ)句
log-slow-slave-statements          #記錄由Slave所產(chǎn)生的慢查詢(xún)
general_log = 1                    #將所有到達(dá)MySQL Server的SQL語(yǔ)句記錄下來(lái),默認(rèn)關(guān)閉
general_log_file = /usr/local/mysql/log/mysql.log  #general_log路徑
relay-log-purge = 1 #是否自動(dòng)清空不再需要中繼日志時(shí)。默認(rèn)值為1(啟用)


#MyISAM 相關(guān)選項(xiàng)

key_buffer_size = 256M 
    #指定用于索引的緩沖區(qū)大小,增加它可得到更好的索引處理性能。如果是以InnoDB引擎為主的DB,專(zhuān)用于MyISAM引擎的 key_buffer_size 可以設(shè)置較小,8MB已足夠。 
    如果是以MyISAM引擎為主,可設(shè)置較大,但不能超過(guò)4G. 在這里,強(qiáng)烈建議不使用MyISAM引擎,默認(rèn)都是用InnoDB引擎.
sort_buffer_size = 2M 
    #查詢(xún)排序時(shí)所能使用的緩沖區(qū)大小。排序緩沖被用來(lái)處理類(lèi)似 ORDER BY 以及 GROUP BY 隊(duì)列所引起的排序.一個(gè)用來(lái)替代的基于磁盤(pán)的合并分類(lèi)會(huì)被使用.
    查看 “Sort_merge_passes” 狀態(tài)變量. 在排序發(fā)生時(shí)由每個(gè)線(xiàn)程分配 注意:該參數(shù)對(duì)應(yīng)的分配內(nèi)存是每連接獨(dú)占!如果有 100 個(gè)連接,那么實(shí)際分配的
    總共排序緩沖區(qū)大小為 100 × 6 =600MB,所以,對(duì)于內(nèi)存在 4GB 左右的服務(wù)器推薦設(shè)置為 6-8M。
read_buffer_size = 2M 
    #讀查詢(xún)操作所能使用的緩沖區(qū)大小。和 sort_buffer_size 一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!用來(lái)做 MyISAM 表全表掃描的緩沖大小.當(dāng)全表掃描需要時(shí),在對(duì)應(yīng)線(xiàn)程中分配.
join_buffer_size = 8M 
    #聯(lián)合查詢(xún)操作所能使用的緩沖區(qū)大小,和 sort_buffer_size 一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!此緩沖被使用來(lái)優(yōu)化全聯(lián)合(full JOINs 不帶索引的聯(lián)合).
    類(lèi)似的聯(lián)合在極大多數(shù)情況下有非常糟糕的性能表現(xiàn), 但是將此值設(shè)大能夠減輕性能影響.通過(guò) “Select_full_join”狀態(tài)變量查看全聯(lián)合的數(shù)量, 當(dāng)全聯(lián)合發(fā)生時(shí),在每個(gè)線(xiàn)程中分配。
read_rnd_buffer_size = 8M 
    #MyISAM 以索引掃描(Random Scan)方式掃描數(shù)據(jù)的 buffer大小 
bulk_insert_buffer_size = 64M 
    #MyISAM 使用特殊的類(lèi)似樹(shù)的 cache 來(lái)使得突發(fā)插入(這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATAINFILE) 更快. 
    此變量限制每個(gè)進(jìn)程中緩沖樹(shù)的字節(jié)數(shù).設(shè)置為 0 會(huì)關(guān)閉此優(yōu)化.為了最優(yōu)化不要將此值設(shè)置大于 “key_buffer_size”.當(dāng)突發(fā)插入被檢測(cè)到時(shí)此緩沖將被
    分配MyISAM 用在塊插入優(yōu)化中的樹(shù)緩沖區(qū)的大小。注釋?zhuān)哼@是一個(gè) per thread 的限制 ( bulk 大量).此緩沖當(dāng) MySQL 需要在 REPAIR, OPTIMIZE, ALTER 
    以及 LOAD DATA INFILE到一個(gè)空表中引起重建索引時(shí)被分配.這在每個(gè)線(xiàn)程中被分配.所以在設(shè)置大值時(shí)需要小心
myisam_sort_buffer_size = 64M 
    #MyISAM 設(shè)置恢復(fù)表之時(shí)使用的緩沖區(qū)的尺寸,當(dāng)在REPAIR TABLE 或用 CREATE INDEX 創(chuàng)建索引或 ALTER TABLE 過(guò)程中排序 MyISAM 索引分配的緩沖區(qū)。
myisam_max_sort_file_size = 10G
    #mysql重建索引時(shí)允許使用的臨時(shí)文件最大大小
myisam_repair_threads = 1 
    #如果該值大于 1,在 Repair by sorting 過(guò)程中并行創(chuàng)建MyISAM 表索引(每個(gè)索引在自己的線(xiàn)程內(nèi)).如果一個(gè)表?yè)碛谐^(guò)一個(gè)索引, MyISAM 可以通過(guò)并行排序使用超過(guò)一個(gè)線(xiàn)程去修復(fù)他們.
    這對(duì)于擁有多個(gè) CPU 以及大量?jī)?nèi)存情況的用戶(hù),是一個(gè)很好的選擇.
myisam_recover = 64K
    #允許的 GROUP_CONCAT()函數(shù)結(jié)果的最大長(zhǎng)度
transaction_isolation = REPEATABLE-READ 
    # 設(shè)定默認(rèn)的事務(wù)隔離級(jí)別.可用的級(jí)別如下:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ,SERIALIZABLE
    1.READ UNCOMMITTED-讀未提交 2.READ COMMITTE-讀已提交 3.REPEATABLE READ -可重復(fù)讀 4.SERIALIZABLE -串行


#INNODB 相關(guān)選項(xiàng)

skip-innodb 
    #如果你的MySQL服務(wù)包含 InnoDB 支持但是并不打算使用的話(huà),使用此選項(xiàng)會(huì)節(jié)省內(nèi)存以及磁盤(pán)空間,并且加速某些部分
innodb_status_file = 1 
    #啟用InnoDB的status file,便于管理員查看以及監(jiān)控等 show engine innodb status\G 
innodb_open_files = 2048 
    #限制Innodb能打開(kāi)的表的數(shù)據(jù),如果庫(kù)里的表特別多的情況,請(qǐng)?jiān)黾舆@個(gè)。這個(gè)值默認(rèn)是300
innodb_additional_mem_pool_size = 100M 
    #設(shè)置InnoDB存儲(chǔ)引擎用來(lái)存放數(shù)據(jù)字典信息以及一些內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)存空間大小,所以當(dāng)我們一個(gè)MySQL Instance中的數(shù)據(jù)庫(kù)對(duì)象非常多的時(shí)候,
    是需要適當(dāng)調(diào)整該參數(shù)的大小以確保所有數(shù)據(jù)都能存放在內(nèi)存中提高訪問(wèn)效率的。
innodb_write_io_threads = 4
innodb_read_io_threads = 4
    # innodb使用后臺(tái)線(xiàn)程處理數(shù)據(jù)頁(yè)上的讀寫(xiě) I/O(輸入輸出)請(qǐng)求,根據(jù)你的 CPU 核數(shù)來(lái)更改,默認(rèn)是4
    # 注:這兩個(gè)參數(shù)不支持動(dòng)態(tài)改變,需要把該參數(shù)加入到my.cnf里,修改完后重啟MySQL服務(wù),允許值的范圍從 1-64
innodb_data_home_dir =  /usr/local/mysql/var/ 
    #設(shè)置此選項(xiàng)如果你希望 InnoDB 表空間文件被保存在其他分區(qū).默認(rèn)保存在 MySQL 的 datadir 中.
innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend
    #InnoDB將數(shù)據(jù)保存在一個(gè)或者多個(gè)數(shù)據(jù)文件中成為表空間.如果你只有單個(gè)邏輯驅(qū)動(dòng)保存你的數(shù)據(jù),一個(gè)單個(gè)的自增文件就足夠好了.
    其他情況下.每個(gè)設(shè)備一個(gè)文件一般都是個(gè)好的選擇.你也可以配置 InnoDB 來(lái)使用裸盤(pán)分區(qū)
innodb_file_io_threads = 4 
    #用來(lái)同步 IO 操作的 IO 線(xiàn)程的數(shù)量. 此值在 Unix 下被硬編碼為 4,但是在 Windows 磁盤(pán) I/O 可能在一個(gè)大數(shù)值下表現(xiàn)的更好.
innodb_thread_concurrency = 16
    #在InnoDb 核心內(nèi)的允許線(xiàn)程數(shù)量,InnoDB 試著在 InnoDB 內(nèi)保持操作系統(tǒng)線(xiàn)程的數(shù)量少于或等于這個(gè)參數(shù)給出的限制,最優(yōu)值依賴(lài)于應(yīng)用程序,硬件以及操作系統(tǒng)的調(diào)度方式.
    過(guò)高的值可能導(dǎo)致線(xiàn)程的互斥顛簸.默認(rèn)設(shè)置為 0,表示不限制并發(fā)數(shù),這里推薦設(shè)置為0,更好去發(fā)揮CPU多核處理能力,提高并發(fā)量
innodb_flush_log_at_trx_commit = 1 
    #如果設(shè)置為 1 ,InnoDB 會(huì)在每次提交后刷新(fsync)事務(wù)日志到磁盤(pán)上,這提供了完整的 ACID 行為.如果你愿意對(duì)事務(wù)安全折衷, 并且你正在運(yùn)行一個(gè)小的食物,
    你可以設(shè)置此值到 0 或者 2 來(lái)減少由事務(wù)日志引起的磁盤(pán) I/O
    0 代表日志只大約每秒寫(xiě)入日志文件并且日志文件刷新到磁盤(pán).
    2 代表日志寫(xiě)入日志文件在每次提交后,但是日志文件只有大約每秒才會(huì)刷新到磁盤(pán)上.
innodb_log_buffer_size = 8M 
    #用來(lái)緩沖日志數(shù)據(jù)的緩沖區(qū)的大小.當(dāng)此值快滿(mǎn)時(shí), InnoDB 將必須刷新數(shù)據(jù)到磁盤(pán)上.由于基本上每秒都會(huì)刷新一次,所以沒(méi)有必要將此值設(shè)置的太大(甚至對(duì)于長(zhǎng)事務(wù)而言)
innodb_log_file_size = 500M 
    #事物日志大小.在日志組中每個(gè)日志文件的大小,你應(yīng)該設(shè)置日志文件總合大小到你緩沖池大小的5%~100%,來(lái)避免在日志文件覆寫(xiě)上不必要的緩沖池刷新行為.不論如何,
    請(qǐng)注意一個(gè)大的日志文件大小會(huì)增加恢復(fù)進(jìn)程所需要的時(shí)間.
innodb_log_files_in_group = 2 
    #在日志組中的文件總數(shù).通常來(lái)說(shuō) 2~3 是比較好的.
innodb_log_group_home_dir =  /usr/local/mysql/var/
    #InnoDB的日志文件所在位置. 默認(rèn)是 MySQL 的 datadir.你可以將其指定到一個(gè)獨(dú)立的硬盤(pán)上或者一個(gè) RAID1 卷上來(lái)提高其性能
innodb_max_dirty_pages_pct = 90 #innodb 主線(xiàn)程刷新緩存池中的數(shù)據(jù),使臟數(shù)據(jù)比例小于 90%,這是一個(gè)軟限制,不被保證絕對(duì)執(zhí)行.
innodb_lock_wait_timeout = 50 
    #InnoDB 事務(wù)在被回滾之前可以等待一個(gè)鎖定的超時(shí)秒數(shù)。InnoDB在它自己的鎖定表中自動(dòng)檢測(cè)事務(wù)死鎖并且回滾事務(wù)。InnoDB用LOCK TABLES語(yǔ)句注意到鎖定設(shè)置。默認(rèn)值是50秒
innodb_flush_method = O_DSYNC 
    #InnoDB 用來(lái)刷新日志的方法.表空間總是使用雙重寫(xiě)入刷新方法.默認(rèn)值是 “fdatasync”, 另一個(gè)是 “O_DSYNC”.
innodb_force_recovery=1
    #如果你發(fā)現(xiàn)InnoDB 表空間損壞, 設(shè)置此值為一個(gè)非零值可能幫助你導(dǎo)出你的表.從1 開(kāi)始并且增加此值知道你能夠成功的導(dǎo)出表.
innodb_fast_shutdown 
    #加速I(mǎi)nnoDB的關(guān)閉. 這會(huì)阻止InnoDB在關(guān)閉時(shí)做全清除以及插入緩沖合并.但是取而代之的是InnoDB可能在下次啟動(dòng)時(shí)做這些操作.


#其他相關(guān):

[mysqldump]
quick

[mysql]
auto-rehash                    #允許通過(guò) TAB 鍵提示
default-character-set = utf8   #數(shù)據(jù)庫(kù)字符集
connect-timeout = 3
[client]
default-character-set=utf8
[mysqld_safe]
open-files-limit = 8192 
    #增加每個(gè)進(jìn)程的可打開(kāi)文件數(shù)量.確認(rèn)你已經(jīng)將全系統(tǒng)限制設(shè)定的足夠高!打開(kāi)大量表需要將此值設(shè)大




參考:https://www.cnblogs.com/panwenbin-logs/p/8360703.html













向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI