Mysql配置檔案my.ini配置項詳解

森狗道格發表於2020-06-22

可以直接Ctrl+F全域性搜尋,歡迎大家留言指正補充

#[client]
#MySQL預設密碼
#password=88888888
[mysqld]
#MySQL以什麼使用者執行
#user=mysql
#MySQL執行在哪個埠
#port=3306
#改引數指定了安裝MySQL的安裝路徑,填寫全路徑可以解決相對路徑所造成的問題
#basedir
#指定MySQL的資料庫檔案放在什麼路徑下
datadir=/usr/local/mysql/data
#mysql以socket方式執行的sock檔案位置
socket=/usr/local/mysql/mysql.sock
#是否支援符號連結,即資料庫或表可以儲存在my.cnf中指定datadir之外的分割槽或者目錄,為0不開啟
symbolic-links=0
#伺服器使用的字符集
character-set-server=utf8
#預設儲存引擎
default-storage-engine=INNODB
#表示預設將日誌檔案存入檔案,預設值是'FILE' 
#如果時候log-output=TABLE表示將日誌存入資料庫,這樣日誌資訊就會被寫入到mysql.slow_log表中
log-output=FILE
#1開啟,0關閉 將所有到達MySQL Server的SQL語句記錄下來
general-log=0
#設定日誌檔案儲存位置
general_log_file="JOYWANG.log"
#慢查詢日誌是否開啟1,0
slow-query-log=1
#慢查詢日誌檔案儲存
slow_query_log_file="JOYWANG-slow.log"
#慢查詢日誌設定時間單位秒 S
long_query_time=10
#是否啟用錯誤日誌的功能和錯誤日誌的儲存位置
log-error="JOYWANG.err"
#如果不設定則server-id是根據伺服器ip地址後2位生成的,預設0或1
#當配置MySQL複製時,是必填項,用來區分複製拓撲中的各個例項
server-id=1
#限制匯入和匯出的目錄許可權NULL表示禁止、如果是檔案目錄,允許該目錄下檔案(測試子目錄不行)、如果為空則表示不限制目錄,一定要有等號,否則mysql無法啟動
secure-file-priv=
#最大併發連線數,mysql會為每個連線提供緩衝區,會開銷越多的記憶體,所以要適當的調整該值,不能盲目的提高設定值
max_connections=151
#指定快取記憶體的大小,每當MySQL訪問一個表時,如果在表緩衝區中還有空間,該表就被開啟並放入其中,這樣可以更快地訪問表內容單位M
table_open_cache=2000
#增加一張臨時表大小,提高查詢速度
tmp_table_size=16M
#執行緒池快取大小,當客戶端斷開連線後,將當前執行緒快取起來,當在接到新的連線請求時快速響應,無需建立新的執行緒
thread_cache_size=10
#MySQL重建索引時允許使用的臨時檔案最大大小
myisam_max_sort_file_size=100G
#設定在REPAIR TABLE,或者用 CREATE INDEX 建立索引或 ALTER TABLE 的過程中排序索引所分配的緩衝區大小。可設定範圍4Bytes 至 4GB,預設為8MB。
myisam_sort_buffer_size=8M
#指定索引緩衝區的大小,決定了索引處理的速度,尤其是索引讀的速度,建議設定成實體記憶體的1/4,甚至實體記憶體的30%-40%,如果設定太大,系統就會頻繁的換頁,降低系統效能
key_buffer_size=8M
#MySQL讀入緩衝區大小,對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能。
read_buffer_size=0
#引數用在sort查詢之後 ,以保證獲取以順序的方式獲取到查詢的資料。如果你有很多order by 查詢語句,增長這值能夠提升效能
read_rnd_buffer_size=0
#0:log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁碟)操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁碟的操作。
#1:每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去,該模式為系統預設。
#2:每次事務提交時MySQL都會把log buffer的資料寫入log file,但是flush(刷到磁碟)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁碟)操作。
innodb_flush_log_at_trx_commit=1
#確保有足夠大的日誌緩衝區來儲存髒資料在被寫入到日誌檔案之前
innodb_log_buffer_size=1M
#指定表資料和索引儲存的空間,可以是一個或者多個檔案。最後一個資料檔案必須是自動擴充的,也只有最後一個檔案允許自動擴充。這樣,當空間用完後,自動擴充資料檔案就會自動增長(以8MB為單位)以容納額外的資料。例如: innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend兩個資料檔案放在不同的磁碟上。資料首先放在ibdata1中,當達到900M以後,資料就放在ibdata2中。一旦達到50MB,ibdata2將以 8MB為單位自動增長。如果磁碟滿了,需要在另外的磁碟上面增加一個資料檔案。
innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend
#這是InnoDB最重要的設定,對InnoDB效能有決定性的影響。預設的設定只有8M,所以預設的資料庫設定下面InnoDB效能很差。在只有InnoDB儲存引擎的資料庫伺服器上面,可以設定60-80%的記憶體。更精確一點,在記憶體容量允許的情況下面設定比InnoDB tablespaces大10%的記憶體大小。
innodb_buffer_pool_size=8M
#放置表空間資料的目錄,預設在mysql的資料目錄,設定到和MySQL安裝檔案不同的分割槽可以提高效能。
innodb_data_home_dir=
#該引數決定了recovery speed。太大的話recovery就會比較慢,太小了影響查詢效能,一般取256M可以兼顧效能和recovery的速度
innodb_log_file_size=48M
#該引數設定了事務提交時記憶體中log資訊的處理。
1) =1時,在每個事務提交時,日誌緩衝被寫到日誌檔案,對日誌檔案做到磁碟操作的重新整理。Truly ACID。速度慢。
2) =2時,在每個事務提交時,日誌緩衝被寫到檔案, 但不對日誌檔案做到磁碟操作的重新整理。只有作業系統崩潰或掉電才會刪除最後一秒的事務,不然不會丟失事務。
3) =0時, 日誌緩衝每秒一次地被寫到日誌檔案,並且對日誌檔案做到磁碟操作的重新整理。任何mysqld程式的崩潰會刪除崩潰前最後一秒的事務
innodb_flush_logs_at_trx_commit=2
#設定InnoDB同步IO的方式:
) Default – 使用fsync()。
2) O_SYNC 以sync模式開啟檔案,通常比較慢。
3) O_DIRECT,在Linux上使用Direct IO。可以顯著提高速度,特別是在RAID系統上。避免額外的資料複製和double buffering(mysql buffering 和OS buffering)。
innodb_flush_method=Default
#InnoDB kernel最大的執行緒數。
1) 最少設定為(num_disks+num_cpus)*2。
2) 可以通過設定成1000來禁止這個限制
innodb_thread_concurrency=25
#此配置項作用主要是當tablespace 空間已經滿了後,需要MySQL系統需要自動擴充套件多少空間,每次tablespace 擴充套件都會讓各個SQL 處於等待狀態。增加自動擴充套件Size可以減少tablespace自動擴充套件次數。
innodb_autoextend_increment=64
#可以開啟多個記憶體緩衝池,把需要緩衝的資料hash到不同的緩衝池中,這樣可以並行的記憶體讀寫。
innodb_buffer_pool_instances=8
#這個引數設定為一種tickets,預設是5000,我也不清楚到底它代表多久,從官方文件來看它和事物處理的行數有關,大事物需要處理的行數自然更多,小事物當然也就越少至少我們可以想成獲得CPU的時間,幹活期間他會不斷減少,如果減少到0,這個執行緒將被提出innodb層次,進入前面說的等待佇列,當然也就在隊尾部了,這裡假設有一個小的事物正在排隊進入innodb層,又或者它已經進入了innodb層沒有獲得CPU時間輪片,突然一個大的事物tickets耗盡被提出了innodb層,那麼這個小事物就自然而然能夠獲得CPU輪片幹活,而小事物執行非常快,執行完成後,另外的事物又能儘快的獲得CPU幹活,不會由於OS執行緒排程不均勻的問題而造成的小事物飢餓問題,這很好理解。也就是前面我說的與其依賴OS的排程策略不如自己設定一種規則,讓用到了一定時間輪片的執行緒先處於睡眠態放棄CPU的使用
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
#可以儲存每個InnoDB表和它的索引在它自己的檔案中。
innodb_file_per_table=1
#如果應用程式可以執行在READ-COMMITED隔離級別,做此設定會有一定的效能提升。
transaction-isolation=READ-COMITTED
#這個引數用來表示 頁讀取到mid位置後,需要等待多久才會被加入到LRU列表的熱端。使LRU列表中的熱點資料不被刷出
innodb_checksum_algorithm=0
#MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆疊中
back_log=80
flush_time=0
#如果按照檢索的效能方式來細分,那麼無論是兩表 INNER JOIN 還是多表 INNER JOIN,都大致可以分為以下幾類:1.JOIN KEY 有索引,主鍵2.JOIN KEY 有索引, 二級索引3.JOIN KEY 無索引;JOIN BUFFER 是 MySQL 用來快取以上第二、第三這兩類 JOIN 檢索的一個 BUFFER 記憶體區域塊。
join_buffer_size=256K
#可以增大此值以便於server端接收更大的SQL
max_allowed_packet=4M
#同一主機最大連續請求錯誤次數,如果還沒成功建立連線,mysql伺服器會組織這臺主機後續的所有請求
max_connect_errors=100
#限制mysqld能開啟檔案的最大數
open_files_limit=4161
#一個connection級引數,在每個connection第一次需要使用這個buffer的時候,一次性分配設定的記憶體
sort_buffer_size=256K
#就是控制總frm檔案的數量,還是個hash表,內部維護。如果開啟的表例項的數量超過了table_definition_cache設定,LRU機制將開始標記表例項以進行清除,並最終將它們從資料字典快取中刪除。簡單通俗點frm檔案有多少,就設定多少了
table_definition_cache=1400
#指定基於行的二進位制日誌事件的最大大小
binlog_row_event_max_size=8K
#本引數用於主從庫中配置從庫大於0作用為每個命令之後刷盤,小與0作為為永不刷盤,預設均為1000
sync_master_info=10000
#這個引數和sync_binlog是一樣的,當設定為1時,slave的I/O執行緒每次接收到master傳送過來的binlog日誌都要寫入系統緩衝區,然後刷入relay log中繼日誌裡,這樣是最安全的,因為在崩潰的時候,你最多會丟失一個事務,但會造成磁碟的大量I/O。當設定為0時,並不是馬上就刷入中繼日誌裡,而是由作業系統決定何時來寫入,雖然安全性降低了,但減少了大量的磁碟I/O操作。這個值預設是0,可動態修改,建議採用預設值。
sync_relay_log=10000
#這個引數和sync_relay_log引數一樣,當設定為1時,slave的I/O執行緒每次接收到master傳送過來的binlog日誌都要寫入系統緩衝區,然後刷入relay-log.info裡,這樣是最安全的,因為在崩潰的時候,你最多會丟失一個事務,但會造成磁碟的大量I/O。當設定為0時,並不是馬上就刷入relay-log.info裡,而是由作業系統決定何時來寫入,雖然安全性降低了,但減少了大量的磁碟I/O操作。這個值預設是0,可動態修改,建議採用預設值
sync_relay_log_info=10000
#引數不可動態修改,必須重啟資料庫
#1:儲存在磁碟是小寫,比較時不區分大小寫
#2:儲存為給定的大小寫但是比較時是小寫
#0:儲存為給定的大小寫和比較時區分大小寫的
lower_case_table_names = 1
#ONLY_FULL_GROUP_BY:歸於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因為列不在GROUP BY從句中
#NO_AUTO_VALUE_ON_ZERO:該值影響自增常烈的插入。預設設定下,插入0或者NULL代表生成下一個自增長值。如果使用者希望插入的值為0,而該列又是自增長的,那麼這個選項就有用了
#STRICT_TRANS_TABLES:如果一個值不能插入到一個事物中,則中斷當前操作,對非事物不做限制
#NO_ZERO_IN_DATE:在嚴格模式下,不允許日期和月份為零
#NO_ZERO_DATE:mysql不允許插入零日期,插入零日期會丟擲錯誤而不是警告
#ERROR_FOR_DIVISION_BY_ZERO:在insert或update過程中,如果資料被清除,則產生錯誤而非警告。如果未給出該模式,那麼資料被清除時Mysql返回NULL
#NO_AUTO_CREATE_USER:禁止GRANT建立密碼為空的使用者
#NO_ENGINE_SUBSTITUTION:如果需要的儲存引擎被禁用或未編譯,那麼丟擲錯誤。不設定此值時,用預設的儲存引擎替代,並丟擲一個異常
#PIPES_AS_CONCAT:將“||”是為字串的連結操作符而非運算子,這和Oracle資料庫是一樣是,也和字串的拼接函式Concat相類似
#ANSI_QUOTES:不能用雙引號來引用字串,因為它被解釋為識別符
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

相關文章