mysql 配置 my.cnf

# 客戶端設置
[client]
port = 3306
# 默認情況下,socket文件應爲/usr/local/mysql/mysql.socket,所以可以ln -s xx  /tmp/mysql.sock
socket = /tmp/mysql.sock 

# 服務端設置
[mysqld]

##########################################################################################################
# 基礎信息
#Mysql服務的唯一編號 每個mysql服務Id需唯一
server-id = 1

#服務端口號 默認3306
port = 3306

# 啓動mysql服務進程的用戶
user = mysql

##########################################################################################################
# 安裝目錄相關
# mysql安裝根目錄
basedir = /usr/local/mysql-5.7.21

# mysql數據文件所在位置
datadir = /usr/local/mysql-5.7.21/data

# 臨時目錄 比如load data infile會用到,一般都是使用/tmp
tmpdir  = /tmp

# 設置socke文件地址
socket  = /tmp/mysql.sock


##########################################################################################################
# 事務隔離級別,默認爲可重複讀(REPEATABLE-READ)。(此級別下可能參數很多間隙鎖,影響性能,但是修改又影響主從複製及災難恢復,建議還是修改代碼邏輯吧)
# 隔離級別可選項目:READ-UNCOMMITTED  READ-COMMITTED  REPEATABLE-READ  SERIALIZABLE
# transaction_isolation = READ-COMMITTED
transaction_isolation = REPEATABLE-READ

##########################################################################################################
# 數據庫引擎與字符集相關設置

# mysql 5.1 之後,默認引擎就是InnoDB了
default_storage_engine = InnoDB
# 內存臨時表默認引擎,默認InnoDB
default_tmp_storage_engine = InnoDB
# mysql 5.7新增特性,磁盤臨時表默認引擎,默認InnoDB
internal_tmp_disk_storage_engine = InnoDB

#數據庫默認字符集,主流字符集支持一些特殊表情符號(特殊表情符佔用4個字節)
character-set-server = utf8

#數據庫字符集對應一些排序等規則,注意要和character-set-server對應
collation-server = utf8_general_ci

# 設置client連接mysql時的字符集,防止亂碼
# init_connect='SET NAMES utf8'

# 是否對sql語句大小寫敏感,默認值爲0,1表示不敏感
lower_case_table_names = 1


##########################################################################################################
# 數據庫連接相關設置
# 最大連接數,可設最大值16384,一般考慮根據同時在線人數設置一個比較綜合的數字,鑑於該數值增大並不太消耗系統資源,建議直接設10000
# 如果在訪問時經常出現Too Many Connections的錯誤提示,則需要增大該參數值
max_connections = 10000

# 默認值100,最大錯誤連接數,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST
# 考慮高併發場景下的容錯,建議加大。
max_connect_errors = 10000

# MySQL打開的文件描述符限制,默認最小1024;
# 當open_files_limit沒有被配置的時候,比較max_connections*5和ulimit -n的值,哪個大用哪個,
# 當open_file_limit被配置的時候,比較open_files_limit和max_connections*5的值,哪個大用哪個。
open_files_limit = 65535

# 注意:仍然可能出現報錯信息Can't create a new thread;此時觀察系統cat /proc/mysql進程號/limits,觀察進程ulimit限制情況
# 過小的話,考慮修改系統配置表,/etc/security/limits.conf和/etc/security/limits.d/90-nproc.conf

# MySQL默認的wait_timeout  值爲8個小時, interactive_timeout參數需要同時配置才能生效
# MySQL連接閒置超過一定時間後(單位:秒,此處爲1800秒)將會被強行關閉
interactive_timeout = 1800 
wait_timeout = 1800 

# 在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中 
# 官方建議back_log = 50 + (max_connections / 5),封頂數爲900
back_log = 900

##########################################################################################################
# 數據庫數據交換設置
# 該參數限制服務器端,接受的數據包大小,如果有BLOB子段,建議增大此值,避免寫入或者更新出錯。有BLOB子段,建議改爲1024M
max_allowed_packet = 128M

##########################################################################################################
# 內存,cache與buffer設置


# 內存臨時表的最大值,默認16M,此處設置成128M
tmp_table_size = 64M
# 用戶創建的內存表的大小,默認16M,往往和tmp_table_size一起設置,限制用戶臨師表大小。
# 超限的話,MySQL就會自動地把它轉化爲基於磁盤的MyISAM表,存儲在指定的tmpdir目錄下,增大IO壓力,建議內存大,增大該數值。
max_heap_table_size = 64M



# 表示這個mysql版本是否支持查詢緩存。ps:SHOW STATUS LIKE 'qcache%',與緩存相關的狀態變量。
# have_query_cache

# 這個系統變量控制着查詢緩存工能的開啓的關閉,0時表示關閉,1時表示打開,2表示只要select 中明確指定SQL_CACHE才緩存。
# 看業務場景決定是否使用緩存,不使用,下面就不用配置了。
query_cache_type = 0 

# 默認值1M,優點是查詢緩衝可以極大的提高服務器速度, 如果你有大量的相同的查詢並且很少修改表。
# 缺點:在你表經常變化的情況下或者如果你的查詢原文每次都不同,查詢緩衝也許引起性能下降而不是性能提升。
query_cache_size = 64M 

# 只有小於此設定值的結果纔會被緩衝,保護查詢緩衝,防止一個極大的結果集將其他所有的查詢結果都覆蓋。
query_cache_limit = 2M

# 每個被緩存的結果集要佔用的最小內存,默認值4kb,一般不怎麼調整。
# 如果Qcache_free_blocks值過大,可能是query_cache_min_res_unit值過大,應該調小些
# query_cache_min_res_unit的估計值:(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache
query_cache_min_res_unit = 4kb

# 在一個事務中binlog爲了記錄SQL狀態所持有的cache大小
# 如果你經常使用大的,多聲明的事務,你可以增加此值來獲取更大的性能.
# 所有從事務來的狀態都將被緩衝在binlog緩衝中然後在提交後一次性寫入到binlog中
# 如果事務比此值大, 會使用磁盤上的臨時文件來替代.
# 此緩衝在每個連接的事務第一次更新狀態時被創建
binlog_cache_size = 1M



#*** MyISAM 相關選項
# 指定索引緩衝區的大小, 爲MYISAM數據表開啓供線程共享的索引緩存,對INNODB引擎無效。相當影響MyISAM的性能。
# 不要將其設置大於你可用內存的30%,因爲一部分內存同樣被OS用來緩衝行數據
# 甚至在你並不使用MyISAM 表的情況下, 你也需要仍舊設置起 8-64M 內存由於它同樣會被內部臨時磁盤表使用.
# 默認值 8M,建議值:對於內存在4GB左右的服務器該參數可設置爲256M或384M。注意:該參數值設置的過大反而會是服務器整體效率降低!
key_buffer_size = 64M

# 爲每個掃描MyISAM的線程分配參數設置的內存大小緩衝區。 
# 默認值128kb,建議值:16G內存建議1M,4G:128kb或者256kb吧
# 注意,該緩衝區是每個連接獨佔的,所以總緩衝區大小爲 128kb*連接數;極端情況128kb*maxconnectiosns,會超級大,所以要考慮日常平均連接數。
# 一般不需要太關心該數值,稍微增大就可以了,
read_buffer_size = 262144 

# 支持任何存儲引擎
# MySQL的隨機讀緩衝區大小,適當增大,可以提高性能。
# 默認值256kb;建議值:得參考連接數,16G內存,有人推薦8M
# 注意,該緩衝區是每個連接獨佔的,所以總緩衝區大小爲128kb*連接數;極端情況128kb*maxconnectiosns,會超級大,所以要考慮日常平均連接數。
read_rnd_buffer_size = 1M

# order by或group by時用到 
# 支持所有引擎,innodb和myisam有自己的innodb_sort_buffer_size和myisam_sort_buffer_size設置
# 默認值256kb;建議值:得參考連接數,16G內存,有人推薦8M.
# 注意,該緩衝區是每個連接獨佔的,所以總緩衝區大小爲 1M*連接數;極端情況1M*maxconnectiosns,會超級大。所以要考慮日常平均連接數。
sort_buffer_size = 1M

# 此緩衝被使用來優化全聯合(full JOINs 不帶索引的聯合)
# 類似的聯合在極大多數情況下有非常糟糕的性能表現,但是將此值設大能夠減輕性能影響.
# 通過 “Select_full_join” 狀態變量查看全聯合的數量
# 注意,該緩衝區是每個連接獨佔的,所以總緩衝區大小爲 1M*連接數;極端情況1M*maxconnectiosns,會超級大。所以要考慮日常平均連接數。
# 默認值256kb;建議值:16G內存,設置8M.
join_buffer_size = 1M

# 緩存linux文件描述符信息,加快數據文件打開速度
# 它影響myisam表的打開關閉,但是不影響innodb表的打開關閉。
# 默認值2000,建議值:根據狀態變量Opened_tables去設定
table_open_cache = 2000

# 緩存表定義的相關信息,加快讀取表信息速度
# 默認值1400,最大值2000,建議值:基本不改。
table_definition_cache = 1400
# 該參數是myssql 5.6後引入的,目的是提高併發。
# 默認值1,建議值:cpu核數,並且<=16
table_open_cache_instances = 2

# 當客戶端斷開之後,服務器處理此客戶的線程將會緩存起來以響應下一個客戶而不是銷燬。可重用,減小了系統開銷。
# 默認值爲9,建議值:兩種取值方式,方式一,根據物理內存,1G  —> 8;2G  —> 16; 3G  —> 32; >3G  —> 64;
# 方式二,根據show status like  'threads%',查看Threads_connected值。
thread_cache_size = 16

# 默認值256k,建議值:16/32G內存,512kb,其他一般不改變,如果報錯:Thread stack overrun,就增大看看,
# 注意,每個線程分配內存空間,所以總內存空間。。。你懂得。
thread_stack = 512k


##########################################################################################################
# 日誌文件相關設置,一般只開啓三種日誌,錯誤日誌,慢查詢日誌,二進制日誌。普通查詢日誌不開啓。

# 普通查詢日誌,默認值off,不開啓
general_log = 0
# 普通查詢日誌存放地址
general_log_file = /usr/local/mysql-5.7.21/log/mysql-general.log

# 全局動態變量,默認3,範圍:1~3
# 表示錯誤日誌記錄的信息,1:只記錄error信息;2:記錄error和warnings信息;3:記錄error、warnings和普通的notes信息。
log_error_verbosity = 2
# 錯誤日誌文件地址
log_error = /usr/local/mysql-5.7.21/log/mysql-error.log


# 開啓慢查詢
slow_query_log = 1

# 開啓慢查詢時間,此處爲1秒,達到此值才記錄數據
long_query_time = 3

# 檢索行數達到此數值,才記錄慢查詢日誌中
min_examined_row_limit = 100

# mysql 5.6.5新增,用來表示每分鐘允許記錄到slow log的且未使用索引的SQL語句次數,默認值爲0,不限制。
log_throttle_queries_not_using_indexes = 0

# 慢查詢日誌文件地址
slow_query_log_file = /usr/local/mysql-5.7.21/log/mysql-slow.log

# 開啓記錄沒有使用索引查詢語句
log-queries-not-using-indexes = 1


# 開啓二進制日誌
log_bin = /usr/local/mysql-5.7.21/log/mysql-bin.log
# mysql清除過期日誌的時間,默認值0,不自動清理,而是使用滾動循環的方式。
expire_logs_days = 0
# 如果二進制日誌寫入的內容超出給定值,日誌就會發生滾動。你不能將該變量設置爲大於1GB或小於4096字節。 默認值是1GB。
max_binlog_size = 1000M
# binlog的格式也有三種:STATEMENT,ROW,MIXED。mysql 5.7.7後,默認值從 MIXED 改爲 ROW
# 關於binlog日誌格式問題,請查閱網絡資料
binlog_format = row
# 默認值N=1,使binlog在每N次binlog寫入後與硬盤同步,ps:1最慢
# sync_binlog = 1 

##########################################################################################################
# innodb選項

# 說明:該參數可以提升擴展性和刷髒頁性能。
# 默認值1,建議值:4-8;並且必須小於innodb_buffer_pool_instances
innodb_page_cleaners = 4

# 說明:一般8k和16k中選擇,8k的話,cpu消耗小些,selcet效率高一點,一般不用改
# 默認值:16k;建議值:不改,
innodb_page_size = 16384

# 說明:InnoDB使用一個緩衝池來保存索引和原始數據, 不像MyISAM.這裏你設置越大,你在存取表裏面數據時所需要的磁盤I/O越少.
# 在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的60%-80%
# 注意別設置的過大,會導致system的swap空間被佔用,導致操作系統變慢,從而減低sql查詢的效率
# 默認值:128M,建議值:物理內存的60%-80%
innodb_buffer_pool_size = 512M

# 說明:只有當設置 innodb_buffer_pool_size 值大於1G時纔有意義,小於1G,instances默認爲1,大於1G,instances默認爲8
# 但是網絡上有評價,最佳性能,每個實例至少1G大小。
# 默認值:1或8,建議值:innodb_buffer_pool_size/innodb_buffer_pool_instances >= 1G
innodb_buffer_pool_instances = 1

# 說明:mysql 5.7 新特性,defines the chunk size for online InnoDB buffer pool resizing operations.
# 實際緩衝區大小必須爲innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances*倍數,取略大於innodb_buffer_pool_size
# 默認值128M,建議值:默認值就好,亂改反而容易出問題,它會影響實際buffer pool大小。
innodb_buffer_pool_chunk_size = 128M 

# 在啓動時把熱數據加載到內存。默認值爲on,不修改
innodb_buffer_pool_load_at_startup = 1
# 在關閉時把熱數據dump到本地磁盤。默認值爲on,不修改
innodb_buffer_pool_dump_at_shutdown = 1

# 說明:影響Innodb緩衝區的刷新算法,建議從小到大配置,直到zero free pages;innodb_lru_scan_depth * innodb_buffer_pool_instances defines the amount of work performed by the page cleaner thread each second.
# 默認值1024,建議值: 未知
innodb_lru_scan_depth = 1024

# 說明:事務等待獲取資源等待的最長時間,單位爲秒,看具體業務情況,一般默認值就好
# 默認值:50,建議值:看業務。
innodb_lock_wait_timeout = 60

# 說明:設置了Mysql後臺任務(例如頁刷新和merge dadta from buffer pool)每秒io操作的上限。
# 默認值:200,建議值:方法一,單盤sata設100,sas10,raid10設200,ssd設2000,fushion-io設50000;方法二,通過測試工具獲得磁盤io性能後,設置IOPS數值/2。
innodb_io_capacity = 2000
# 說明:該參數是所有緩衝區線程io操作的總上限。
# 默認值:innodb_io_capacity的兩倍。建議值:例如用iometer測試後的iops數值就好
innodb_io_capacity_max = 4000

# 說明:控制着innodb數據文件及redo log的打開、刷寫模式,三種模式:fdatasync(默認),O_DSYNC,O_DIRECT
# fdatasync:數據文件,buffer pool->os buffer->磁盤;日誌文件,buffer pool->os buffer->磁盤;
# O_DSYNC:  數據文件,buffer pool->os buffer->磁盤;日誌文件,buffer pool->磁盤;
# O_DIRECT: 數據文件,buffer pool->磁盤;           日誌文件,buffer pool->os buffer->磁盤;
# 默認值爲空,建議值:使用SAN或者raid,建議用O_DIRECT,不懂測試的話,默認生產上使用O_DIRECT
innodb_flush_method = O_DIRECT


# 說明:mysql5.7之後默認開啓,意思是,每張表一個獨立表空間。
# 默認值1,開啓
innodb_file_per_table = 1

# 說明:The path where InnoDB creates undo tablespaces.通常等於undo log文件的存放目錄。
# 默認值./;自行設置
innodb_undo_directory = /usr/local/mysql-5.7.21/log
# 說明:The number of undo tablespaces used by InnoDB.等於undo log文件數量。5.7.21後開始棄用
# 默認值爲0,建議默認值就好,不用調整了。
innodb_undo_tablespaces = 0
# 說明:定義undo使用的回滾段數量。5.7.19後棄用
# 默認值128,建議不動,以後棄用了。
innodb_undo_logs = 128
# 說明:5.7.5後開始使用,在線收縮undo log使用的空間。
# 默認值:關閉,建議值:開啓
innodb_undo_log_truncate = 1
# 說明:結合innodb_undo_log_truncate,實現undo空間收縮功能
# 默認值:1G,建議值,不改。
innodb_max_undo_log_size = 1G

# 說明:重作日誌文件的存放目錄
innodb_log_group_home_dir = /usr/local/mysql-5.7.21/log
# 說明:日誌文件的大小
# 默認值:48M,建議值:根據你係統的磁盤空間和日誌增長情況調整大小
innodb_log_file_size = 128M
# 說明:日誌組中的文件數量,mysql以循環方式寫入日誌
# 默認值2,建議值:根據你係統的磁盤空間和日誌增長情況調整大小
innodb_log_files_in_group = 3
# 此參數確定些日誌文件所用的內存大小,以M爲單位。緩衝區更大能提高性能,但意外的故障將會丟失數據。MySQL開發人員建議設置爲1-8M之間
innodb_log_buffer_size = 16M



# 說明:可以控制log從系統buffer刷入磁盤文件的刷新頻率,增大可減輕系統負荷
# 默認值是1;建議值不改。系統性能一般夠用。
innodb_flush_log_at_timeout = 1
# 說明:參數可設爲0,1,2;
# 參數0:表示每秒將log buffer內容刷新到系統buffer中,再調用系統flush操作寫入磁盤文件。
# 參數1:表示每次事物提交,將log buffer內容刷新到系統buffer中,再調用系統flush操作寫入磁盤文件。
# 參數2:表示每次事物提交,將log buffer內容刷新到系統buffer中,隔1秒後再調用系統flush操作寫入磁盤文件。
innodb_flush_log_at_trx_commit = 1


# 說明:限制Innodb能打開的表的數據,如果庫裏的表特別多的情況,請增加這個。
# 值默認是2000,建議值:參考數據庫表總數再進行調整,一般夠用不用調整。
innodb_open_files = 8192

# innodb處理io讀寫的後臺併發線程數量,根據cpu核來確認,取值範圍:1-64
# 默認值:4,建議值:與邏輯cpu數量的一半保持一致。
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# 默認設置爲 0,表示不限制併發數,這裏推薦設置爲0,更好去發揮CPU多核處理能力,提高併發量
innodb_thread_concurrency = 0
# 默認值爲4,建議不變。InnoDB中的清除操作是一類定期回收無用數據的操作。mysql 5.5之後,支持多線程清除操作。
innodb_purge_threads = 4 

# 說明:mysql緩衝區分爲new blocks和old blocks;此參數表示old blocks佔比;
# 默認值:37,建議值,一般不動
innodb_old_blocks_pct = 37
# 說明:新數據被載入緩衝池,進入old pages鏈區,當1秒後再次訪問,則提升進入new pages鏈區。
# 默認值:1000
innodb_old_blocks_time=1000
# 說明:開啓異步io,可以提高併發性,默認開啓。
# 默認值爲1,建議不動
innodb_use_native_aio = 1

# 說明:默認爲空,使用data目錄,一般不改。
innodb_data_home_dir=/usr/local/mysql-5.7.21/data
# 說明:Defines the name, size, and attributes of InnoDB system tablespace data files.
# 默認值,不指定,默認爲ibdata1:12M:autoextend
innodb_data_file_path = ibdata1:12M:autoextend


# 說明:設置了InnoDB存儲引擎用來存放數據字典信息以及一些內部數據結構的內存空間大小,除非你的數據對象及其多,否則一般默認不改。
# innodb_additional_mem_pool_size = 16M


# 說明:The crash recovery mode。只有緊急情況需要恢復數據的時候,才改爲大於1-6之間數值,含義查下官網。
# 默認值爲0;
#innodb_force_recovery = 0

##########################################################################################################
# 其他。。。。
# 參考http://www.kuqin.com/database/20120815/328905.html
# skip-external-locking

# 禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。
# 缺點:所有遠程主機連接授權都要使用IP地址方式,因爲只認得ip地址了。
# skip_name_resolve = 0

# 默認值爲off,timestamp列會自動更新爲當前時間,設置爲on|1,timestamp列的值就要顯式更新
explicit_defaults_for_timestamp = 1




[mysqldump]
# quick選項強制 mysqldump 從服務器查詢取得記錄直接輸出而不是取得所有記錄後將它們緩存到內存中
quick
max_allowed_packet = 16M

[mysql]
# mysql命令行工具不使用自動補全功能,建議還是改爲
# no-auto-rehash
auto-rehash
socket = /tmp/mysql.sock

發佈了62 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章