MySQL配置文件的路徑
查詢MySQL
的配置文件的路徑html
mysqld --verbose --help | grep -A 1 'Default options'
java
從上圖能夠看出, 服務器首先會讀取/etc/my.cnf文件,若是發現該文件不存在,再依次嘗試從後面的幾個路徑進行讀取。mysql
配置文件配置項分段
配置文件my.cnf一般會分紅好幾部分,如[client],[mysqld], [mysql]等等。MySQL程序一般是讀取與它同名的分段部分,例如服務器mysqld一般讀取[mysqld]分段下的相關配置項。若是配置項位置不正確,該配置是不會生效的。詳細文檔我以爲能夠參考這篇文章:my.cnf詳解sql
MySQL配置文件my.cnf 例子最詳細翻譯,能夠保存作筆記用。 # BEGIN CONFIG INFO # DESCR: 4GB RAM, 只使用InnoDB, ACID, 少許的鏈接, 隊列負載大 # TYPE: SYSTEM # END CONFIG INFO # # 此mysql配置文件例子針對4G內存。 # 主要使用INNODB # 處理複雜隊列而且鏈接數量較少的mysql服務器 # # 將此文件複製到/etc/my.cnf 做爲全局設置, # mysql-data-dir/my.cnf 做爲服務器指定設置 # (@localstatedir@ for this installation) 或者放入 # ~/.my.cnf 做爲用戶設置. # # 在此配置文件中, 你可使用全部程序支持的長選項. # 若是想獲悉程序支持的全部選項 # 請在程序後加上"--help"參數運行程序. # # 關於獨立選項更多的細節信息能夠在手冊內找到 # # # 如下選項會被MySQL客戶端應用讀取. # 注意只有MySQL附帶的客戶端應用程序保證能夠讀取這段內容. # 若是你想你本身的MySQL應用程序獲取這些值 # 須要在MySQL客戶端庫初始化的時候指定這些選項 # [client] #password = [your_password] port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # *** 應用定製選項 *** # # MySQL 服務端 # [mysqld] # 通常配置選項 port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # back_log 是操做系統在監聽隊列中所能保持的鏈接數, # 隊列保存了在MySQL鏈接管理器線程處理以前的鏈接. # 若是你有很是高的鏈接率而且出現"connection refused" 報錯, # 你就應該增長此處的值. # 檢查你的操做系統文檔來獲取這個變量的最大值. # 若是將back_log設定到比你操做系統限制更高的值,將會沒有效果 back_log = 50 # 不在TCP/IP端口上進行監聽. # 若是全部的進程都是在同一臺服務器鏈接到本地的mysqld, # 這樣設置將是加強安全的方法 # 全部mysqld的鏈接都是經過Unix sockets 或者命名管道進行的. # 注意在windows下若是沒有打開命名管道選項而只是用此項 # (經過 "enable-named-pipe" 選項) 將會致使mysql服務沒有任何做用! #skip-networking # MySQL 服務所容許的同時會話數的上限 # 其中一個鏈接將被SUPER權限保留做爲管理員登陸. # 即使已經達到了鏈接數的上限. max_connections = 100 # 每一個客戶端鏈接最大的錯誤容許數量,若是達到了此限制. # 這個客戶端將會被MySQL服務阻止直到執行了"FLUSH HOSTS" 或者服務重啓 # 非法的密碼以及其餘在連接時的錯誤會增長此值. # 查看 "Aborted_connects" 狀態來獲取全局計數器. max_connect_errors = 10 # 全部線程所打開表的數量. # 增長此值就增長了mysqld所須要的文件描述符的數量 # 這樣你須要確認在[mysqld_safe]中 "open-files-limit" 變量設置打開文件數量容許至少4096 table_cache = 2048 # 容許外部文件級別的鎖. 打開文件鎖會對性能形成負面影響 # 因此只有在你在一樣的文件上運行多個數據庫實例時才使用此選項(注意仍會有其餘約束!) # 或者你在文件層面上使用了其餘一些軟件依賴來鎖定MyISAM表 #external-locking # 服務所能處理的請求包的最大大小以及服務所能處理的最大的請求大小(當與大的BLOB字段一塊兒工做時至關必要) # 每一個鏈接獨立的大小.大小動態增長 max_allowed_packet = 16M # 在一個事務中binlog爲了記錄SQL狀態所持有的cache大小 # 若是你常用大的,多聲明的事務,你能夠增長此值來獲取更大的性能. # 全部從事務來的狀態都將被緩衝在binlog緩衝中而後在提交後一次性寫入到binlog中 # 若是事務比此值大, 會使用磁盤上的臨時文件來替代. # 此緩衝在每一個鏈接的事務第一次更新狀態時被建立 binlog_cache_size = 1M # 獨立的內存表所容許的最大容量. # 此選項爲了防止意外建立一個超大的內存表致使永盡全部的內存資源. max_heap_table_size = 64M # 排序緩衝被用來處理相似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 = 8 # 此容許應用程序給予線程系統一個提示在同一時間給予渴望被運行的線程的數量. # 此值只對於支持 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 # 若是你的系統支持 memlock() 函數,你也許但願打開此選項用以讓運行中的mysql在在內存高度緊張的時候,數據在內存中保持鎖定而且防止可能被swapping out # 此選項對於性能有益 #memlock # 當建立新表時做爲默認使用的表類型, # 若是在建立表示沒有特別執行表類型,將會使用此值 default_table_type = MYISAM # 線程使用的堆大小. 此容量的內存在每次鏈接時被預留. # MySQL 自己常不會須要超過64K的內存 # 若是你使用你本身的須要大量堆的UDF函數 # 或者你的操做系統對於某些操做須要更多的堆, # 你也許須要將其設置的更高一點. thread_stack = 192K # 設定默認的事務隔離級別.可用的級別以下: # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE transaction_isolation = REPEATABLE-READ # 內部(內存中)臨時表的最大大小 # 若是一個表增加到比此值更大,將會自動轉換爲基於磁盤的表. # 此限制是針對單個表的,而不是總和. tmp_table_size = 64M # 打開二進制日誌功能. # 在複製(replication)配置中,做爲MASTER主服務器必須打開此項 # 若是你須要從你最後的備份中作基於時間點的恢復,你也一樣須要二進制日誌. log-bin=mysql-bin # 若是你在使用鏈式從服務器結構的複製模式 (A->B->C), # 你須要在服務器B上打開此項. # 此選項打開在從線程上重作過的更新的日誌, # 並將其寫入從服務器的二進制日誌. #log_slave_updates # 打開全查詢日誌. 全部的由服務器接收到的查詢 (甚至對於一個錯誤語法的查詢) # 都會被記錄下來. 這對於調試很是有用, 在生產環境中經常關閉此項. #log # 將警告打印輸出到錯誤log文件. 若是你對於MySQL有任何問題 # 你應該打開警告log而且仔細審查錯誤日誌,查出可能的緣由. #log_warnings # 記錄慢速查詢. 慢速查詢是指消耗了比 "long_query_time" 定義的更多時間的查詢. # 若是 log_long_format 被打開,那些沒有使用索引的查詢也會被記錄. # 若是你常常增長新查詢到已有的系統內的話. 通常來講這是一個好主意, log_slow_queries # 全部的使用了比這個時間(以秒爲單位)更多的查詢會被認爲是慢速查詢. # 不要在這裏使用"1", 不然會致使全部的查詢,甚至很是快的查詢頁被記錄下來(因爲MySQL 目前時間的精確度只能達到秒的級別). long_query_time = 2 # 在慢速日誌中記錄更多的信息. # 通常此項最好打開. # 打開此項會記錄使得那些沒有使用索引的查詢也被做爲到慢速查詢附加到慢速日誌裏 log_long_format # 此目錄被MySQL用來保存臨時文件.例如, # 它被用來處理基於磁盤的大型排序,和內部排序同樣. # 以及簡單的臨時表. # 若是你不建立很是大的臨時文件,將其放置到 swapfs/tmpfs 文件系統上也許比較好 # 另外一種選擇是你也能夠將其放置在獨立的磁盤上. # 你可使用";"來放置多個路徑 # 他們會按照roud-robin方法被輪詢使用. #tmpdir = /tmp # *** 複製有關的設置 *** # 惟一的服務辨識號,數值位於 1 到 2^32-1之間. # 此值在master和slave上都須要設置. # 若是 "master-host" 沒有被設置,則默認爲1, 可是若是忽略此選項,MySQL不會做爲master生效. server-id = 1 # 複製的Slave (去掉master段的註釋來使其生效) # # 爲了配置此主機做爲複製的slave服務器,你能夠選擇兩種方法: # # 1) 使用 CHANGE MASTER TO 命令 (在咱們的手冊中有完整描述) - # 語法以下: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # 你須要替換掉 <host>, <user>, <password> 等被尖括號包圍的字段以及使用master的端口號替換<port> (默認3306). # # 例子: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # 或者 # # 2) 設置如下的變量. 不論如何, 在你選擇這種方法的狀況下, 而後第一次啓動複製(甚至不成功的狀況下, # 例如若是你輸入錯密碼在master-password字段而且slave沒法鏈接), # slave會建立一個 master.info 文件,而且以後任何對於包含在此文件內的參數的變化都會被忽略 # 而且由 master.info 文件內的內容覆蓋, 除非你關閉slave服務, 刪除 master.info 而且重啓slave 服務. # 因爲這個緣由,你也許不想碰一下的配置(註釋掉的) 而且使用 CHANGE MASTER TO (查看上面) 來代替 # # 所須要的惟一id號位於 2 和 2^32 - 1之間 # (而且和master不一樣) # 若是master-host被設置了.則默認值是2 # 可是若是省略,則不會生效 #server-id = 2 # # 複製結構中的master - 必須 #master-host = <hostname> # # 當鏈接到master上時slave所用來認證的用戶名 - 必須 #master-user = <username> # # 當鏈接到master上時slave所用來認證的密碼 - 必須 #master-password = <password> # # master監聽的端口. # 可選 - 默認是3306 #master-port = <port> # 使得slave只讀.只有用戶擁有SUPER權限和在上面的slave線程可以修改數據. # 你可使用此項去保證沒有應用程序會意外的修改slave而不是master上的數據 #read_only # *** MyISAM 相關選項 *** # 關鍵詞緩衝的大小, 通常用來緩衝MyISAM表的索引塊. # 不要將其設置大於你可用內存的30%, # 由於一部份內存一樣被OS用來緩衝行數據 # 甚至在你並不使用MyISAM 表的狀況下, 你也須要仍舊設置起 8-64M 內存因爲它一樣會被內部臨時磁盤表使用. key_buffer_size = 32M # 用來作MyISAM表全表掃描的緩衝大小. # 當全表掃描須要時,在對應線程中分配. read_buffer_size = 2M # 當在排序以後,從一個已經排序好的序列中讀取行時,行數據將從這個緩衝中讀取來防止磁盤尋道. # 若是你增高此值,能夠提升不少ORDER BY的性能. # 當須要時由每一個線程分配 read_rnd_buffer_size = 16M # MyISAM 使用特殊的相似樹的cache來使得突發插入 # (這些插入是,INSERT SELECT, INSERT VALUES (), (), , 以及 LOAD DATA # INFILE) 更快. 此變量限制每一個進程中緩衝樹的字節數. # 設置爲 0 會關閉此優化. # 爲了最優化不要將此值設置大於 "key_buffer_size". # 當突發插入被檢測到時此緩衝將被分配. bulk_insert_buffer_size = 64M # 此緩衝當MySQL須要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引發重建索引時被分配. # 這在每一個線程中被分配.因此在設置大值時須要當心. myisam_sort_buffer_size = 128M # MySQL重建索引時所容許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE). # 若是文件大小比此值更大,索引會經過鍵值緩衝建立(更慢) myisam_max_sort_file_size = 10G # 若是被用來更快的索引建立索引所使用臨時文件大於制定的值,那就使用鍵值緩衝方法. # 這主要用來強制在大表中長字串鍵去使用慢速的鍵值緩衝方法來建立索引. myisam_max_extra_sort_file_size = 10G # 若是一個表擁有超過一個索引, MyISAM 能夠經過並行排序使用超過一個線程去修復他們. # 這對於擁有多個CPU以及大量內存狀況的用戶,是一個很好的選擇. myisam_repair_threads = 1 # 自動檢查和修復沒有適當關閉的 MyISAM 表. myisam_recover # 默認關閉 Federated skip-federated # *** BDB 相關選項 *** # 若是你運行的MySQL服務有BDB支持可是你不許備使用的時候使用此選項. 這會節省內存而且可能加速一些事. skip-bdb # *** INNODB 相關選項 *** # 若是你的MySQL服務包含InnoDB支持可是並不打算使用的話, # 使用此選項會節省內存以及磁盤空間,而且加速某些部分 #skip-innodb # 附加的內存池被InnoDB用來保存 metadata 信息 # 若是InnoDB爲此目的須要更多的內存,它會開始從OS這裏申請內存. # 因爲這個操做在大多數現代操做系統上已經足夠快, 你通常不須要修改此值. # SHOW INNODB STATUS 命令會顯示當先使用的數量. innodb_additional_mem_pool_size = 16M # InnoDB使用一個緩衝池來保存索引和原始數據, 不像 MyISAM. # 這裏你設置越大,你在存取表裏面數據時所須要的磁盤I/O越少. # 在一個獨立使用的數據庫服務器上,你能夠設置這個變量到服務器物理內存大小的80% # 不要設置過大,不然,因爲物理內存的競爭可能致使操做系統的換頁顛簸. # 注意在32位系統上你每一個進程可能被限制在 2-3.5G 用戶層面內存限制, # 因此不要設置的過高. innodb_buffer_pool_size = 2G # InnoDB 將數據保存在一個或者多個數據文件中成爲表空間. # 若是你只有單個邏輯驅動保存你的數據,一個單個的自增文件就足夠好了. # 其餘狀況下.每一個設備一個文件通常都是個好的選擇. # 你也能夠配置InnoDB來使用裸盤分區 - 請參考手冊來獲取更多相關內容 innodb_data_file_path = ibdata1:10M:autoextend # 設置此選項若是你但願InnoDB表空間文件被保存在其餘分區. # 默認保存在MySQL的datadir中. #innodb_data_home_dir = <directory> # 用來同步IO操做的IO線程的數量. This value is # 此值在Unix下被硬編碼爲4,可是在Windows磁盤I/O可能在一個大數值下表現的更好. innodb_file_io_threads = 4 # 若是你發現InnoDB表空間損壞, 設置此值爲一個非零值可能幫助你導出你的表. # 從1開始而且增長此值知道你可以成功的導出表. #innodb_force_recovery=1 # 在InnoDb核心內的容許線程數量. # 最優值依賴於應用程序,硬件以及操做系統的調度方式. # 太高的值可能致使線程的互斥顛簸. innodb_thread_concurrency = 16 # 若是設置爲1 ,InnoDB會在每次提交後刷新(fsync)事務日誌到磁盤上, # 這提供了完整的ACID行爲. # 若是你願意對事務安全折衷, 而且你正在運行一個小的食物, 你能夠設置此值到0或者2來減小由事務日誌引發的磁盤I/O # 0表明日誌只大約每秒寫入日誌文件而且日誌文件刷新到磁盤. # 2表明日誌寫入日誌文件在每次提交後,可是日誌文件只有大約每秒纔會刷新到磁盤上. innodb_flush_log_at_trx_commit = 1 # 加速InnoDB的關閉. 這會阻止InnoDB在關閉時作全清除以及插入緩衝合併. # 這可能極大增長關機時間, 可是取而代之的是InnoDB可能在下次啓動時作這些操做. #innodb_fast_shutdown # 用來緩衝日誌數據的緩衝區的大小. # 當此值快滿時, InnoDB將必須刷新數據到磁盤上. # 因爲基本上每秒都會刷新一次,因此沒有必要將此值設置的太大(甚至對於長事務而言) innodb_log_buffer_size = 8M # 在日誌組中每一個日誌文件的大小. # 你應該設置日誌文件總合大小到你緩衝池大小的25%~100% # 來避免在日誌文件覆寫上沒必要要的緩衝池刷新行爲. # 不論如何, 請注意一個大的日誌文件大小會增長恢復進程所須要的時間. innodb_log_file_size = 256M # 在日誌組中的文件總數. # 一般來講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 = 120 [mysqldump] # 不要在將內存中的整個結果寫入磁盤以前緩存. 在導出很是巨大的表時須要此項 quick max_allowed_packet = 16M [mysql] no-auto-rehash # 僅僅容許使用鍵值的 UPDATEs 和 DELETEs . #safe-updates [isamchk] key_buffer = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [myisamchk] key_buffer = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [mysqlhotcopy] interactive-timeout [mysqld_safe] # 增長每一個進程的可打開文件數量. # 警告: 確認你已經將全系統限制設定的足夠高! # 打開大量表須要將此值設b open-files-limit = 8192