MySQL配置文件my.cnf詳解
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=, MASTER_PORT= , # MASTER_USER=, MASTER_PASSWORD= ; # # 你須要替換掉 , , 等被尖括號包圍的字段以及使用master的端口號替換 (默認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 = # # 當鏈接到master上時slave所用來認證的用戶名 – 必須 #master-user = # # 當鏈接到master上時slave所用來認證的密碼 – 必須 #master-password = # # master監聽的端口. # 可選 – 默認是3306 #master-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 = # 用來同步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 ====================================================================== Mysql參數優化對於新手來說,是比較難懂的東西,其實這個參數優化,是個很複雜的東西,對於不一樣的網站,及其在線量,訪問量,帖子數量,網絡狀況,以及機器硬件配置都有關係,優化不可能一次性完成,須要不斷的觀察以及調試,纔有可能獲得最佳效果。 下面先說個人服務器的硬件以及論壇狀況, CPU: 2顆四核Intel Xeon 2.00GHz 內存: 4GB DDR 硬盤: SCSI 146GB 論壇:在線會員 通常在 5000 人左右 – 最高記錄是 13264. 下面,咱們根據以上硬件配置結合一份已經作過一次優化的my.cnf進行分析說明:有些參數可能還得根據論壇的變化狀況以及程序員的程序進行再調整。 [mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking # 避免MySQL的外部鎖定,減小出錯概率加強穩定性。 skip-name-resolve 禁止MySQL對外部鏈接進行DNS解析,使用這一選項能夠消除MySQL進行DNS解析的時間。但須要注意,若是開啓該選項,則全部遠程主機鏈接受權都要使用IP地址方式,不然MySQL將沒法正常處理鏈接請求! back_log = 500 要求 MySQL 能有的鏈接數量。當主要MySQL線程在一個很短期內獲得很是多的鏈接請求,這就起做用,而後主線程花些時間(儘管很短)檢查鏈接而且啓動一個新線程。 back_log 值指出在MySQL暫時中止回答新請求以前的短期內多少個請求能夠被存在堆棧中。只有若是指望在一個短期內有不少鏈接,你須要增長它,換句話說,這值 對到來的TCP/IP鏈接的偵聽隊列的大小。你的操做系統在這個隊列大小上有它本身的限制。試圖設定back_log高於你的操做系統的限制將是無效的。 當你觀察你的主機進程列表,發現大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待鏈接進程時,就要加大 back_log 的值了。默認數值是50,我把它改成500。 key_buffer_size = 384M # key_buffer_size指定用於索引的緩衝區大小,增長它可獲得更好處理的索引(對全部讀和多重寫),到你能負擔得起那樣多。若是你使它太大,系 統將開始換頁而且真的變慢了。對於內存在4GB左右的服務器該參數可設置爲384M或512M。經過檢查狀態值Key_read_requests和 Key_reads,能夠知道key_buffer_size設置是否合理。比例key_reads / key_read_requests應該儘量的低,至少是1:100,1:1000更好(上述狀態值可使用SHOW STATUS LIKE ‘key_read%’得到)。注意:該參數值設置的過大反而會是服務器總體效率下降! max_allowed_packet = 32M 增 加該變量的值十分安全,這是由於僅當須要時纔會分配額外內存。例如,僅當你發出長查詢或mysqld必須返回大的結果行時mysqld纔會分配更多內存。 該變量之因此取較小默認值是一種預防措施,以捕獲客戶端和服務器之間的錯誤信息包,並確保不會因偶然使用大的信息包而致使內存溢出。 table_cache = 512 table_cache 指定表高速緩存的大小。每當MySQL訪問一個表時,若是在表緩衝區中還有空間,該表就被打開並放入其中,這樣能夠更快地訪問表內容。經過檢查峯值時間的 狀態值Open_tables和Opened_tables,能夠決定是否須要增長table_cache的值。若是你發現open_tables等於 table_cache,而且opened_tables在不斷增加,那麼你就須要增長table_cache的值了(上述狀態值可使用SHOW STATUS LIKE ‘Open%tables’得到)。注意,不能盲目地把table_cache設置成很大的值。若是設置得過高,可能會形成文件描述符不足,從而形成性能 不穩定或者鏈接失敗。 sort_buffer_size = 4M 查詢排序時所能使用的緩衝區大小。注意:該參數對應的分配內存是每鏈接獨佔!若是有100個鏈接,那麼實際分配的總共排序緩衝區大小爲100 × 4 = 400MB。因此,對於內存在4GB左右的服務器推薦設置爲4-8M。 read_buffer_size = 4M 讀查詢操做所能使用的緩衝區大小。和sort_buffer_size同樣,該參數對應的分配內存也是每鏈接獨享! join_buffer_size = 8M 聯合查詢操做所能使用的緩衝區大小,和sort_buffer_size同樣,該參數對應的分配內存也是每鏈接獨享! myisam_sort_buffer_size = 64M MyISAM表發生變化時從新排序所需的緩衝 query_cache_size = 64M 指定MySQL查詢緩衝區的大小。能夠經過在MySQL控制檯執行如下命令觀察: # > SHOW VARIABLES LIKE ‘%query_cache%’; # > SHOW STATUS LIKE ‘Qcache%’; # 若是Qcache_lowmem_prunes的值很是大,則代表常常出現緩衝不夠的狀況; 若是Qcache_hits的值很是大,則代表查詢緩衝使用很是頻繁,若是該值較小反而會影響效率,那麼能夠考慮不用查詢緩衝;Qcache_free_blocks,若是該值很是大,則代表緩衝區中碎片不少。 thread_cache_size = 64 可 以複用的保存在中的線程的數量。若是有,新的線程從緩存中取得,當斷開鏈接的時候若是有空間,客戶的線置在緩存中。若是有不少新的線程,爲了提升性能能夠 這個變量值。經過比較 Connections 和 Threads_created 狀態的變量,能夠看到這個變量的做用 tmp_table_size = 256M max_connections = 1000 指定MySQL容許的最大鏈接進程數。若是在訪問論壇時常常出現Too Many Connections的錯誤提示,則須要增大該參數值。 max_connect_errors = 10000000 對於同一主機,若是有超出該參數值個數的中斷錯誤鏈接,則該主機將被禁止鏈接。如需對該主機進行解禁,執行:FLUSH HOST;。 wait_timeout = 10 指定一個請求的最大鏈接時間,對於4GB左右內存的服務器能夠設置爲5-10。 thread_concurrency = 8 該參數取值爲服務器邏輯CPU數量×2,在本例中,服務器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,因此實際取值爲4 × 2 = 8 skip-networking 開啓該選項能夠完全關閉MySQL的TCP/IP鏈接方式,若是WEB服務器是以遠程鏈接的方式訪問MySQL數據庫服務器則不要開啓該選項!不然將沒法正常鏈接! long_query_time = 10 log-slow-queries = log-queries-not-using-indexes 開啓慢查詢日誌( slow query log ) 慢查詢日誌對於跟蹤有問題的查詢很是有用。它記錄全部查過long_query_time的查詢,若是須要,還能夠記錄不使用索引的記錄。下面是一個慢查詢日誌的例子: 開啓慢查詢日誌,須要設置參數log_slow_queries、long_query_times、log-queries-not-using-indexes。 log_slow_queries 指定日誌文件,若是不提供文件名,MySQL將本身產生缺省文件名。long_query_times指定慢查詢的閾值,缺省是10秒。log- queries-not-using-indexes是4.1.0之後引入的參數,它指示記錄不使用索引的查詢。設置 long_query_time=10 外附上使用show status命令查看mysql狀態相關的值及其含義: 使用show status命令 含義以下: aborted_clients 客戶端非法中斷鏈接次數 aborted_connects 鏈接mysql失敗次數 com_xxx xxx命令執行次數,有不少條 connections 鏈接mysql的數量 Created_tmp_disk_tables 在磁盤上建立的臨時表 Created_tmp_tables 在內存裏建立的臨時表 Created_tmp_files 臨時文件數 Key_read_requests The number of requests to read a key block from the cache Key_reads The number of physical reads of a key block from disk Max_used_connections 同時使用的鏈接數 Open_tables 開放的表 Open_files 開放的文件 Opened_tables 打開的表 Questions 提交到server的查詢數 Sort_merge_passes 若是這個值很大,應該增長my.cnf中的sort_buffer值 Uptime 服務器已經工做的秒數 提高性能的建議: 1.若是opened_tables太大,應該把my.cnf中的table_cache變大 2.若是Key_reads太大,則應該把my.cnf中key_buffer_size變大.能夠用Key_reads/Key_read_requests計算出cache失敗率 3.若是Handler_read_rnd太大,則你寫的SQL語句裏不少查詢都是要掃描整個表,而沒有發揮索引的鍵的做用 4.若是Threads_created太大,就要增長my.cnf中thread_cache_size的值.能夠用Threads_created/Connections計算cache命中率 5.若是Created_tmp_disk_tables太大,就要增長my.cnf中tmp_table_size的值,用基於內存的臨時表代替基於磁盤的 =================================================================== 存 儲引擎是什麼?MySQL中的數據用各類不一樣的技術存儲在文件(或者內 正確的編譯方法當然重要,但它只是提升MySQL服務器性能工做的一部分。MySQL服務器的許多參數會影響服務器的性能表現,並且咱們能夠把這些參數保 存到配置文件,使得每次MySQL服務器啓動時這些參數都自動發揮做用。這個配置文件就是my.cnf。 MySQL服務器提供了 my.cnf文件的幾個示例,它們能夠在/usr/local/mysql/share/mysql/目錄下找到,名字分別爲my-small.cnf、 my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中關於規模的說明描述了該配置文件適用的系統類型。例如,如 果運行MySQL服務器的系統內存很少,並且MySQL只是偶爾使用,那麼使用my-small.cnf配置文件最爲理想,這個配置文件告訴mysqld daemon使用最少的系統資源。反之,若是MySQL服務器用於支持一個大規模的在線商場,系統擁有2G的內存,那麼使用mysql-huge.cnf 最爲合適。 要使用上述示例配置文件,咱們應該先複製一個最適合要求的配置文件,並把它命名爲my.cnf。這個複製獲得的配置文件能夠按照以下三種方式使用: 全局:把這個my.cnf文件複製到服務器的/etc目錄,此時文件中所定義的參數將全局有效,即對該服務器上運行的全部MySQL數據庫服務器都有效。 局部:把這個my.cnf文件複製到[MYSQL-INSTALL-DIR]/var/將使該文件只對指定的服務器有效,其中[MYSQL-INSTALL-DIR]表示安裝MySQL的目錄。 用戶:最後,咱們還能夠把該文件的做用範圍侷限到指定的用戶,這隻需把my.cnf文件複製到用戶的根目錄便可。 那 麼,如何設置my.cnf文件中的參數呢?或者進一步說,哪些參數是咱們能夠設置的呢?全部這些參數都對MySQL服務器有着全局性的影響,但同時每個 參數都和MySQL的特定部分關係較爲密切。例如,max_connections參數屬於mysqld一類。那麼,如何才能得知這一點呢?這隻需執行如 下命令: % >/usr/local/mysql/libexec/mysqld –help 該命令將顯示出和 mysqld有關的各類選項和參數。要尋找這些參數很是方便,由於這些參數都在「Possible variables for option –set-variable (-O) are」這行內容的後面。找到這些參數以後,咱們就能夠在my.cnf文件中按照以下方式設置全部這些參數: set-variable = max_connections=100 這行代碼的效果是:同時鏈接MySQL服務器的最大鏈接數量限制爲100。不要忘了在my.cnf文件[mysqld]小節加上一個set-variable指令,具體請參見配置文件中的示例。 ================================================================== 正確的編譯方法當然重要,但它只是提升MySQL服務器性能工做的一部分。MySQL服務器的許多參數會影響服務器的性能表現,並且咱們能夠把這些參數保存到配置文件,使得每次MySQL服務器啓動時這些參數都自動發揮做用。這個配置文件就是my.cnf。 MySQL 服務器提供了my.cnf文件的幾個示例,它們能夠在/usr/local/mysql/share/mysql/目錄下找到,名字分別爲my- small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中關於規模的說明描述了該配置文件適用 的系統類型。例如,若是運行MySQL服務器的系統內存很少,並且MySQL只是偶爾使用,那麼使用my-small.cnf配置文件最爲理想,這個配置 文件告訴mysqld daemon使用最少的系統資源。反之,若是MySQL服務器用於支持一個大規模的在線商場,系統擁有2G的內存,那麼使用mysql-huge.cnf 最爲合適。 要使用上述示例配置文件,咱們應該先複製一個最適合要求的配置文件,並把它命名爲my.cnf。這個複製獲得的配置文件能夠按照以下三種方式使用: 全局:把這個my.cnf文件複製到服務器的/etc目錄,此時文件中所定義的參數將全局有效,即對該服務器上運行的全部MySQL數據庫服務器都有效。 局部:把這個my.cnf文件複製到[MYSQL-INSTALL-DIR]/var/將使該文件只對指定的服務器有效,其中[MYSQL-INSTALL-DIR]表示安裝MySQL的目錄。 用戶:最後,咱們還能夠把該文件的做用範圍侷限到指定的用戶,這隻需把my.cnf文件複製到用戶的根目錄便可。 那 麼,如何設置my.cnf文件中的參數呢?或者進一步說,哪些參數是咱們能夠設置的呢?全部這些參數都對MySQL服務器有着全局性的影響,但同時每個 參數都和MySQL的特定部分關係較爲密切。例如,max_connections參數屬於mysqld一類。那麼,如何才能得知這一點呢?這隻需執行如 下命令: % >/usr/local/mysql/libexec/mysqld –help 該命令將顯示出和 mysqld有關的各類選項和參數。要尋找這些參數很是方便,由於這些參數都在「Possible variables for option –set-variable (-O) are」這行內容的後面。找到這些參數以後,咱們就能夠在my.cnf文件中按照以下方式設置全部這些參數: set-variable = max_connections=100 這行代碼的效果是:同時鏈接MySQL服務器的最大鏈接數量限制爲100。不要忘了在my.cnf文件[mysqld]小節加上一個set-variable指令,具體請參見配置文件中的示例。
歡迎關注本站公眾號,獲取更多信息