1. 程式人生 > >mysql啟動引數(/etc/my.cnf)詳解彙總

mysql啟動引數(/etc/my.cnf)詳解彙總

http://blog.csdn.net/lihaiwenshu/article/details/40434093

在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客戶端庫初始化的時候指定這些選項。