自動生成cnf配置文件:http://iMySQL.com/my-cnf-wizard.html
為金寨等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及金寨網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、金寨網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
常用配置:
[mysql]字段
no-auto-rehash #開啟命令補全
[mysqld]字段
#port = 3306 #默認 #bind-address = 0.0.0.0 #默認 pid-file = /data/mysql/mysql.pid basedir = /usr/local/mysql/ symbolic-link = 0 #等同于skip-symbolic-links,不能使用連接文件,多個客戶可能會訪問同一個數(shù)據(jù)庫,因此這防止外部客戶鎖定 MySQL 服務(wù)器。 該選項默認開啟 #tmpdir = /usr/local/mysql/tmp/ #此目錄被 MySQL用來保存臨時文件.例如,它被用來處理基于磁盤的大型排序,如果你不創(chuàng)建非常大的臨時文件,將其放置到 swapfs/tmpfs 文件系統(tǒng)上也許比較好。另一種選擇是你也可以將其放置在獨立的磁盤上.你 可以使用”;”來放置多個路徑,他們會按照 roud-robin 方法被輪詢使用. open_files_limit = 65535 #MySQL打開的文件描述符限制,默認最小1024;當(dāng)open_files_limit沒有被配置的時候,比較max_connections*5和ulimit-n的值,哪個大用哪個, 當(dāng)open_file_limit被配置的時候,比較open_files_limit和max_connections*5的值,哪個大用哪個。 需要修改服務(wù)腳本,例centos7中/etc/systemd/system/mysql.service在mysql.service中最后一行添加LimitNOFILE=65535重啟服務(wù),修改了mysql.server有可能需要systemctl daemon-reload 同時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 #慢查詢?nèi)罩鞠嚓P(guān) long_query_time=2 #默認10秒 slow_query_log_file=/var/log/mariadb/slow_query.log log-queries-not-using-indexes #如果運行的SQL語句沒有使用索引,則mysql數(shù)據(jù)庫同樣會將這條SQL語句記錄到慢查詢?nèi)罩疚募小?#log_output = FILE #參數(shù) log_output 指定了慢查詢輸出的格式,默認為 FILE,你可以將它設(shè)為 TABLE,然后就可以查詢 mysql 架構(gòu)下的 slow_log 表了
socket=/var/lib/mysql/mysql.sock #該條配置需在[client]段同時配置,port也要配置。否則可能出錯 default_storage_engine=InnoDB innodb_file_per_table = on #InnoDB為獨立表空間模式,每個數(shù)據(jù)庫的每個表都會生成一個數(shù)據(jù)空間 innodb_buffer_pool_size=4G #生產(chǎn)中要改,建議為操作系統(tǒng)內(nèi)存的70%-80%,需重啟服務(wù)生效 skip_name_resolve = on #忽略主機名解析,提高訪問速度(注意配置文件中使用主機名將不能解析) lower_case_table_names = 1 #忽略表單大小寫 character-set-server=utf8mb4 #設(shè)定默認字符為utf8mb4
1.使用innodb注意事項
a) 所有InnoDB數(shù)據(jù)表都創(chuàng)建一個和業(yè)務(wù)無關(guān)的自增數(shù)字型作為主鍵,對保證性能很有幫助; b) 杜絕使用text/blob,確實需要使用的,盡可能拆分出去成一個獨立的表; c) 時間戳建議使用 TIMESTAMP 類型存儲; d) IPV4 地址建議用 INT UNSIGNED 類型存儲; e) 性別等非是即非的邏輯,建議采用 TINYINT 存儲,而不是 CHAR(1);例可以使用0,1,2來表示,未知,男,女,優(yōu)點搜索快,缺點顯示/存儲都要轉(zhuǎn)換 f) 存儲較長文本內(nèi)容時,建議采用JSON/BSON格式存儲;
2.查詢緩存相關(guān)
query_cache_type=1 #0表示禁用緩存,1表示會緩存所有的結(jié)果,除非你的select語句使用SQL_NO_CACHE禁用了查詢緩存,2表示只緩存在select語句中通過SQL_CACHE指定需要緩存的查詢 query_cache_limit = 2M #不緩存查詢大于該值的結(jié)果.只有小于此設(shè)定值的結(jié)果才會被緩沖, 此設(shè)置用來保護查詢緩沖,防止一個極大的結(jié)果集將其他所有的查詢結(jié)果都覆蓋. query_cache_size = 64M 或32M 或128M #此值為0表示未啟用查詢緩存功能,查看是否支持SHOW VARIABLES LIKE 'have_query_cache';值為yes表示支持查詢緩存 緩存相關(guān)字段意義show status like ‘%Qcache%’; Qcache_free_blocks:表示查詢緩存中目前還有多少剩余的blocks,如果該值顯示較大,則說明查詢緩存中的內(nèi)存碎片過多了,可能在一定的時間進行整理。 Qcache_free_memory 剩余查詢緩存大小,根據(jù)此值調(diào)整query_cache_size Qcache_hits:表示有多少次命中緩存 Qcache_inserts: 表示多少次未命中然后插入,SQL請求在緩存中未找到,不得不執(zhí)行查詢處理,執(zhí)行查詢處理后把結(jié)果insert到查詢緩存中。這樣的情況的次 數(shù)越多,表示查詢緩存應(yīng)用到的比較少,效果也就不理想。當(dāng)然系統(tǒng)剛啟動后,查詢緩存是空的 Qcache_lowmem_prunes:該參數(shù)記錄有多少條查詢因為內(nèi)存不足而被移除出查詢緩存。通過這個值,用戶可以適當(dāng)?shù)恼{(diào)整緩存大小
3.系統(tǒng)資源相關(guān)
back_log = 500 #接受隊列,對于沒建立 tcp 連接的請求隊列放入緩存中,隊列大小為 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)的限制將是無效的。 默認值為 50。對于 Linux 系統(tǒng)推薦設(shè)置為小于512的整數(shù)。如果系統(tǒng)在一個短時間內(nèi)有很多連接,則需要增大該參數(shù)的值 max_connections = 1000 #指定MySQL允許的最大連接進程數(shù)。如果在訪問數(shù)據(jù)庫時經(jīng)常出現(xiàn)"Too Many Connections"的錯誤提 示,默認100生產(chǎn)則需要增大該參數(shù)值。MySQL服務(wù)器允許的最大連接數(shù)16384
4.二進制日志相關(guān)
server_id=1 log_bin=master-bin #log-bin-index=master-bin.index expire_logs_days = 7 #binlog_format = row #默認為mix,新版中設(shè)為這兩項可提高安全性 #binlog_row_image = minimal max_binlog_size = 100m #默認是1G binlog_cache_size = 4m #binlog-do-db = DBNAME #指定mysql的binlog日志只記錄哪個庫 max_binlog_cache_size = 512m #生產(chǎn)4g #skip-slave-start #注意:當(dāng)從庫有數(shù)據(jù)恢復(fù)時,從庫應(yīng)該關(guān)閉slave進程自動啟動避免數(shù)據(jù)不一致,要在從庫上手動啟動。
5.附配置主從相關(guān)操作:
準備工作:
確認開啟binlog #show global variables like 'log_bin';
記錄二進制日志文件及編號:show master status;
主節(jié)點創(chuàng)建有復(fù)制權(quán)限的用戶賬號
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.5.%' identified by 'repluser'; flush privileges;
從節(jié)點配置:
server_id=2 relay_log=relay-log #開啟中繼日志 #max_relay_log_size = 200M #標記relaylog允許的最大值,如果該值為0,則默認值為max_binlog_size(1G);如果不為0,則max_relay_log_size則為最大的relay_log文件大??; relay_log_index=relay-log.index read_only=ON #重啟生效,對有super或all privileges權(quán)限的用戶不受限制 #replicate_wild_do_table=DB_NAME.% #僅復(fù)制某庫某表,加wild可以使用通配符 #replicate_wild_ignore_table=DB_NAME.% #忽略復(fù)制某庫某表。忽略某庫replicate_ignore_db,或者主節(jié)點指定數(shù)據(jù)庫不記錄某庫的binlog,binlog-ignore-db= #slave_skip_errors=all
#定義復(fù)制過程中從服務(wù)器可以自動跳過的錯誤號,當(dāng)復(fù)制過程中遇到定義的錯誤號,就可以自動跳過,直接執(zhí)行后面的SQL語句。
slave_skip_errors選項有四個可用值,分別為:off,all,ErorCode,ddl_exist_errors。
默認情況下該參數(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代表的錯誤如下:
1007:數(shù)據(jù)庫已存在,創(chuàng)建數(shù)據(jù)庫失敗 1008:數(shù)據(jù)庫不存在,刪除數(shù)據(jù)庫失敗 1050:數(shù)據(jù)表已存在,創(chuàng)建數(shù)據(jù)表失敗 1051:數(shù)據(jù)表不存在,刪除數(shù)據(jù)表失敗 1054:字段不存在,或程序文件跟數(shù)據(jù)庫有沖突 1060:字段重復(fù),導(dǎo)致無法插入 1061:重復(fù)鍵名 1068:定義了多個主鍵 1094:位置線程ID 1146:數(shù)據(jù)表缺失,請恢復(fù)數(shù)據(jù)庫 1053:復(fù)制過程中主服務(wù)器宕機 1062:主鍵沖突 Duplicate entry '%s' for key %d
#從相關(guān)操作
指定主節(jié)點
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=默認3306, start slave [[IO_THREAD|SQL_THREAD] #啟動復(fù)制線程 檢查:show slave status;如下則正常啟動 Slave_IO_Running=yes Slave_SQl_Running=yes Seconds_Behind_Master:0 #落后主庫的秒數(shù),0比較正常 看從庫relay-log.info 給sql線程用記錄上一次同步到的位置,一般情況主從切換后,需要reset slave,清除relay-log.info。 skip-slave-start #注意:當(dāng)從庫有數(shù)據(jù)恢復(fù)時,從庫應(yīng)該關(guān)閉slave進程自動啟動避免數(shù)據(jù)不一致,要在從庫上手動啟動。
安裝谷歌插件實現(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; #備庫而言,為了保證半同步立即生效,需要重啟slave的IO線程
安裝插件后:
master在配置文件添加
rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 #單位是毫秒,默認是10000。master等待超時,則切換為普通的異步復(fù)制。
slave添加
rpl_semi_sync_slave_enabled =1
筆者不常使用待發(fā)掘的配置:
[mysqld]
slave-load-tmpdir = /usr/local/mysql/tmp/ #當(dāng) slave 執(zhí)行 load data infile 時用 skip-external-locking #不使用系統(tǒng)鎖定,要使用 myisamchk,必須關(guān)閉服務(wù)器 ,避免 MySQL的外部鎖定,減少出錯幾率增強穩(wěn)定性。 skip-networking #開啟該選項可以徹底關(guān)閉 MySQL 的 TCP/IP 連接方式,如果 WEB 服務(wù)器是以遠程連接的方式訪問 MySQL 數(shù)據(jù)庫服務(wù)器則不要開啟該選項!否則將無法正常連接! 如果所有的進程都是在同一臺服務(wù)器連接到本地的 mysqld, 這樣設(shè)置將是增強安全的方法。 sysdate-is-now = 1 #把SYSDATE 函數(shù)編程為 NOW的別名 default-time-zone = system #服務(wù)器時區(qū),或者'+08:00' default_table_type = InnoDB #默認表類型 default-storage-engine = InnoDB #默認存儲引擎
#系統(tǒng)資源相關(guān)
max_connect_errors = 10000 #如果某個用戶發(fā)起的連接 error 超過該數(shù)值,則該用戶的下次連接將被阻塞,直到管理員執(zhí)行 flush hosts命令或者服務(wù)重啟, 防止非法的密碼以及其他在鏈接時的錯誤會增加此值 connect-timeout = 10 #連接超時之前的最大秒數(shù),在 Linux 平臺上,該超時也用作等待服務(wù)器首次回應(yīng)的時間 wait-timeout = 28800 #等待關(guān)閉連接的時間 interactive-timeout = 28800 #關(guān)閉連接之前,允許 interactive_timeout(取代了wait_timeout)秒的不活動時間??蛻舳说臅?nbsp;wait_timeout 變量被設(shè)為會話interactive_timeout 變量的值。 如果前端程序采用短連接,建議縮短這2個值, 如果前端程序采用長連接,可直接注釋掉這兩個選項,默認配置(8小時) slave-net-timeout = 600 #從服務(wù)器也能夠處理網(wǎng)絡(luò)連接中斷。但是,只有從服務(wù)器超過slave_net_timeout 秒沒有從主服務(wù)器收到數(shù)據(jù)才通知網(wǎng)絡(luò)中斷 net_read_timeout = 30 #從服務(wù)器讀取信息的超時 net_write_timeout = 60 #從服務(wù)器寫入信息的超時 net_retry_count = 10 #如果某個通信端口的讀操作中斷了,在放棄前重試多次。 net_buffer_length = 16384 #包消息緩沖區(qū)初始化為 net_buffer_length 字節(jié),但需要時可以增長到 max_allowed_packet 字節(jié) max_allowed_packet = 64M #服務(wù)所能處理的請求包的最大大小以及服務(wù)所能處理的最大的請求大小(當(dāng)與大的BLOB 字段一起工作時相當(dāng)必要), 每個連接獨立的大小.大小動態(tài)增加。 設(shè)置最大包,限制server接受的數(shù)據(jù)包大小,避免超長SQL的執(zhí)行有問題 默認值為16M,當(dāng)MySQL客戶端或mysqld服務(wù)器收到大于 max_allowed_packet 字節(jié)的信息包時, 將發(fā)出“信息包過大”錯誤,并關(guān)閉連接。對于某些客戶端,如果通信信息包過大,在執(zhí)行查詢期間,可能會遇到“丟失與 MySQL 服務(wù)器的連接”錯誤。默認值 16M。 table_cache = 512 # 所有線程所打開表的數(shù)量. 增加此值就增加了mysqld所需要的文件描述符的數(shù)量這樣你需要確認在[mysqld_safe]中 “open-files-limit” 變量設(shè)置打開文件數(shù)量允許至少4096 thread_stack = 192K # 線程使用的堆大小. 此容量的內(nèi)存在每次連接時被預(yù)留.MySQL 本身常不會需要超過 64K 的內(nèi)存如果你使用你自己的需要大量堆的 UDF 函數(shù)或者你的操作系統(tǒng)對于某些操作需要更多的堆, 你也許需要將其設(shè)置的更高一點.默認設(shè)置足以滿足大多數(shù)應(yīng)用 thread_cache_size = 20 #在 cache 中保留多少線程用于重用.當(dāng)一個客戶端斷開連接后,如果 cache 中的線程還少于 thread_cache_size,則客戶端線程被放入 cache 中. 這可以在你需要大量新連接的時候極大的減少線程創(chuàng)建的開銷(一般來說如果你有好的線程模型的話,這不會有明顯的性能提升.) thread_concurrency = 8 #允許應(yīng)用程序給予線程系統(tǒng)一個提示在同一時間給予渴望被運行的線程的數(shù)量.該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量×2 query_cache_min_res_unit = 2K #查詢緩存分配的最小塊大小.默認是 4KB,設(shè)置值大對大數(shù)據(jù)查詢有好處,但如果你的查詢都是小數(shù)據(jù)查詢,就容易造成內(nèi)存碎片和浪費 查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100% 如果查詢緩存碎片率超過 20%,可以用 FLUSH QUERY CACHE 整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數(shù)據(jù)量的話。 查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size *100% 查詢緩存利用率在 25%以下的話說明 query_cache_size 設(shè)置的過大,可適當(dāng)減小;查詢緩存利用率在 80%以上而且 Qcache_lowmem_prunes > 50 的話說明 query_cache_size 可能有點小,要不就是碎片太多。 查詢緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100% tmp_table_size = 512M #臨時表的最大大小,如果超過該值,則結(jié)果放到磁盤中,此限制是針對單個表的,而不是總和 max_heap_table_size = 512M #獨立的內(nèi)存表所允許的最大容量.此選項為了防止意外創(chuàng)建一個超大的內(nèi)存表導(dǎo)致用盡所有的內(nèi)存資源
#日志相關(guān)
log_slave_updates = 1 #表示slave將復(fù)制事件寫進自己的二進制日志 log-warnings = 1 log_long_format #在慢速日志中記錄更多的信息.一般此項最好打開,打開此項會記錄使得那些沒有使用索引的查詢也被作為到慢速查詢附加到慢速日志里 min_examined_row_limit=1000 #記錄那些由于查找了多余1000次而引發(fā)的慢查詢 long-slow-admin-statements #記錄那些慢的optimize table,analyze table和alter table語句 log-slow-slave-statements #記錄由Slave所產(chǎn)生的慢查詢 general_log = 1 #將所有到達MySQL Server的SQL語句記錄下來,默認關(guān)閉 general_log_file = /usr/local/mysql/log/mysql.log #general_log路徑 relay-log-purge = 1 #是否自動清空不再需要中繼日志時。默認值為1(啟用)
#MyISAM 相關(guān)選項
key_buffer_size = 256M #指定用于索引的緩沖區(qū)大小,增加它可得到更好的索引處理性能。如果是以InnoDB引擎為主的DB,專用于MyISAM引擎的 key_buffer_size 可以設(shè)置較小,8MB已足夠。 如果是以MyISAM引擎為主,可設(shè)置較大,但不能超過4G. 在這里,強烈建議不使用MyISAM引擎,默認都是用InnoDB引擎. sort_buffer_size = 2M #查詢排序時所能使用的緩沖區(qū)大小。排序緩沖被用來處理類似 ORDER BY 以及 GROUP BY 隊列所引起的排序.一個用來替代的基于磁盤的合并分類會被使用. 查看 “Sort_merge_passes” 狀態(tài)變量. 在排序發(fā)生時由每個線程分配 注意:該參數(shù)對應(yīng)的分配內(nèi)存是每連接獨占!如果有 100 個連接,那么實際分配的 總共排序緩沖區(qū)大小為 100 × 6 =600MB,所以,對于內(nèi)存在 4GB 左右的服務(wù)器推薦設(shè)置為 6-8M。 read_buffer_size = 2M #讀查詢操作所能使用的緩沖區(qū)大小。和 sort_buffer_size 一樣,該參數(shù)對應(yīng)的分配內(nèi)存也是每連接獨享!用來做 MyISAM 表全表掃描的緩沖大小.當(dāng)全表掃描需要時,在對應(yīng)線程中分配. join_buffer_size = 8M #聯(lián)合查詢操作所能使用的緩沖區(qū)大小,和 sort_buffer_size 一樣,該參數(shù)對應(yīng)的分配內(nèi)存也是每連接獨享!此緩沖被使用來優(yōu)化全聯(lián)合(full JOINs 不帶索引的聯(lián)合). 類似的聯(lián)合在極大多數(shù)情況下有非常糟糕的性能表現(xiàn), 但是將此值設(shè)大能夠減輕性能影響.通過 “Select_full_join”狀態(tài)變量查看全聯(lián)合的數(shù)量, 當(dāng)全聯(lián)合發(fā)生時,在每個線程中分配。 read_rnd_buffer_size = 8M #MyISAM 以索引掃描(Random Scan)方式掃描數(shù)據(jù)的 buffer大小 bulk_insert_buffer_size = 64M #MyISAM 使用特殊的類似樹的 cache 來使得突發(fā)插入(這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATAINFILE) 更快. 此變量限制每個進程中緩沖樹的字節(jié)數(shù).設(shè)置為 0 會關(guān)閉此優(yōu)化.為了最優(yōu)化不要將此值設(shè)置大于 “key_buffer_size”.當(dāng)突發(fā)插入被檢測到時此緩沖將被 分配MyISAM 用在塊插入優(yōu)化中的樹緩沖區(qū)的大小。注釋:這是一個 per thread 的限制 ( bulk 大量).此緩沖當(dāng) MySQL 需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE到一個空表中引起重建索引時被分配.這在每個線程中被分配.所以在設(shè)置大值時需要小心 myisam_sort_buffer_size = 64M #MyISAM 設(shè)置恢復(fù)表之時使用的緩沖區(qū)的尺寸,當(dāng)在REPAIR TABLE 或用 CREATE INDEX 創(chuàng)建索引或 ALTER TABLE 過程中排序 MyISAM 索引分配的緩沖區(qū)。 myisam_max_sort_file_size = 10G #mysql重建索引時允許使用的臨時文件最大大小 myisam_repair_threads = 1 #如果該值大于 1,在 Repair by sorting 過程中并行創(chuàng)建MyISAM 表索引(每個索引在自己的線程內(nèi)).如果一個表擁有超過一個索引, MyISAM 可以通過并行排序使用超過一個線程去修復(fù)他們. 這對于擁有多個 CPU 以及大量內(nèi)存情況的用戶,是一個很好的選擇. myisam_recover = 64K #允許的 GROUP_CONCAT()函數(shù)結(jié)果的最大長度 transaction_isolation = REPEATABLE-READ # 設(shè)定默認的事務(wù)隔離級別.可用的級別如下:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ,SERIALIZABLE 1.READ UNCOMMITTED-讀未提交 2.READ COMMITTE-讀已提交 3.REPEATABLE READ -可重復(fù)讀 4.SERIALIZABLE -串行
#INNODB 相關(guān)選項
skip-innodb #如果你的MySQL服務(wù)包含 InnoDB 支持但是并不打算使用的話,使用此選項會節(jié)省內(nèi)存以及磁盤空間,并且加速某些部分 innodb_status_file = 1 #啟用InnoDB的status file,便于管理員查看以及監(jiān)控等 show engine innodb status\G innodb_open_files = 2048 #限制Innodb能打開的表的數(shù)據(jù),如果庫里的表特別多的情況,請增加這個。這個值默認是300 innodb_additional_mem_pool_size = 100M #設(shè)置InnoDB存儲引擎用來存放數(shù)據(jù)字典信息以及一些內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)存空間大小,所以當(dāng)我們一個MySQL Instance中的數(shù)據(jù)庫對象非常多的時候, 是需要適當(dāng)調(diào)整該參數(shù)的大小以確保所有數(shù)據(jù)都能存放在內(nèi)存中提高訪問效率的。 innodb_write_io_threads = 4 innodb_read_io_threads = 4 # innodb使用后臺線程處理數(shù)據(jù)頁上的讀寫 I/O(輸入輸出)請求,根據(jù)你的 CPU 核數(shù)來更改,默認是4 # 注:這兩個參數(shù)不支持動態(tài)改變,需要把該參數(shù)加入到my.cnf里,修改完后重啟MySQL服務(wù),允許值的范圍從 1-64 innodb_data_home_dir = /usr/local/mysql/var/ #設(shè)置此選項如果你希望 InnoDB 表空間文件被保存在其他分區(qū).默認保存在 MySQL 的 datadir 中. innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend #InnoDB將數(shù)據(jù)保存在一個或者多個數(shù)據(jù)文件中成為表空間.如果你只有單個邏輯驅(qū)動保存你的數(shù)據(jù),一個單個的自增文件就足夠好了. 其他情況下.每個設(shè)備一個文件一般都是個好的選擇.你也可以配置 InnoDB 來使用裸盤分區(qū) innodb_file_io_threads = 4 #用來同步 IO 操作的 IO 線程的數(shù)量. 此值在 Unix 下被硬編碼為 4,但是在 Windows 磁盤 I/O 可能在一個大數(shù)值下表現(xiàn)的更好. innodb_thread_concurrency = 16 #在InnoDb 核心內(nèi)的允許線程數(shù)量,InnoDB 試著在 InnoDB 內(nèi)保持操作系統(tǒng)線程的數(shù)量少于或等于這個參數(shù)給出的限制,最優(yōu)值依賴于應(yīng)用程序,硬件以及操作系統(tǒng)的調(diào)度方式. 過高的值可能導(dǎo)致線程的互斥顛簸.默認設(shè)置為 0,表示不限制并發(fā)數(shù),這里推薦設(shè)置為0,更好去發(fā)揮CPU多核處理能力,提高并發(fā)量 innodb_flush_log_at_trx_commit = 1 #如果設(shè)置為 1 ,InnoDB 會在每次提交后刷新(fsync)事務(wù)日志到磁盤上,這提供了完整的 ACID 行為.如果你愿意對事務(wù)安全折衷, 并且你正在運行一個小的食物, 你可以設(shè)置此值到 0 或者 2 來減少由事務(wù)日志引起的磁盤 I/O 0 代表日志只大約每秒寫入日志文件并且日志文件刷新到磁盤. 2 代表日志寫入日志文件在每次提交后,但是日志文件只有大約每秒才會刷新到磁盤上. innodb_log_buffer_size = 8M #用來緩沖日志數(shù)據(jù)的緩沖區(qū)的大小.當(dāng)此值快滿時, InnoDB 將必須刷新數(shù)據(jù)到磁盤上.由于基本上每秒都會刷新一次,所以沒有必要將此值設(shè)置的太大(甚至對于長事務(wù)而言) innodb_log_file_size = 500M #事物日志大小.在日志組中每個日志文件的大小,你應(yīng)該設(shè)置日志文件總合大小到你緩沖池大小的5%~100%,來避免在日志文件覆寫上不必要的緩沖池刷新行為.不論如何, 請注意一個大的日志文件大小會增加恢復(fù)進程所需要的時間. innodb_log_files_in_group = 2 #在日志組中的文件總數(shù).通常來說 2~3 是比較好的. innodb_log_group_home_dir = /usr/local/mysql/var/ #InnoDB的日志文件所在位置. 默認是 MySQL 的 datadir.你可以將其指定到一個獨立的硬盤上或者一個 RAID1 卷上來提高其性能 innodb_max_dirty_pages_pct = 90 #innodb 主線程刷新緩存池中的數(shù)據(jù),使臟數(shù)據(jù)比例小于 90%,這是一個軟限制,不被保證絕對執(zhí)行. innodb_lock_wait_timeout = 50 #InnoDB 事務(wù)在被回滾之前可以等待一個鎖定的超時秒數(shù)。InnoDB在它自己的鎖定表中自動檢測事務(wù)死鎖并且回滾事務(wù)。InnoDB用LOCK TABLES語句注意到鎖定設(shè)置。默認值是50秒 innodb_flush_method = O_DSYNC #InnoDB 用來刷新日志的方法.表空間總是使用雙重寫入刷新方法.默認值是 “fdatasync”, 另一個是 “O_DSYNC”. innodb_force_recovery=1 #如果你發(fā)現(xiàn)InnoDB 表空間損壞, 設(shè)置此值為一個非零值可能幫助你導(dǎo)出你的表.從1 開始并且增加此值知道你能夠成功的導(dǎo)出表. innodb_fast_shutdown #加速InnoDB的關(guān)閉. 這會阻止InnoDB在關(guān)閉時做全清除以及插入緩沖合并.但是取而代之的是InnoDB可能在下次啟動時做這些操作.
#其他相關(guān):
[mysqldump] quick
[mysql] auto-rehash #允許通過 TAB 鍵提示 default-character-set = utf8 #數(shù)據(jù)庫字符集 connect-timeout = 3
[client] default-character-set=utf8
[mysqld_safe] open-files-limit = 8192 #增加每個進程的可打開文件數(shù)量.確認你已經(jīng)將全系統(tǒng)限制設(shè)定的足夠高!打開大量表需要將此值設(shè)大
參考:https://www.cnblogs.com/panwenbin-logs/p/8360703.html