MySQL 配置檔案 (my.ini) 詳解

choushi2420發表於2018-05-09

# 以下選項會被MySQL客戶端應用讀取。  
# 注意只有MySQL附帶的客戶端應用程式保證可以讀取這段內容。  
# 如果你想你自己的MySQL應用程式獲取這些值。  
# 需要在MySQL客戶端庫初始化的時候指定這些選項。
[client]
port        = 3306
socket      = /usr/local/mysql/mysql.sock
# MySQL 服務端
[mysqld]
#預設儲存引擎INNODB
default-storage-engine=INNODB
#GROUP_CONCAT長度
group_concat_max_len =99999
#埠號
port        = 3306
#socket位置
socket      = /usr/local/mysql/mysql.sock 
#pid寫入檔案位置
pid-file        = /usr/local/mysql/mysqld.pid
#資料庫檔案位置
datadir         = /home/data/mysql/data
user        = mysql
#SQL模式具體查閱相關資料
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#當外部鎖定(external-locking)起作用時,每個程式若要訪問資料表,
#則必須等待之前的程式完成操作並解除鎖定。由於伺服器訪問資料表時經常需要等待解鎖,
#因此在單伺服器環境下external locking會讓MySQL效能下降。
#所以在很多Linux發行版的源中,MySQL配置檔案中預設使用了skip-external-locking來避免external locking。
skip-external-locking
#跳過DNS反向解析
skip-name-resolve
#關閉TIMESTAMP型別預設值
explicit_defaults_for_timestamp

#不受client字符集影響,保證sever端字符集
skip-character-set-client-handshake
#初始連線字符集UTF8
init-connect='SET NAMES utf8'
#預設資料庫字符集
character-set-server=utf8

#查詢快取0,1,2,分別代表了off、on、demand
query_cache_type = 1
#單位秒,握手時間超過connect_timeout,連線請求將會被拒絕
connect_timeout = 20
#設定在多少秒沒收到主庫傳來的Binary Logs events之後,從庫認為網路超時,Slave IO執行緒會重新連線主庫。
#該引數的預設值是3600s ,然而時間太久會造成資料庫延遲或者主備庫直接的連結異常不能及時發現。
#將 slave_net_timeout 設得很短會造成 Master 沒有資料更新時頻繁重連。一般線上設定為5s 
slave_net_timeout = 30

#這個引數用來配置從伺服器的更新是否寫入二進位制日誌,這個選項預設是不開啟的,
#但是,如果這個從伺服器B是伺服器A的從伺服器,同時還作為伺服器C的主伺服器,那麼就需要開發這個選項,
#這樣它的從伺服器C才能獲得它的二進位制日誌進行同步操作
log-slave-updates=1
#用於slave伺服器,io執行緒會把server id與自己相同的event寫入日誌,與log-slave-updates選項衝突
replicate-same-server-id=0
# 對了生成唯一的server_id我想到了,大家ip地址唯一,比如10.112.87.91 ,就直接去掉點號在後面加上編號01或者02或者03(加上2位數編號是怕一臺物理機
滄岸嗍道,主從複製需要server-id來標識的
# 用10112879101做server_id就可以了。
server_id=10112879101
# 開啟二進位制日誌功能.  
# 在複製(replication)配置中,作為MASTER主伺服器必須開啟此項  
# 如果你需要從你最後的備份中做基於時間點的恢復,你也同樣需要二進位制日誌
log-bin =/home/data/mysql/binlog/mysql-bin.log
#relay-log日誌
relay-log=mysql-relay-bin
#master-info-repository以及relay-log-info-repository開啟以啟用崩潰安全的二進位制日誌/從伺服器功能(在事務表而不是平面檔案中儲存資訊)
master-info-repository=TABLE
relay-log-info-repository=TABLE

#不寫入binlog二進位制日誌中的資料庫
binlog-ignore-db=mysql              # No sync databases
binlog-ignore-db=test               # No sync databases
binlog-ignore-db=information_schema     # No sync databases
binlog-ignore-db=performance_schema     # No sync databases

#寫入binlog二進位制日誌中資料庫
binlog-do-db=business_db
binlog-do-db=user_db
binlog-do-db=plocc_system

#15滾動清理binlog
expire-logs-days=15
max_binlog_size = 1073741824            # Bin logs size ( 1G )

#使binlog在每1000次binlog寫入後與硬碟同步
sync_binlog = 1000

#指定只複製哪個庫的資料
replicate-do-db=business_db
replicate-do-db=user_db
replicate-do-db=plocc_system

#開啟事件排程器Event Scheduler
event_scheduler=1
#MySQL能暫存的連線數量。當主要MySQL執行緒在一個很短時間內得到非常多的連線請求,這就起作用。
#如果MySQL的連線資料達到max_connections時,新來的請求將會被存在堆疊中,以等待某一連線釋放資源,
#該堆疊的數量即back_log,如果等待連線的數量超過back_log,將不被授予連線資源
back_log = 500

#整個資料庫最大連線(使用者)數
max_connections = 6000
#一個使用者的最大連線數
max_user_connection=3000 
# 每個客戶端連線最大的錯誤允許數量,如果達到了此限制.  
# 這個客戶端將會被MySQL服務阻止直到執行了”FLUSH HOSTS” 或者服務重啟  
# 非法的密碼以及其他在連結時的錯誤會增加此值.  
# 檢視 “Aborted_connects” 狀態來獲取全域性計數器
max_connect_errors = 1844674407370954751
#表描述符快取大小,可減少檔案開啟/關閉次數
table_open_cache = 2048

# 服務所能處理的請求包的最大大小以及服務所能處理的最大的請求大小(當與大的BLOB欄位一起工作時相當必要)  
# 每個連線獨立的大小.大小動態增加
max_allowed_packet = 64M
# 在一個事務中binlog為了記錄SQL狀態所持有的cache大小  
# 如果你經常使用大的,多宣告的事務,你可以增加此值來獲取更大的效能.  
# 所有從事務來的狀態都將被緩衝在binlog緩衝中然後在提交後一次性寫入到binlog中  
# 如果事務比此值大, 會使用磁碟上的臨時檔案來替代.  
# 此緩衝在每個連線的事務第一次更新狀態時被建立
binlog_cache_size = 1M
# 獨立的記憶體表所允許的最大容量.  
# 此選項為了防止意外建立一個超大的記憶體表導致用盡所有的記憶體資源.
max_heap_table_size = 1342177280
# 排序緩衝被用來處理類似ORDER BY以及GROUP BY佇列所引起的排序  
# 如果排序後的資料無法放入排序緩衝,  
# 一個用來替代的基於磁碟的合併分類會被使用  
# 檢視 “Sort_merge_passes” 狀態變數.  
# 在排序發生時由每個執行緒分配
sort_buffer_size = 8M
# 此緩衝被使用來優化全聯合(full JOINs 不帶索引的聯合).  
# 類似的聯合在極大多數情況下有非常糟糕的效能表現,  
# 但是將此值設大能夠減輕效能影響.  
# 通過 “Select_full_join” 狀態變數檢視全聯合的數量  
# 當全聯合發生時,在每個執行緒中分配 
join_buffer_size = 8M
# 我們在cache中保留多少執行緒用於重用  
# 當一個客戶端斷開連線後,如果cache中的執行緒還少於thread_cache_size,  
# 則客戶端執行緒被放入cache中.  
# 這可以在你需要大量新連線的時候極大的減少執行緒建立的開銷  
# (一般來說如果你有好的執行緒模型的話,這不會有明顯的效能提升.)
thread_cache_size = 128
# 此允許應用程式給予執行緒系統一個提示在同一時間給予渴望被執行的執行緒的數量.  
# 此值只對於支援 thread_concurrency() 函式的系統有意義( 例如Sun Solaris).  
# 你可可以嘗試使用 [CPU數量]*(2..4) 來作為thread_concurrency的值
thread_concurrency = 8
# 查詢緩衝常被用來緩衝 SELECT 的結果並且在下一次同樣查詢的時候不再執行直接返回結果.  
# 開啟查詢緩衝可以極大的提高伺服器速度, 如果你有大量的相同的查詢並且很少修改表.  
# 檢視 “Qcache_lowmem_prunes” 狀態變數來檢查是否當前值對於你的負載來說是否足夠高.  
# 注意: 在你表經常變化的情況下或者如果你的查詢原文每次都不同,  
# 查詢緩衝也許引起效能下降而不是效能提升.
query_cache_size = 64M
# 只有小於此設定值的結果才會被緩衝  
# 此設定用來保護查詢緩衝,防止一個極大的結果集將其他所有的查詢結果都覆蓋
query_cache_limit = 2M
# 被全文檢索索引的最小的字長.  
# 你也許希望減少它,如果你需要搜尋更短字的時候.  
# 注意在你修改此值之後,  
# 你需要重建你的 FULLTEXT 索引
ft_min_word_len = 4
# 執行緒使用的堆大小. 此容量的記憶體在每次連線時被預留.  
# MySQL 本身常不會需要超過64K的記憶體  
# 如果你使用你自己的需要大量堆的UDF函式  
# 或者你的作業系統對於某些操作需要更多的堆,  
# 你也許需要將其設定的更高一點. 
thread_stack = 192K
# 設定預設的事務隔離級別.可用的級別如下:  
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = READ-COMMITTED
# 內部(記憶體中)臨時表的最大大小  
# 如果一個表增長到比此值更大,將會自動轉換為基於磁碟的表.  
# 此限制是針對單個表的,而不是總和.
tmp_table_size = 1342177280


#binlog日誌型別--混合型
binlog_format=mixed
#開啟慢查詢日誌
slow_query_log
#檔案格式
log_output = FILE
# 所有的使用了比這個時間(以秒為單位)更多的查詢會被認為是慢速查詢.  
# 不要在這裡使用”0″, 否則會導致所有的查詢,甚至非常快的查詢頁被記錄下來(由於MySQL 目前時間的精確度只能達到秒的級別).  
long_query_time = 0.5
#慢查詢日誌位置
slow_query_log_file=/usr/local/mysql/mysqld_slow.log
#指定索引緩衝區的大小,它決定索引處理的速度,尤其是索引讀的速度

#******************** MyISAM 相關選項********************************
# 關鍵詞緩衝的大小, 一般用來緩衝MyISAM表的索引塊.  
# 不要將其設定大於你可用記憶體的30%,  
# 因為一部分記憶體同樣被OS用來緩衝行資料  
# 甚至在你並不使用MyISAM 表的情況下, 你也需要仍舊設定起 8-64M 記憶體由於它同樣會被內部臨時磁碟表使用.
key_buffer_size = 32M
# 用來做MyISAM表全表掃描的緩衝大小.  
# 當全表掃描需要時,在對應執行緒中分配.
read_buffer_size = 2M
# 當在排序之後,從一個已經排序好的序列中讀取行時,行資料將從這個緩衝中讀取來防止磁碟尋道.  
# 如果你增高此值,可以提高很多ORDER BY的效能.  
# 當需要時由每個執行緒分配  
read_rnd_buffer_size = 8M
# MyISAM 使用特殊的類似樹的cache來使得突發插入  
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA  
# INFILE) 更快. 此變數限制每個程式中緩衝樹的位元組數.  
# 設定為 0 會關閉此優化.  
# 為了最優化不要將此值設定大於 “key_buffer_size”.  
# 當突發插入被檢測到時此緩衝將被分配.
bulk_insert_buffer_size = 16M
# 此緩衝當MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引起重建索引時被分配.  
# 這在每個執行緒中被分配.所以在設定大值時需要小心.
myisam_sort_buffer_size = 128M
# MySQL重建索引時所允許的最大臨時檔案的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).  
# 如果檔案大小比此值更大,索引會通過鍵值緩衝建立(更慢) 
myisam_max_sort_file_size = 1G
# 如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個執行緒去修復他們.  
# 這對於擁有多個CPU以及大量記憶體情況的使用者,是一個很好的選擇.
myisam_repair_threads = 1
# 自動檢查和修復沒有適當關閉的 MyISAM 表. 
myisam_recover

# *************** INNODB 相關選項 ********************* 
# 如果你的MySQL服務包含InnoDB支援但是並不打算使用的話,  
# 使用此選項會節省記憶體以及磁碟空間,並且加速某些部分  
#skip-innodb

# #####[關鍵項]
# InnoDB使用一個緩衝池來儲存索引和原始資料, 不像 MyISAM.  
# 這裡你設定越大,你在存取表裡面資料時所需要的磁碟I/O越少.  
# 在一個獨立使用的資料庫伺服器上,你可以設定這個變數到伺服器實體記憶體大小的80%  
# 不要設定過大,否則,由於實體記憶體的競爭可能導致作業系統的換頁顛簸.  
# 注意在32位系統上你每個程式可能被限制在 2-3.5G 使用者層面記憶體限制,  
# 所以不要設定的太高.
innodb_buffer_pool_size = 700m #1G
# InnoDB 將資料儲存在一個或者多個資料檔案中成為表空間.  
# 如果你只有單個邏輯驅動儲存你的資料,一個單個的自增檔案就足夠好了.  
# 其他情況下.每個裝置一個檔案一般都是個好的選擇.  
# 你也可以配置InnoDB來使用裸盤分割槽 – 請參考手冊來獲取更多相關內容
innodb_data_file_path = IBdata1:1024M;IBdata2:1024M:autoextend
# 設定此選項如果你希望InnoDB表空間檔案被儲存在其他分割槽.  
# 預設儲存在MySQL的datadir中.  
#innodb_data_home_dir = 
# 用來同步IO操作的IO執行緒的數量. This value is  
# 此值在Unix下被硬編碼為4,但是在Windows磁碟I/O可能在一個大數值下表現的更好. 
innodb_file_io_threads = 4
# 在InnoDb核心內的允許執行緒數量.  
# 最優值依賴於應用程式,硬體以及作業系統的排程方式.  
# 過高的值可能導致執行緒的互斥顛簸.
innodb_thread_concurrency = 16
# #####[關鍵項]
# 如果設定為1 ,InnoDB會在每次提交後重新整理(fsync)事務日誌到磁碟上,  
# 這提供了完整的ACID行為.  
# 如果你願意對事務安全折衷, 並且你正在執行一個小的事務, 你可以設定此值到0或者2來減少由事務日誌引起的磁碟I/O  
# 0代表日誌只大約每秒寫入日誌檔案並且日誌檔案重新整理到磁碟.  
# 2代表日誌寫入日誌檔案在每次提交後,但是日誌檔案只有大約每秒才會重新整理到磁碟上. 
# --------------------
# (說明:如果是遊戲伺服器,建議此值設定為2;如果是對資料安全要求極高的應用,建議設定為1;
# 設定為0效能最高,但如果發生故障,資料可能會有丟失的危險!
# 預設值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。
# 特別是使用電池供電快取(Battery backed up cache)時。設成2對於很多運用,特別是從MyISAM錶轉過來的是可以的,
# 它的意思是不寫入硬碟而是寫入系統快取。日誌仍然會每秒flush到硬碟,所以你一般不會丟失超過1-2秒的更新。
# 設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的資料。而值2只會在整個作業系統掛了時才可能丟資料)
innodb_flush_log_at_trx_commit = 2

# 用來緩衝日誌資料的緩衝區的大小.  
# 當此值快滿時, InnoDB將必須重新整理資料到磁碟上.  
# 由於基本上每秒都會重新整理一次,所以沒有必要將此值設定的太大(甚至對於長事務而言) 
innodb_log_buffer_size = 16M

# 在日誌組中每個日誌檔案的大小.  
# 你應該設定日誌檔案總合大小到你緩衝池大小的25%~100%  
# 來避免在日誌檔案覆寫上不必要的緩衝池重新整理行為.  
# 不論如何, 請注意一個大的日誌檔案大小會增加恢復程式所需要的時間
innodb_log_file_size = 1024M

# 在日誌組中的檔案總數.  
# 通常來說2~3是比較好的. 
innodb_log_files_in_group = 3

# InnoDB的日誌檔案所在位置. 預設是MySQL的datadir.  
# 你可以將其指定到一個獨立的硬碟上或者一個RAID1捲上來提高其效能  
#innodb_log_group_home_dir

# 在InnoDB緩衝池中最大允許的髒頁面的比例.  
# 如果達到限額, InnoDB會開始重新整理他們防止他們妨礙到乾淨資料頁面.  
# 這是一個軟限制,不被保證絕對執行. 
innodb_max_dirty_pages_pct = 90

# InnoDB用來重新整理日誌的方法.  
# 表空間總是使用雙重寫入重新整理方法  
# 預設值是 “fdatasync”, 另一個是 “O_DSYNC”. 
innodb_flush_method=O_DSYNC

# 在被回滾前,一個InnoDB的事務應該等待一個鎖被批准多久.  
# InnoDB在其擁有的鎖表中自動檢測事務死鎖並且回滾事務.  
# 如果你使用 LOCK TABLES 指令, 或者在同樣事務中使用除了InnoDB以外的其他事務安全的儲存引擎  
# 那麼一個死鎖可能發生而InnoDB無法注意到.  
# 這種情況下這個timeout值對於解決這種問題就非常有幫助. 
innodb_lock_wait_timeout = 30


[mysqldump]
# 不要在將記憶體中的整個結果寫入磁碟之前快取. 在匯出非常巨大的表時需要此項
quick

max_allowed_packet = 64M

[mysql]
no-auto-rehash


[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
# 增加每個程式的可開啟檔案數量.  
# 警告: 確認你已經將全系統限制設定的足夠高!  
# 開啟大量表需要將此值設大
open-files-limit = 8192
log-error=/usr/local/mysql/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid

轉載於:https://my.oschina.net/imecho/blog/1809651

相關文章