編輯mysql配置文件,
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
1、注釋掉bind-address = 127.0.0.1,使其能監(jiān)聽所有地址。
2、修改端口Port,避免被全網(wǎng)端口掃描。
3、開啟二進制日志
server-id = 1
og_bin = /var/log/mysql/mysql-bin.log
skip-name-resolve
4、設(shè)置 sql_mode避免date插入錯誤
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
5、慢查詢?nèi)张渲?br>
log-slow-queries=/var/log/mysqld-slow.log
long_query_time=2 //秒數(shù)
6、中文字符集配置
character-set-server=utf8
collation-server=utf8_general_ci
添加遠程用戶
grant all on . to username@'%' identified by 'username' with grant option;
flush privileges;
連接相關(guān)參數(shù)
max_connections:允許客戶端并發(fā)連接的最大數(shù)量,默認值是151,一般將該參數(shù)設(shè)置為500-2000
max_connect_errors:如果客戶端嘗試連接的錯誤數(shù)量超過這個參數(shù)設(shè)置的值,則服務(wù)器不再接受新的客戶端連接??梢酝ㄟ^清空主機的緩存來解除服務(wù)器的這種阻止新連接的狀態(tài),通過FLUSH HOSTS或mysqladmin flush-hosts命令來清空緩存。這個參數(shù)的默認值是100,一般將該參數(shù)設(shè)置為100000。
interactive_timeout:Mysql關(guān)閉交互連接前的等待時間,單位是秒,默認是8小時,建議不要將該參數(shù)設(shè)置超過24小時,即86400
wait_timeout:Mysql關(guān)閉非交互連接前的等待時間,單位是秒,默認是8小時,建議不要將該參數(shù)設(shè)置超過24小時,即86400
skip_name_resolve:如果這個參數(shù)設(shè)為OFF,則MySQL服務(wù)在檢查客戶端連接的時候會解析主機名;如果這個參數(shù)設(shè)為ON,則MySQL服務(wù)只會使用IP,在這種情況下,授權(quán)表中的Host字段必須是IP地址或localhost。
這個參數(shù)默認是關(guān)閉的
back_log:MySQL服務(wù)器連接請求隊列所能處理的最大連接請求數(shù),如果隊列放滿了,后續(xù)的連接才會拒絕。當(dāng)主要的MySQL線程在很短時間內(nèi)獲取大量連接請求時,這個參數(shù)會生效。接下來,MySQL主線程會花費很短的時間去檢查連接,然后開啟新的線程。這個參數(shù)指定了MySQL的TCP/IP監(jiān)聽隊列的大小。如果MySQL服務(wù)器在短時間內(nèi)有大量的連接,可以增加這個參數(shù)。
文件相關(guān)參數(shù)
sync_binlog:控制二進制日志被同步到磁盤前二進制日志提交組的數(shù)量。當(dāng)這個參數(shù)為0的時候,二進制日志不會被同步到磁盤;當(dāng)這個參數(shù)設(shè)為0以上的數(shù)值時,就會有設(shè)置該數(shù)值的二進制提交組定期同步日志到磁盤。當(dāng)這個參數(shù)設(shè)為1的時候,所有事務(wù)在提交前會被同步到二進制日志中,因而即使MySQL服務(wù)器發(fā)生意外重啟,任何二進制日志中沒有的事務(wù)只會處于準備狀態(tài),這會導(dǎo)致MySQL服務(wù)器自動恢復(fù)以回滾這些事務(wù)。這樣就會保證二進制日志不會丟失事務(wù),是最安全的選項;同時由于增加了磁盤寫,這對性能有一定降低。將這個參數(shù)設(shè)為1以上的數(shù)值會提高數(shù)據(jù)庫的性能,但同時會伴隨數(shù)據(jù)丟失的風(fēng)險。建議將該參數(shù)設(shè)為2、4、6、8、16。
expire_logs_days:二進制日志自動刪掉的時間間隔。默認值為0,代表不會自動刪除二進制日志。想手動刪除二進制日志,可以執(zhí)行 PURGE BINARY LOGS。
max_binlog_size:二進制日志文件的最大容量,當(dāng)寫入的二進制日志超過這個值的時候,會完成當(dāng)前二進制的寫入,向新的二進制日志寫入日志。這個參數(shù)最小值時4096字節(jié);最大值和默認值時1GB。相同事務(wù)中的語句都會寫入同一個二進制日志,當(dāng)一個事務(wù)很大時,二進制日志實際的大小會超過max_binlog_size參數(shù)設(shè)置的值。如果max_relay_log_size參數(shù)設(shè)為0,則max_relay_log_size參數(shù)會使用和max_binlog_size參數(shù)同樣的大小。建議將此參數(shù)設(shè)為512M。
local_infile:是否允許客戶端使用LOAD DATA INFILE語句。如果這個參數(shù)沒有開啟,客戶端不能在LOAD DATA語句中使用LOCAL參數(shù)。
open_files_limit:操作系統(tǒng)允許MySQL服務(wù)打開的文件數(shù)量。這個參數(shù)實際的值以系統(tǒng)啟動時設(shè)定的值、max_connections和table_open_cache為基礎(chǔ),使用下列的規(guī)則:
10 + max_connections + (table_open_cache * 2)
max_connections * 5
MySQL啟動時指定open_files_limit的值
緩存控制參數(shù)
binlog_cache_size:在事務(wù)中二進制日志使用的緩存大小。如果MySQL服務(wù)器支持所有的存儲引擎且啟用二進制日志,每個客戶端都會被分配一個二進制日志緩存。如果數(shù)據(jù)庫中有很多大的事務(wù),增大這個緩存可以獲得更好的性能。
Binlog_cache_use和Binlog_cache_disk_use這兩個參數(shù)對于binlog_cache_size參數(shù)的優(yōu)化很有用。binlog_cache_size參數(shù)只設(shè)置事務(wù)所使用的緩存,非事務(wù)SQL語句所使用的緩存由binlog_stmt_cache_size系統(tǒng)參數(shù)控制。建議不要將這個參數(shù)設(shè)為超過64MB,以防止客戶端連接多而影響MySQL服務(wù)的性能。
max_binlog_cache_size:如果一個事務(wù)需要的內(nèi)存超過這個參數(shù),服務(wù)器會報錯"Multi-statement transaction required more than 'max_binlog_cache_size' bytes"。這個參數(shù)最大的推薦值是4GB,這是因為MySQL不能在二進制日志設(shè)為超過4GB的情況下正常的工作。建議將該參數(shù)設(shè)為binlog_cache_size*2。
binlog_stmt_cache_size:這個參數(shù)決定二進制日志處理非事務(wù)性語句的緩存。如果MySQL服務(wù)支持任何事務(wù)性的存儲引擎且開啟了二進制日志,每個客戶端連接都會被分配二進制日志事務(wù)和語句緩存。如果數(shù)據(jù)庫中經(jīng)常運行大的事務(wù),增加這個緩存可以獲得更好的性能。
table_open_cache:所有線程能打開的表的數(shù)量。
thread_cache_size:MySQL服務(wù)緩存以重用的線程數(shù)。當(dāng)客戶端斷開連接的時候,如果線程緩存沒有使用滿,則客戶端的線程被放入緩存中。如果有客戶端斷開連接后再次連接到MySQL服務(wù)且線程在緩存中,則MySQL服務(wù)會優(yōu)先使用緩存中的線程;如果線程緩存沒有這些線程,則MySQL服務(wù)器會創(chuàng)建新的線程。如果數(shù)據(jù)庫有很多的新連接,可以增加這個參數(shù)來提升性能。如果MySQL服務(wù)器每秒有上百個連接,可以增大thread_cache_size參數(shù)來使MySQL服務(wù)器使用緩存的線程。通過檢查Connections和Threads_created狀態(tài)參數(shù),可以判斷線程緩存是否足夠。這個參數(shù)默認的值是由下面的公式來決定的:
8 + (max_connections / 100)
建議將此參數(shù)設(shè)置為300~500。線程緩存的命中率計算公式為(1-thread_created/connections)*100%,可以通過這個公式來優(yōu)化和調(diào)整thread_cache_size參數(shù)。
query_cache_size:為查詢結(jié)果所分配的緩存。默認這個參數(shù)是沒有開啟的。這個參數(shù)的值應(yīng)設(shè)為整數(shù)的1024倍,如果設(shè)為其他值則會被自動調(diào)整為接近此數(shù)值的1024倍。這個參數(shù)最小需要40KB。建議不要將此參數(shù)設(shè)為大于256MB,以免占用太多的系統(tǒng)內(nèi)存。
query_cache_min_res_unit:查詢緩存所分配的最小塊的大小。默認值是4096(4KB)。
query_cache_type:設(shè)置查詢緩存的類型。當(dāng)這個參數(shù)為0或OFF時,則MySQL服務(wù)器不會啟用查詢緩存;當(dāng)這個參數(shù)為1或ON時,則MySQL服務(wù)器會緩存所有查詢結(jié)果(除了帶有SELECT SQL_NO_CACHE的語句);當(dāng)這個參數(shù)為2或DEMAND時,則MySQL服務(wù)器只會緩存帶有SELECT SQL_CACHE的語句。
sort_buffer_size:每個會話執(zhí)行排序操作所分配的內(nèi)存大小。想要增大max_sort_length參數(shù),需要增大sort_buffer_size參數(shù)。如果在SHOW GLOBAL STATUS輸出結(jié)果中看到每秒輸出的Sort_merge_passes狀態(tài)參數(shù)很大,可以考慮增大sort_buffer_size這個值來提高ORDER BY 和 GROUP BY的處理速度。建議設(shè)置為1~4MB。當(dāng)個別會話需要執(zhí)行大的排序操作時,在會話級別增大這個參數(shù)。
read_buffer_size:為每個線程對MyISAm表執(zhí)行順序讀所分配的內(nèi)存。如果數(shù)據(jù)庫有很多順序讀,可以增加這個參數(shù),默認值是131072字節(jié)。這個參數(shù)的值需要是4KB的整數(shù)倍。這個參數(shù)也用在下面場景中:
當(dāng)執(zhí)行ORDER BY操作時,緩存索引到臨時文件(不是臨時表)中;
執(zhí)行批量插入到分區(qū)表中;
緩存嵌套查詢的執(zhí)行結(jié)果。
read_rnd_buffer_size:這個參數(shù)用在MyISAM表和任何存儲引擎表隨機讀所使用的內(nèi)存。當(dāng)從MyISAM表中以鍵排序讀取數(shù)據(jù)的時候,掃描的行將使用這個緩存以避免磁盤的掃描。將這個值設(shè)到一個較大的值可以顯著提升ORDER BY的性能。然后,這個參數(shù)會應(yīng)用到所有的客戶端連接,所有不應(yīng)該將這個參數(shù)在全局級別設(shè)為一個較大的值;在運行大查詢的會話中,在會話級別增大這個參數(shù)即可。
join_buffer_size:MySQL服務(wù)器用來作普通索引掃描、范圍索引掃描和不使用索引而執(zhí)行全表掃描這些操作所用的緩存大小。通常,獲取最快連接的方法是增加索引。當(dāng)不能增加索引的時候,使全連接變快的方法是增大join_buffer_size參數(shù)。對于執(zhí)行全連接的兩張表,每張表都被分配一塊連接內(nèi)存。對于沒有使用索引的多表復(fù)雜連接,需要多塊連接內(nèi)存。通常來說,可以將此參數(shù)在全局上設(shè)置一個較小的值,而在需要執(zhí)行大連接的會話中在會話級別進行設(shè)置。默認值是256KB。
net_buffer_length:每個客戶端線程和連接緩存和結(jié)果緩存交互,每個緩存最初都被分配大小為net_buffer_length的容量,并動態(tài)增長,直至達到max_allowed_packet參數(shù)的大小。當(dāng)每條SQL語句執(zhí)行完畢后,結(jié)果緩存會縮小到net_buffer_length大小。不建議更改這個參數(shù),除非你的系統(tǒng)有很少的內(nèi)存,可以調(diào)整這個參數(shù)。如果語句需要的內(nèi)存超過了這個參數(shù)的大小,則連接緩存會自動增大。net_buffer_length參數(shù)最大可以設(shè)置到1MB。不能在會話級別設(shè)置這個參數(shù)。
max_allowed_packet:網(wǎng)絡(luò)傳輸時單個數(shù)據(jù)包的大小。默認值是4MB。包信息緩存的初始值是由net_buffer_length指定的,但是包可能會增長到max_allowed_packet參數(shù)設(shè)置的值。如果要使用BLOB字段或長字符串,需要增加這個參數(shù)的值。這個參數(shù)的值需要設(shè)置成和最大的BLOB字段一樣的大小。max_allowed_packet參數(shù)的協(xié)議限制是1GB。這個參數(shù)應(yīng)該是1024整數(shù)倍。
bulk_insert_buffer_size:MyISAM表使用一種特殊的樹狀緩存來提高批量插入的速度,如INSERT ... SELECT,INSERT ... VALUES (...),(...), ...,對空表執(zhí)行執(zhí)行LOAD DATA INFILE。這個參數(shù)每個線程的樹狀緩存大小。將這個參數(shù)設(shè)為0會關(guān)閉這個參數(shù)。這個參數(shù)的默認值是8MB。
max_heap_table_size:這個參數(shù)設(shè)置用戶創(chuàng)建的MEMORY表允許增長的最大容量,這個參數(shù)用來MEMORY表的MAX_ROWS值。設(shè)置這個參數(shù)對已有的MEMORY表沒有影響,除非表重建或執(zhí)行ALTER TABLE、TRUNCATE TABLE語句。
這個參數(shù)也和tmp_table_size參數(shù)一起來現(xiàn)在內(nèi)部in-memory表的大小。如果內(nèi)存表使用頻繁,可以增大這個參數(shù)的值。
tmp_table_size:內(nèi)部內(nèi)存臨時表的最大內(nèi)存。這個參數(shù)不會應(yīng)用到用戶創(chuàng)建的MEMORY表。如果內(nèi)存臨時表的大小超過了這個參數(shù)的值,則MySQL會自動將超出的部分轉(zhuǎn)化為磁盤上的臨時表。在MySQL 5.7.5版本,internal_tmp_disk_storage_engine存儲引擎將作為磁盤臨時表的默認引擎。在MySQL 5.7.5之前的版本,會使用MyISAM存儲引擎。如果有很多的GROUP BY查詢且系統(tǒng)內(nèi)存充裕,可以考慮增大這個參數(shù)。
innodb_buffer_pool_dump_at_shutdown:指定在MySQL服務(wù)關(guān)閉時,是否記錄InnoDB緩存池中的緩存頁,以縮短下次重啟時的預(yù)熱過程。通常和innodb_buffer_pool_load_at_startup參數(shù)搭配使用。innodb_buffer_pool_dump_pct參數(shù)定義了保留的最近使用緩存頁的百分比。
innodb_buffer_pool_dump_now:立刻記錄InnoDB緩沖池中的緩存頁。通常和innodb_buffer_pool_load_now搭配使用。
innodb_buffer_pool_load_at_startup:指定MySQL服務(wù)在啟動時,InnoDB緩沖池通過加載之前的緩存頁數(shù)據(jù)來自動預(yù)熱。通常和innodb_buffer_pool_dump_at_shutdown參數(shù)搭配使用。
innodb_buffer_pool_load_now:立刻通過加載數(shù)據(jù)頁來預(yù)熱InnoDB緩沖池,無需重啟數(shù)據(jù)庫服務(wù)??梢杂脕碓谛阅軠y試時,將緩存改成到一個已知的狀態(tài);或在數(shù)據(jù)庫運行報表查詢或維護后,將數(shù)據(jù)庫改成到一個正常的狀態(tài)。
MyISAM參數(shù)
key_buffer_size:所有線程所共有的MyISAM表索引緩存,這塊緩存被索引塊使用。增大這個參數(shù)可以增加索引的讀寫性能,在主要使用MyISAM存儲引擎的系統(tǒng)中,可設(shè)置這個參數(shù)為機器總內(nèi)存的25%。如果將這個參數(shù)設(shè)置很大,比如設(shè)為機器總內(nèi)存的50%以上,機器會開始page且變得異常緩慢。可以通過SHOW STATUS 語句查看 Key_read_requests,Key_reads,Key_write_requests, and Key_writes這些狀態(tài)值。正常情況下Key_reads/Key_read_requests 比率應(yīng)該小于0.01。數(shù)據(jù)庫更新和刪除操作頻繁的時候,Key_writes/Key_write_requests 比率應(yīng)該接近1。
key_cache_block_size:key緩存的塊大小,默認值是1024字節(jié)。
myisam_sort_buffer_size:在REPAIR TABLE、CREATE INDEX 或 ALTER TABLE操作中,MyISAM索引排序使用的緩存大小。
myisam_max_sort_file_size:當(dāng)重建MyISAM索引的時候,例如執(zhí)行REPAIR TABLE、 ALTER TABLE、 或 LOAD DATA INFILE命令,MySQL允許使用的臨時文件的最大容量。如果MyISAM索引文件超過了這個值且磁盤還有充裕的空間,增大這個參數(shù)有助于提高性能。
myisam_repair_threads:如果這個參數(shù)的值大于1,則MyISAM表在執(zhí)行Repair操作的排序過程中,在創(chuàng)建索引的時候會啟用并行,默認值為1。
InnoDB參數(shù)
innodb_buffer_pool_size:InnDB存儲引擎緩存表和索引數(shù)據(jù)所使用的內(nèi)存大小。默認值是128MB。在以InnDB存儲引擎為主的系統(tǒng)中,可以將這個參數(shù)設(shè)為機器物理內(nèi)存的80%。同時需要注意:
設(shè)置較大物理內(nèi)存時是否會引擎頁的交換而導(dǎo)致性能下降;
InnoDB存儲引擎會為緩存和控制表結(jié)構(gòu)信息使用部分內(nèi)存,因而實際花費的內(nèi)存會比設(shè)置的值大于10%;
這個參數(shù)設(shè)置的越大,初始化內(nèi)存池的時間越長。在MySQL 5.7.5版本,可以以chunk為單位增加或減少內(nèi)存池的大小。chunk的大小可以通過innodb_buffer_pool_chunk_size參數(shù)設(shè)定,默認值是128MB。內(nèi)存池的大小可以等于或是innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的整數(shù)倍。
innodb_buffer_pool_instances:InnoDB緩存池被分成的區(qū)域數(shù)。對于1GB以上大的InnoDB緩存,將緩存分成多個部分可以提高MySQL服務(wù)的并發(fā)性,減少不同線程讀緩存頁的讀寫競爭。每個緩存池有它單獨的空閑列表、刷新列表、LRU列表和其他連接到內(nèi)存池的數(shù)據(jù)結(jié)構(gòu),它們被mutex鎖保護。這個參數(shù)只有將innodb_buffer_pool_size參數(shù)設(shè)為1GB或以上時才生效。建議將每個分成的內(nèi)存區(qū)域設(shè)為1GB大小。
innodb_max_dirty_pages_pct:當(dāng)Innodb緩存池中臟頁所占的百分比達到這個參數(shù)的值時,InnoDB會從緩存中向磁盤寫入數(shù)據(jù)。默認值是75。
innodb_thread_concurrency:InnoDB存儲引擎可以并發(fā)使用的最大線程數(shù)。當(dāng)InnoDB使用的線程超過這參數(shù)的值時,后面的線程會進入等待狀態(tài),以先進先出的算法來處理。等待鎖的線程不計入這個參數(shù)的值。這個參數(shù)的范圍是0~1000。默認值是0。當(dāng)這個參數(shù)為0時,代表InnoDB線程的并發(fā)數(shù)沒有限制,這樣會導(dǎo)致MySQL創(chuàng)建它所需要的盡可能多的線程。設(shè)置這個參數(shù)可以參考下面規(guī)則:
如果用戶線程的并發(fā)數(shù)小于64,可以將這個參數(shù)設(shè)為0;
如果系統(tǒng)并發(fā)很嚴重,可以先將這個參數(shù)設(shè)為128,然后再逐漸將這個參數(shù)減小到96, 80, 64或其他數(shù)值,直到找到性能較好的一個數(shù)值。
innodb_flush_method:指定刷新數(shù)據(jù)到InnoDB數(shù)據(jù)文件和日志文件的方法,刷新方法會對I/O有影響。如果這個參數(shù)的值為空,在類Unix系統(tǒng)上,這個參數(shù)的默認值為fsync;在Windows系統(tǒng)上,這個參數(shù)的默認值為async_unbuffered。在類Unix系統(tǒng)上,這個參數(shù)可設(shè)置的值如下:
fsync:InnoDB使用fsync()系統(tǒng)函數(shù)來刷新數(shù)據(jù)和日志文件,fsync是默認參數(shù)。
O_DSYNC:InnoDB使用O_SYNC函數(shù)來打開和刷新日志文件,使用fsync()函數(shù)刷新數(shù)據(jù)文件
littlesync:這個選項用在內(nèi)部性能的測試,目前MySQL尚不支持,使用這個參數(shù)又一定的風(fēng)險
nosync:這個選項用在內(nèi)部性能的測試,目前MySQL尚不支持,使用這個參數(shù)又一定的風(fēng)險
O_DIRECT:InnoDB使用O_DIRECT(或者directio()在Solaris)函數(shù)打開數(shù)據(jù)文件,使用fsync()刷新數(shù)據(jù)文件和日志文件
O_DIRECT_NO_FSYNC:在刷新I/O時,InnoDB使用O_DIRECT方式。
在有RAID卡和寫緩存的系統(tǒng)中,O_DIRECT有助于避免InnoDB緩存池和操作系統(tǒng)緩存之間的雙重緩存。在InnoDB數(shù)據(jù)和日志文件放在SAN存儲上面的系統(tǒng),默認值或O_DSYNC方法會對以讀為主的數(shù)據(jù)庫起到加速作用。
innodb_data_home_dir:InnoDB系統(tǒng)表空間所使用的數(shù)據(jù)文件的物理路徑,默認路徑是MySQL數(shù)據(jù)文件路徑。如果這個參數(shù)的值為空,可以在innodb_data_file_path參數(shù)里使用絕對路徑
innodb_data_file_path:InnoDB數(shù)據(jù)文件的路徑和大小。
innodb_file_per_table:當(dāng)這個參數(shù)啟用的時候,InnoDB會將新建表的數(shù)據(jù)和索引單獨存放在.ibd格式的文件中,而不是存放在系統(tǒng)表空間中。當(dāng)這張表被刪除或TRUNCATE時,InnoDB表所占用的存儲會被釋放。這個設(shè)定會開啟InnoDB的一些其他特性,比如表的壓縮。當(dāng)這個參數(shù)關(guān)閉的時候,InnoDB會將表和索引的數(shù)據(jù)存放到系統(tǒng)表空間的ibdata文件中,這會有一個問題,因為系統(tǒng)表空間不會縮小,這樣設(shè)置會導(dǎo)致空間無法回放。
innodb_undo_directory:InnoDB undo日志所在表空間的物理路徑。和innodb_undo_logs、innodb_undo_tablespaces參數(shù)配合,來設(shè)置undo日志的路徑,默認路徑是數(shù)據(jù)文件路徑。
innodb_undo_logs:指定InnoDB使用的undo日志的個數(shù)。在MySQL 5.7.2版本,32個undo日志被臨時表預(yù)留使用,并且這些日志存放在臨時表表空間(ibtmp1)中。如果undo日志只存放在系統(tǒng)表空間中,想要額外分配供數(shù)據(jù)修改事務(wù)用的undo日志,innodb_undo_logs參數(shù)必須設(shè)置為32以上的整數(shù)。如果你配置了單獨的undo表空間,要將innodb_undo_logs參數(shù)設(shè)為33以上來分配額外供數(shù)據(jù)修改事務(wù)使用的undo日志。每個undo日志最多可以支持1024個事務(wù)。如果這個參數(shù)沒有設(shè)置,則它會設(shè)為默認值128。
innodb_undo_tablespaces:undo日志的表空間文件數(shù)量。默認,所有的undo日志都是系統(tǒng)表空間的一部分。因為在運行大的事務(wù)時,undo日志會增大,將undo日志設(shè)置在多個表空間中可以減少一個表空間的大小。undo表空間文件創(chuàng)建在innodb_undo_directory參數(shù)指定的路徑下,以undoN格式命名,N是以0開頭的一系列整數(shù)。undo表空間的默認大小為10M。需要在初始化InnoDB前設(shè)置innodb_undo_tablespaces這個參數(shù)。在MySQL 5.7.2版本,在128個undo日志中,有32個undo日志是為臨時表所預(yù)留的,有95個undo日志供undo表空間使用。
innodb_log_files_in_group:InnoDB日志組包含的日志個數(shù)。InnoDB以循環(huán)的方式寫入日志。這個參數(shù)的默認值和推薦值均是2。日志的路徑由innodb_log_group_home_dir參數(shù)設(shè)定。
innodb_log_group_home_dir:InnoDB重做日志文件的物理路徑,重做日志的數(shù)量由innodb_log_files_in_group參數(shù)指定。如果不指定任何InnoDB日志參數(shù),MySQL默認會在MySQL數(shù)據(jù)文件路徑下面創(chuàng)建兩個名為ib_logfile0、ib_logfile1的兩個重做日志文件,它們的大小由innodb_log_file_size參數(shù)設(shè)定。
innodb_log_file_size:日志組中每個日志文件的字節(jié)大小。所有日志文件的大小(innodb_log_file_size * innodb_log_files_in_group)不能超過512GB。
innodb_log_buffer_size:InnoDB寫入磁盤日志文件所使用的緩存字節(jié)大小。如果innodb_page_size參數(shù)為32K,則默認值是8MB;如果innodb_page_size參數(shù)為64K,則默認值是16MB。如果日志的緩存設(shè)置較大,則MySQL在處理大事務(wù)時,在提交事務(wù)前無需向磁盤寫入日志文件。建議設(shè)置此參數(shù)為4~8MB。
innodb_flush_log_at_trx_commit:當(dāng)提交相關(guān)的I/O操作被批量重新排列時,這個參數(shù)控制提交操作的ACID一致性和高性能之間的平衡??梢愿淖冞@個參數(shù)的默認值來提升數(shù)據(jù)庫的性能,但是在數(shù)據(jù)庫宕機的時候會丟失少量的事務(wù)。這個參數(shù)的默認值為1,代表數(shù)據(jù)庫遵照完整的ACID模型,每當(dāng)事務(wù)提交時,InnoDB日志緩存中的內(nèi)容均會被刷新到日志文件,并寫入到磁盤。當(dāng)這個參數(shù)為0時,InnDB日志緩存大概每秒刷新一次日志文件到磁盤。當(dāng)事務(wù)提交時,日志緩存不會立刻寫入日志文件,這樣的機制不會100%保證每秒都向日志文件刷新日志,當(dāng)mysqld進程宕掉的時候可能會丟失持續(xù)時間為1秒左右的事務(wù)數(shù)據(jù)。當(dāng)這個參數(shù)為2時,當(dāng)事務(wù)提交后,InnoDB日志緩存中的內(nèi)容會寫入到日志文件且日志文件,日志文件以大概每秒一次的頻率刷新到磁盤。在MySQL 5.6.6版本,InnoDB日志刷新頻率由innodb_flush_log_at_timeout參數(shù)決定。通常將個參數(shù)設(shè)為1。
innodb_flush_log_at_timeout:寫入或刷新日志的時間間隔。這個參數(shù)是在MySQL 5.6.6版本引入的。在MySQL 5.6.6版本之前,刷新的頻率是每秒刷新一次。innodb_flush_log_at_timeout參數(shù)的默認值也是1秒刷新一次。
innodb_lock_wait_timeout:InnDB事務(wù)等待行鎖的時間長度。默認值是50秒。當(dāng)一個事務(wù)鎖定了一行,這時另外一個事務(wù)想訪問并修改這一行,當(dāng)?shù)却龝r間達到innodb_lock_wait_timeout參數(shù)設(shè)置的值時,MySQL會報錯"ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction",同時會回滾語句(不是回滾整個事務(wù))。如果想回滾整個事務(wù),需要使用--innodb_rollback_on_timeout參數(shù)啟動MySQL。在高交互性的應(yīng)用系統(tǒng)或OLTP系統(tǒng)上,可以減小這個參數(shù)來快速顯示用戶的反饋或把更新放入隊列稍后處理。在數(shù)據(jù)倉庫中,為了更好的處理運行時間長的操作,可以增大這個參數(shù)。這個參數(shù)只應(yīng)用在InnoDB行鎖上,這個參數(shù)對表級鎖無效。這個參數(shù)不適用于死鎖,因為發(fā)生死鎖時,InnoDB會立刻檢測到死鎖并將發(fā)生死鎖的一個事務(wù)回退。
innodb_fast_shutdown:InnoDB關(guān)庫模式。如果這個參數(shù)為0,InnoDB會做一個緩慢關(guān)機,在關(guān)機前會做完整的刷新操作,這個級別的關(guān)庫操作會持續(xù)數(shù)分鐘,當(dāng)緩存中的數(shù)據(jù)量很大時,甚至?xí)掷m(xù)幾個小時;如果數(shù)據(jù)庫要執(zhí)行版本升級或降級,需要執(zhí)行這個級別的關(guān)庫操作,以保證所有的數(shù)據(jù)變更都寫入到數(shù)據(jù)文件。如果這個參數(shù)的值是1(默認值),為了節(jié)省關(guān)庫時間,InnoDB會跳過新操作,而是在下一次開機的時候通過crash recovery方式執(zhí)行刷新操作。如果這個參數(shù)的值是2,InnoDB會刷新日志并以冷方式關(guān)庫,就像MySQL宕機一樣,沒有提交的事務(wù)會丟失,在下一次開啟數(shù)據(jù)庫時,crash recovery所需要的時間更長;在緊急或排錯情形下,需要立刻關(guān)閉數(shù)據(jù)庫時,會使用這種方式停庫。