mysql啓動參數(/etc/my.cnf)詳解彙總

在linux下面的/etc/my.cnf的參數詳解彙總

MYSQL–my.cnf配置中文詳解

basedir = path   使用給定目錄作爲根目錄(安裝目錄)。
character-sets-dir = path   給出存放着字符集的目錄。
datadir = path   從給定目錄讀取數據庫文件。
pid-file = filename   爲mysqld程序指定一個存放進程ID的文件(僅適用於UNIX/Linux系統); Init-V腳本需要使用這個文件裏的進程ID結束mysqld進程。
socket = filename   爲MySQL客戶程序與服務器之間的本地通信指定一個套接字文件(僅適用於UNIX/Linux系統; 默認設置一般是/var/lib/mysql/mysql.sock文件)。在Windows環境下,如果MySQL客戶與服務器是通過命名管道進行通信 的,–sock選項給出的將是該命名管道的名字(默認設置是MySQL)。
lower_case_table_name = 1/0   新目錄和數據表的名字是否只允許使用小寫字母; 這個選項在Windows環境下的默認設置是1(只允許使用小寫字母)。

mysqld程序–語言設置
character-sets-server = name   新數據庫或數據表的默認字符集。爲了與MySQL的早期版本保持兼容,這個字符集也可以用–default-character-set選項給出; 但這個選項已經顯得有點過時了。
collation-server = name   新數據庫或數據表的默認排序方式。
lanuage = name   用指定的語言顯示出錯信息。

mysqld程序–通信、網絡、信息安全
enable-named-pipes   允許Windows 2000/XP環境下的客戶和服務器使用命名管道(named pipe)進行通信。這個命名管道的默認名字是MySQL,但可以用–socket選項來改變。
local-infile [=0]   允許/禁止使用LOAD DATA LOCAL語句來處理本地文件。
myisam-recover [=opt1, opt2, …]   在啓動時自動修復所有受損的MyISAM數據表。這個選項的可取值有4種:DEFAULT、BACKUP、QUICK和FORCE; 它們與myisamchk程序的同名選項作用相同。

old-passwords   使用MySQL 3.23和4.0版本中的老算法來加密mysql數據庫裏的密碼(默認使用MySQL 4.1版本開始引入的新加密算法)。
port = n   爲MySQL程序指定一個TCP/IP通信端口(通常是3306端口)。
safe-user-create   只有在mysql.user數據庫表上擁有INSERT權限的用戶才能使用GRANT命令; 這是一種雙保險機制(此用戶還必須具備GRANT權限才能執行GRANT命令)。
shared-memory   允許使用內存(shared memory)進行通信(僅適用於Windows)。
shared-memory-base-name = name   給共享內存塊起一個名字(默認的名字是MySQL)。
skip-grant-tables   不使用mysql數據庫裏的信息來進行訪問控制(警告:這將允許用戶任何用戶去修改任何數據庫)。
skip-host-cache   不使用高速緩存區來存放主機名和IP地址的對應關係。
skip-name-resovle   不把IP地址解析爲主機名; 與訪問控制(mysql.user數據表)有關的檢查全部通過IP地址行進。
skip-networking   只允許通過一個套接字文件(Unix/Linux系統)或通過命名管道(Windows系統)進行本地連接,不允許ICP/IP連接; 這提高了安全性,但阻斷了來自網絡的外部連接和所有的Java客戶程序(Java客戶即使在本地連接裏也使用TCP/IP)。
user = name   mysqld程序在啓動後將在給定UNIX/Linux賬戶下執行; mysqld必須從root賬戶啓動才能在啓動後切換到另一個賬戶下執行; mysqld_safe腳本將默認使用–user=mysql選項來啓動mysqld程序。

mysqld程序–內存管理、優化、查詢緩存區
bulk_insert_buffer_size = n   爲一次插入多條新記錄的INSERT命令分配的緩存區長度(默認設置是8M)。
key_buffer_size = n   用來存放索引區塊的RMA值(默認設置是8M)。
join_buffer_size = n   在參加JOIN操作的數據列沒有索引時爲JOIN操作分配的緩存區長度(默認設置是128K)。
max_heap_table_size = n   HEAP數據表的最大長度(默認設置是16M); 超過這個長度的HEAP數據表將被存入一個臨時文件而不是駐留在內存裏。
max_connections = n   MySQL服務器同時處理的數據庫連接的最大數量(默認設置是100)。
query_cache_limit = n   允許臨時存放在查詢緩存區裏的查詢結果的最大長度(默認設置是1M)。
query_cache_size = n   查詢緩存區的最大長度(默認設置是0,不開闢查詢緩存區)。
query_cache_type = 0/1/2   查詢緩存區的工作模式:0, 禁用查詢緩存區; 1,啓用查詢緩存區(默認設置); 2,”按需分配”模式,只響應SELECT SQL_CACHE命令。
read_buffer_size = n   爲從數據表順序讀取數據的讀操作保留的緩存區的長度(默認設置是128KB); 這個選項的設置值在必要時可以用SQL命令SET SESSION read_buffer_size = n命令加以改變。
read_rnd_buffer_size = n   類似於read_buffer_size選項,但針對的是按某種特定順序(比如使用了ORDER BY子句的查詢)輸出的查詢結果(默認設置是256K)。
sore_buffer = n   爲排序操作分配的緩存區的長度(默認設置是2M); 如果這個緩存區太小,則必須創建一個臨時文件來進行排序。
table_cache = n   同時打開的數據表的數量(默認設置是64)。
tmp_table_size = n   臨時HEAP數據表的最大長度(默認設置是32M); 超過這個長度的臨時數據表將被轉換爲MyISAM數據表並存入一個臨時文件。

mysqld程序–日誌
log [= file]   把所有的連接以及所有的SQL命令記入日誌(通用查詢日誌); 如果沒有給出file參數,MySQL將在數據庫目錄裏創建一個hostname.log文件作爲這種日誌文件(hostname是服務器的主機名)。
log-slow-queries [= file]   把執行用時超過long_query_time變量值的查詢命令記入日誌(慢查詢日誌); 如果沒有給出file參數,MySQL將在數據庫目錄裏創建一個hostname-slow.log文件作爲這種日誌文件(hostname是服務器主機 名)。
long_query_time = n   慢查詢的執行用時上限(默認設置是10s)。
long_queries_not_using_indexs   把慢查詢以及執行時沒有使用索引的查詢命令全都記入日誌(其餘同–log-slow-queries選項)。
log-bin [= filename]   把對數據進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日誌(二進制變更日誌,binary update log)。這種日誌的文件名是filename.n或默認的hostname.n,其中n是一個6位數字的整數(日誌文件按順序編號)。
log-bin-index = filename   二進制日誌功能的索引文件名。在默認情況下,這個索引文件與二進制日誌文件的名字相同,但後綴名是.index而不是.nnnnnn。
max_binlog_size = n   二進制日誌文件的最大長度(默認設置是1GB)。在前一個二進制日誌文件裏的信息量超過這個最大長度之前,MySQL服務器會自動提供一個新的二進制日誌文件接續上。
binlog-do-db = dbname   只把給定數據庫裏的變化情況記入二進制日誌文件,其他數據庫裏的變化情況不記載。如果需要記載多個數據庫裏的變化情況,就必須在配置文件使用多個本選項來設置,每個數據庫一行。
binlog-ignore-db = dbname   不把給定數據庫裏的變化情況記入二進制日誌文件。
sync_binlog = n   每經過n次日誌寫操作就把日誌文件寫入硬盤一次(對日誌信息進行一次同步)。n=1是最安全的做法,但效率最低。默認設置是n=0,意思是由操作系統來負責二進制日誌文件的同步工作。
log-update [= file]   記載出錯情況的日誌文件名(出錯日誌)。這種日誌功能無法禁用。如果沒有給出file參數,MySQL會使用hostname.err作爲種日誌文件的名字。

mysqld程序–鏡像(主控鏡像服務器)
server-id = n   給服務器分配一個獨一無二的ID編號; n的取值範圍是1~2的32次方啓用二進制日誌功能。
log-bin = name   啓用二進制日誌功能。這種日誌的文件名是filename.n或默認的hostname.n,其中的n是一個6位數字的整數(日誌文件順序編號)。
binlog-do/ignore-db = dbname   只把給定數據庫裏的變化情況記入二進制日誌文件/不把給定的數據庫裏的變化記入二進制日誌文件。

mysqld程序–鏡像(從屬鏡像服務器)
server-id = n   給服務器分配一個唯一的ID編號
log-slave-updates   啓用從屬服務器上的日誌功能,使這臺計算機可以用來構成一個鏡像鏈(A->B->C)。
master-host = hostname   主控服務器的主機名或IP地址。如果從屬服務器上存在mater.info文件(鏡像關係定義文件),它將忽略此選項。
master-user = replicusername   從屬服務器用來連接主控服務器的用戶名。如果從屬服務器上存在mater.info文件,它將忽略此選項。
master-password = passwd   從屬服務器用來連接主控服務器的密碼。如果從屬服務器上存在mater.info文件,它將忽略此選項。
master-port = n   從屬服務器用來連接主控服務器的TCP/IP端口(默認設置是3306端口)。
master-connect-retry = n   如果與主控服務器的連接沒有成功,則等待n秒(s)後再進行管理方式(默認設置是60s)。如果從屬服務器存在mater.info文件,它將忽略此選項。
master-ssl-xxx = xxx   對主、從服務器之間的SSL通信進行配置。
read-only = 0/1   0: 允許從屬服務器獨立地執行SQL命令(默認設置); 1: 從屬服務器只能執行來自主控服務器的SQL命令。
read-log-purge = 0/1   1: 把處理完的SQL命令立刻從中繼日誌文件裏刪除(默認設置); 0: 不把處理完的SQL命令立刻從中繼日誌文件裏刪除。
replicate-do-table = dbname.tablename   與–replicate-do-table選項的含義和用法相同,但數據庫和數據庫表名字裏允許出現通配符”%” (例如: test%.%–對名字以”test”開頭的所有數據庫裏的所以數據庫表進行鏡像處理)。
replicate-do-db = name   只對這個數據庫進行鏡像處理。
replicate-ignore-table = dbname.tablename   不對這個數據表進行鏡像處理。
replicate-wild-ignore-table = dbn.tablen   不對這些數據表進行鏡像處理。
replicate-ignore-db = dbname   不對這個數據庫進行鏡像處理。
replicate-rewrite-db = db1name > db2name   把主控數據庫上的db1name數據庫鏡像處理爲從屬服務器上的db2name數據庫。
report-host = hostname   從屬服務器的主機名; 這項信息只與SHOW SLAVE HOSTS命令有關–主控服務器可以用這條命令生成一份從屬服務器的名單。
slave-compressed-protocol = 1   主、從服務器使用壓縮格式進行通信–如果它們都支持這麼做的話。
slave-skip-errors = n1, n2, …或all   即使發生出錯代碼爲n1、n2等的錯誤,鏡像處理工作也繼續進行(即不管發生什麼錯誤,鏡像處理工作也繼續進行)。如果配置得當,從屬服務器不應該在執行 SQL命令時發生錯誤(在主控服務器上執行出錯的SQL命令不會被髮送到從屬服務器上做鏡像處理); 如果不使用slave-skip-errors選項,從屬服務器上的鏡像工作就可能因爲發生錯誤而中斷,中斷後需要有人工參與才能繼續進行。

mysqld–InnoDB–基本設置、表空間文件
skip-innodb   不加載InnoDB數據表驅動程序–如果用不着InnoDB數據表,可以用這個選項節省一些內存。
innodb-file-per-table   爲每一個新數據表創建一個表空間文件而不是把數據表都集中保存在中央表空間裏(後者是默認設置)。該選項始見於MySQL 4.1。
innodb-open-file = n   InnoDB數據表驅動程序最多可以同時打開的文件數(默認設置是300)。如果使用了
innodb-file-per-table選項並且需要同時打開很多數據表的話,這個數字很可能需要加大。
innodb_data_home_dir = p   InnoDB主目錄,所有與InnoDB數據表有關的目錄或文件路徑都相對於這個路徑。在默認的情況下,這個主目錄就是MySQL的數據目錄。
innodb_data_file_path = ts   用來容納InnoDB爲數據表的表空間: 可能涉及一個以上的文件; 每一個表空間文件的最大長度都必須以字節(B)、兆字節(MB)或千兆字節(GB)爲單位給出; 表空間文件的名字必須以分號隔開; 最後一個表空間文件還可以帶一個autoextend屬性和一個最大長度(max:n)。例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空間文件ibdata1的最大長度是1GB,ibdata2的最大長度也是1G,但允許它擴充到2GB。除文件名外,還可以用硬盤分區的設置名來定義表 空間,此時必須給表空間的最大初始長度值加上newraw關鍵字做後綴,給表空間的最大擴充長度值加上raw關鍵字做後綴(例如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默認設置是ibdata1:10M:autoextend。
innodb_autoextend_increment = n   帶有autoextend屬性的表空間文件每次加大多少兆字節(默認設置是8MB)。這個屬性不涉及具體的數據表文件,那些文件的增大速度相對是比較小的。
innodb_lock_wait_timeout = n   如果某個事務在等待n秒(s)後還沒有獲得所需要的資源,就使用ROLLBACK命令放棄這個事務。這項設置對於發現和處理未能被InnoDB數據表驅動 程序識別出來的死鎖條件有着重要的意義。這個選項的默認設置是50s。
innodb_fast_shutdown 0/1   是否以最快的速度關閉InnoDB,默認設置是1,意思是不把緩存在INSERT緩存區的數據寫入數據表,那些數據將在MySQL服務器下次啓動時再寫入 (這麼做沒有什麼風險,因爲INSERT緩存區是表空間的一個組成部分,數據不會丟失)。把這個選項設置爲0反面危險,因爲在計算機關閉時,InnoDB 驅動程序很可能沒有足夠的時間完成它的數據同步工作,操作系統也許會在它完成數據同步工作之前強行結束InnoDB,而這會導致數據不完整。

mysqld程序–InnoDB–日誌
innodb_log_group_home_dir = p   用來存放InnoDB日誌文件的目錄路徑(如ib_logfile0、ib_logfile1等)。在默認的情況下,InnoDB驅動程序將使用MySQL數據目錄作爲自己保存日誌文件的位置。  
innodb_log_files_in_group = n   使用多少個日誌文件(默認設置是2)。InnoDB數據表驅動程序將以輪轉方式依次填寫這些文件; 當所有的日誌文件都寫滿以後,之後的日誌信息將寫入第一個日誌文件的最大長度(默認設置是5MB)。這個長度必須以MB(兆字節)或GB(千兆字節)爲單 位進行設置。
innodb_flush_log_at_trx_commit = 0/1/2   這個選項決定着什麼時候把日誌信息寫入日誌文件以及什麼時候把這些文件物理地寫(術語稱爲”同步”)到硬盤上。設置值0的意思是每隔一秒寫一次日誌並進行 同步,這可以減少硬盤寫操作次數,但可能造成數據丟失; 設置值1(設置設置)的意思是在每執行完一條COMMIT命令就寫一次日誌並進行同步,這可以防止數據丟失,但硬盤寫操作可能會很頻繁; 設置值2是一般折衷的辦法,即每執行完一條COMMIT命令寫一次日誌,每隔一秒進行一次同步。
innodb_flush_method = x   InnoDB日誌文件的同步辦法(僅適用於UNIX/Linux系統)。這個選項的可取值有兩種: fdatasync,用fsync()函數進行同步; O_DSYNC,用O_SYNC()函數進行同步。
innodb_log_archive = 1   啓用InnoDB驅動程序的archive(檔案)日誌功能,把日誌信息寫入ib_arch_log_n文件。啓用這種日誌功能在InnoDB與 MySQL一起使用時沒有多大意義(啓用MySQL服務器的二進制日誌功能就足夠用了)。

mysqld程序–InnoDB–緩存區的設置和優化
innodb_log_buffer_pool_size = n   爲InnoDB數據表及其索引而保留的RAM內存量(默認設置是8MB)。這個參數對速度有着相當大的影響,如果計算機上只運行有 MySQL/InnoDB數據庫服務器,就應該把全部內存的80%用於這個用途。
innodb_log_buffer_size = n   事務日誌文件寫操作緩存區的最大長度(默認設置是1MB)。
innodb_additional_men_pool_size = n   爲用於內部管理的各種數據結構分配的緩存區最大長度(默認設置是1MB)。
innodb_file_io_threads = n   I/O操作(硬盤寫操作)的最大線程個數(默認設置是4)。
innodb_thread_concurrency = n   InnoDB驅動程序能夠同時使用的最大線程個數(默認設置是8)。

mysqld程序–其它選項
bind-address = ipaddr   MySQL服務器的IP地址。如果MySQL服務器所在的計算機有多個IP地址,這個選項將非常重要。
default-storage-engine = type   新數據表的默認數據表類型(默認設置是MyISAM)。這項設置還可以通過–default-table-type選項來設置。
default-timezone = name   爲MySQL服務器設置一個地理時區(如果它與本地計算機的地理時區不一樣)。
ft_min_word_len = n   全文索引的最小單詞長度工。這個選項的默認設置是4,意思是在創建全文索引時不考慮那些由3個或更少的字符構建單詞。
Max-allowed-packet = n   客戶與服務器之間交換的數據包的最大長度,這個數字至少應該大於客戶程序將要處理的最大BLOB塊的長度。這個選項的默認設置是1MB。
Sql-mode = model1, mode2, …   MySQL將運行在哪一種SQL模式下。這個選項的作用是讓MySQL與其他的數據庫系統保持最大程度的兼容。這個選項的可取值包括ansi、db2、 oracle、no_zero_date、pipes_as_concat。

注意:如果在配置文件裏給出的某個選項是mysqld無法識別的,MySQL服務器將不啓動。

對於單臺運行的WEB服務器,建議加上:
skip-locking
skip-name-resolve
skip-networking

skip-networking
開啓該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB服務器是以遠程連接的方式訪問MySQL數據庫服務器則不要開啓該選項!否則將無法正常連接!

在PHP鏈接數據庫時使用”LOCALHOST”.這樣MySQL 客戶端庫將覆蓋之並嘗試連接到本地套接字.(
我們可以從PHP.INI中
代碼:
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /tmp/mysql.sock
看出 默認情況下 UNIX 將訪問/tmp/mysql.sock)
以下是部分選項解釋:
my.cnf默認是不存在的.你可以在/usr/local/share/mysql/下看到:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf
等文件.將其中合適你機器配置的文件拷貝到/etc/my.cnf或mysql data目錄/my.cnf(/var/db/mysql)下或~/.my.cnf.文件內都有詳細的說明

skip-locking
# 避免MySQL的外部鎖定,減少出錯機率增強穩定性。

skip-name-resolve
禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啓該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!

back_log = 384
指定MySQL可能的連接數量。當MySQL主線程在很短的時間內接收到非常多的連接請求,該參數生效,主線程花費很短的時間檢查連接並且啓動一個新線程。
back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。 如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自 己的限制。
試圖設定back_log高於你的操作系統的限制將是無效的。默認值爲50。對於Linux系統推薦設置爲小於512的整數。

key_buffer_size = 256M
# key_buffer_size指定用於索引的緩衝區大小,增加它可得到更好的索引處理性能。
對於內存在4GB左右的服務器該參數可設置爲256M或384M。
注意:該參數值設置的過大反而會是服務器整體效率降低!

max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查詢排序時所能使用的緩衝區大小。注意:該參數對應的分配內存是每連接獨佔!如果有100個連接,那麼實際分配的總共排序緩衝區大小爲100 × 6 = 600MB。所以,對於內存在4GB左右的服務器推薦設置爲6-8M。

read_buffer_size = 4M
讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享!

join_buffer_size = 8M
聯合查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享!

myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查詢緩衝區的大小。可以通過在MySQL控制檯執行以下命令觀察:
# > SHOW VARIABLES LIKE ‘%query_cache%’;
# > SHOW STATUS LIKE ‘Qcache%’;
如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況;
如果Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩衝;Qcache_free_blocks,如果該值非常大,則表明緩衝區中碎片很多。

tmp_table_size = 256M
max_connections = 768
指定MySQL允許的最大連接進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 10000000
wait_timeout = 10
指定一個請求的最大連接時間,對於4GB左右內存的服務器可以設置爲5-10。
thread_concurrency = 8
該參數取值爲服務器邏輯CPU數量×2,在本例中,服務器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實際取值爲4 × 2 = 8
 


以下選項會被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 = 300  

 back_log  
指定MySQL可能的連接數量。當MySQL主線程在很短的時間內得到非常多的連接請求,該參數就起作用,之後主線程花些時間(儘管很短)檢查連接並且啓動一個新線程。  
back_log
參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。如果系統在一個短時間內有很多連接,則需要增大該參
數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自己的限制。試圖設定back_log高於你的操作系統的限制將是無效的。當觀察
MySQL進程列表,發現大量 264084 | unauthenticated user |  xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待連接進程時,
就要加大 back_log 的值。back_log默認值爲50。
 
不在TCP/IP端口上進行監聽.   
# 如果所有的進程都是在同一臺服務器連接到本地的mysqld,   
# 這樣設置將是增強安全的方法   
# 所有mysqld的連接都是通過Unix sockets 或者命名管道進行的.   
# 注意在windows下如果沒有打開命名管道選項而只是用此項   
# (通過 “enable-named-pipe” 選項) 將會導致mysql服務沒有任何作用!   
#skip-networking   
 
# MySQL 服務所允許的同時會話數的上限   
# 其中一個連接將被SUPER權限保留作爲管理員登錄.   
# 即便已經達到了連接數的上限.   
max_connections = 3000  
# 每個客戶端連接最大的錯誤允許數量,如果達到了此限制.   
# 這個客戶端將會被MySQL服務阻止直到執行了”FLUSH HOSTS” 或者服務重啓   
# 非法的密碼以及其他在鏈接時的錯誤會增加此值.   
# 查看 “Aborted_connects” 狀態來獲取全局計數器.   
max_connect_errors = 30  
 
# 所有線程所打開表的數量.   
# 增加此值就增加了mysqld所需要的文件描述符的數量   
# 這樣你需要確認在[mysqld_safe]中 “open-files-limit” 變量設置打開文件數量允許至少4096  
table_cache = 4096  
 
# 允許外部文件級別的鎖. 打開文件鎖會對性能造成負面影響   
# 所以只有在你在同樣的文件上運行多個數據庫實例時才使用此選項(注意仍會有其他約束!)   
# 或者你在文件層面上使用了其他一些軟件依賴來鎖定MyISAM表   
#external-locking   
 
# 服務所能處理的請求包的最大大小以及服務所能處理的最大的請求大小(當與大的BLOB字段一起工作時相當必要)   
# 每個連接獨立的大小.大小動態增加   
max_allowed_packet = 32M   
 
# 在一個事務中binlog爲了記錄SQL狀態所持有的cache大小   
# 如果你經常使用大的,多聲明的事務,你可以增加此值來獲取更大的性能.   
# 所有從事務來的狀態都將被緩衝在binlog緩衝中然後在提交後一次性寫入到binlog中   
# 如果事務比此值大, 會使用磁盤上的臨時文件來替代.   
# 此緩衝在每個連接的事務第一次更新狀態時被創建   
binlog_cache_size = 4M   
 
# 獨立的內存表所允許的最大容量.   
# 此選項爲了防止意外創建一個超大的內存表導致永盡所有的內存資源.   
max_heap_table_size = 128M   
 
# 排序緩衝被用來處理類似ORDER BY以及GROUP BY隊列所引起的排序   
# 如果排序後的數據無法放入排序緩衝,   
# 一個用來替代的基於磁盤的合併分類會被使用   
# 查看 “Sort_merge_passes” 狀態變量.   
# 在排序發生時由每個線程分配   
sort_buffer_size = 16M   
 
# 此緩衝被使用來優化全聯合(full JOINs 不帶索引的聯合).   
# 類似的聯合在極大多數情況下有非常糟糕的性能表現,   
# 但是將此值設大能夠減輕性能影響.   
# 通過 “Select_full_join” 狀態變量查看全聯合的數量   
# 當全聯合發生時,在每個線程中分配   
join_buffer_size = 16M   
 
# 我們在cache中保留多少線程用於重用   
# 當一個客戶端斷開連接後,如果cache中的線程還少於thread_cache_size,   
# 則客戶端線程被放入cache中.   
# 這可以在你需要大量新連接的時候極大的減少線程創建的開銷   
# (一般來說如果你有好的線程模型的話,這不會有明顯的性能提升.)   
thread_cache_size = 16  
 
# 此允許應用程序給予線程系統一個提示在同一時間給予渴望被運行的線程的數量.   
# 此值只對於支持 thread_concurrency() 函數的系統有意義( 例如Sun Solaris).   
# 你可可以嘗試使用 [CPU數量]*(2..4) 來作爲thread_concurrency的值   
thread_concurrency = 8  
 
# 查詢緩衝常被用來緩衝 SELECT 的結果並且在下一次同樣查詢的時候不再執行直接返回結果.   
# 打開查詢緩衝可以極大的提高服務器速度, 如果你有大量的相同的查詢並且很少修改表.   
# 查看 “Qcache_lowmem_prunes” 狀態變量來檢查是否當前值對於你的負載來說是否足夠高.   
# 注意: 在你表經常變化的情況下或者如果你的查詢原文每次都不同,   
# 查詢緩衝也許引起性能下降而不是性能提升.   
query_cache_size = 128M   
 
# 只有小於此設定值的結果纔會被緩衝   
# 此設置用來保護查詢緩衝,防止一個極大的結果集將其他所有的查詢結果都覆蓋.   
query_cache_limit = 4M   
 
# 被全文檢索索引的最小的字長.   
# 你也許希望減少它,如果你需要搜索更短字的時候.   
# 注意在你修改此值之後,   
# 你需要重建你的 FULLTEXT 索引   
ft_min_word_len = 8  
 
# 如果你的系統支持 memlock() 函數,你也許希望打開此選項用以讓運行中的mysql在在內存高度緊張的時候,數據在內存中保持鎖定並且防止可能被swapping out   
# 此選項對於性能有益   
#memlock   
 
# 當創建新表時作爲默認使用的表類型,   
# 如果在創建表示沒有特別執行表類型,將會使用此值   
default_table_type = MYISAM   
 
# 線程使用的堆大小. 此容量的內存在每次連接時被預留.   
# MySQL 本身常不會需要超過64K的內存   
# 如果你使用你自己的需要大量堆的UDF函數   
# 或者你的操作系統對於某些操作需要更多的堆,   
# 你也許需要將其設置的更高一點.   
thread_stack = 512K   
 
# 設定默認的事務隔離級別.可用的級別如下:   
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE   
transaction_isolation = REPEATABLE-READ   
 
# 內部(內存中)臨時表的最大大小   
# 如果一個表增長到比此值更大,將會自動轉換爲基於磁盤的表.   
# 此限制是針對單個表的,而不是總和.   
tmp_table_size = 128M   
 
# 打開二進制日誌功能.   
# 在複製(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 = 6  
 
# 在慢速日誌中記錄更多的信息.   
# 一般此項最好打開.   
# 打開此項會記錄使得那些沒有使用索引的查詢也被作爲到慢速查詢附加到慢速日誌裏   
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 = 128M   
 
# 用來做MyISAM表全表掃描的緩衝大小.   
# 當全表掃描需要時,在對應線程中分配.   
read_buffer_size = 8M   
 
# 當在排序之後,從一個已經排序好的序列中讀取行時,行數據將從這個緩衝中讀取來防止磁盤尋道.   
# 如果你增高此值,可以提高很多ORDER BY的性能.   
# 當需要時由每個線程分配   
read_rnd_buffer_size = 64M   
 
# MyISAM 使用特殊的類似樹的cache來使得突發插入   
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA   
# INFILE) 更快. 此變量限制每個進程中緩衝樹的字節數.   
# 設置爲 0 會關閉此優化.   
# 爲了最優化不要將此值設置大於 “key_buffer_size”.   
# 當突發插入被檢測到時此緩衝將被分配.   
bulk_insert_buffer_size = 256M   
 
# 此緩衝當MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引起重建索引時被分配.   
# 這在每個線程中被分配.所以在設置大值時需要小心.   
myisam_sort_buffer_size = 256M   
 
# 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 = 64M   
 
# InnoDB使用一個緩衝池來保存索引和原始數據, 不像 MyISAM.   
# 這裏你設置越大,你在存取表裏面數據時所需要的磁盤I/O越少.   
# 在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的80%   
# 不要設置過大,否則,由於物理內存的競爭可能導致操作系統的換頁顛簸.   
# 注意在32位系統上你每個進程可能被限制在 2-3.5G 用戶層面內存限制,   
# 所以不要設置的太高.   
innodb_buffer_pool_size = 6G   
 
# 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 = 2  
(說明:如果是遊戲服務器,建議此值設置爲2;如果是對數據安全要求極高的應用,建議設置爲1;設置爲0性能最高,但如果發生故障,數據可能會有丟失的危險!默認值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設成2對於很多運用,特別是從MyISAM錶轉過來的是可以的,它的意思是不寫入硬盤而是寫入系統緩存。日誌仍然會每秒flush到硬盤,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的數據。而值2只會在整個操作系統掛了時纔可能丟數據。)   
 
# 加速InnoDB的關閉. 這會阻止InnoDB在關閉時做全清除以及插入緩衝合併.   
# 這可能極大增加關機時間, 但是取而代之的是InnoDB可能在下次啓動時做這些操作.   
#innodb_fast_shutdown   
 
# 用來緩衝日誌數據的緩衝區的大小.   
# 當此值快滿時, InnoDB將必須刷新數據到磁盤上.   
# 由於基本上每秒都會刷新一次,所以沒有必要將此值設置的太大(甚至對於長事務而言)   
 
innodb_log_buffer_size = 16M   
 
# 在日誌組中每個日誌文件的大小.   
# 你應該設置日誌文件總合大小到你緩衝池大小的25%~100%   
# 來避免在日誌文件覆寫上不必要的緩衝池刷新行爲.   
# 不論如何, 請注意一個大的日誌文件大小會增加恢復進程所需要的時間.   
innodb_log_file_size = 512M   
 
# 在日誌組中的文件總數.   
# 通常來說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 = 32M   
 
[mysql]   
no-auto-rehash   
 
# 僅僅允許使用鍵值的 UPDATEs 和 DELETEs .   
#safe-updates   
 
[isamchk]   
key_buffer = 2048M   
sort_buffer_size = 2048M   
read_buffer = 32M   
write_buffer = 32M   
 
[myisamchk]   
key_buffer = 2048M   
sort_buffer_size = 2048M   
read_buffer = 32M   
write_buffer = 32M   
 
[mysqlhotcopy]   
interactive-timeout   
 
[mysqld_safe]   
# 增加每個進程的可打開文件數量.   
# 警告: 確認你已經將全系統限制設定的足夠高!   
# 打開大量表需要將此值設大   

open-files-limit = 8192 


以上很多參數大家不一定用上,但是遇到了大家能知道什麼意思


以下是一個測試環境的例子:

/etc/my.cnf


[mysqld]
#datadir=/var/lib/mysql
datadir=/home/data/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/home/data/mysql/mysql.sock
user=mysql
port=3306
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=utf8
init_connect = 'SET NAMES utf8'
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
expire_logs_day=3
slow_query_log=1
#slow_query_log_file=/home/data/mysql/slow.log
server-id=1
log-bin=mysqlbin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
init_connect='SET NAMES utf8'
log-bin=mysqlbin
master-host=192.168.1.106
master-user=db
master-pass=111111
master-connect-retry=60
replicate-do-db=dcs
master-port=3306
slave-net-timeout=60
#replicate-do-db=db
back_log = 512
key_buffer_size = 8M
max_allowed_packet = 4M
sort_buffer_size = 6M
read_buffer_size = 4M
join_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 64
query_cache_size = 0M
tmp_table_size = 96M
max_connections = 500
table_cache= 1024
innodb_additional_mem_pool_size= 16M
innodb_log_buffer_size= 64M
read_rnd_buffer_size= 16M
innodb_buffer_pool_size= 1G
innodb_log_file_size = 256M
max_heap_table_size = 96M
innodb_data_file_path = ibdata1:200M:autoextend
default-storage-engine=innodb
max_connect_errors = 100000
long_query_time = 1
 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
[client]
#default-character-set=utf8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章