在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客戶程序與server之間的本地通信指定一個套接字文件(僅適用於UNIX/Linux系統; 默認設置通常是/var/lib/mysql/mysql.sock文件)。
在Windows環境下。假設MySQL客戶與server是通過命名管道進行通信 的,–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環境下的客戶和server使用命名管道(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通信port(一般是3306port)。
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 MySQLserver同一時候處理的數據庫連接的最大數量(默認設置是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是server的主機名)。
log-slow-queries [= file] 把運行用時超過long_query_time變量值的查詢命令記入日志(慢查詢日志); 假設沒有給出file參數。MySQL將在數據庫文件夾里創建一個hostname-slow.log文件作為這樣的日志文件(hostname是server主機 名)。
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)。在前一個二進制日志文件中的信息量超過這個最大長度之前,MySQLserver會自己主動提供一個新的二進制日志文件接續上。
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)
server-id = n 給服務器分配一個獨一無二的ID編號; n的取值范圍是1~2的32次方啟用二進制日志功能。
log-bin = name 啟用二進制日志功能。
這樣的日志的文件名稱是filename.n或默認的hostname.n。當中的n是一個6位數字的整數(日志文件順序編號)。
binlog-do/ignore-db = dbname 僅僅把給定數據庫里的變化情況記入二進制日志文件/不把給定的數據庫里的變化記入二進制日志文件。
mysqld程序–鏡像(從屬鏡像server)
server-id = n 給服務器分配一個唯一的ID編號
log-slave-updates 啟用從屬server上的日志功能,使這台計算機能夠用來構成一個鏡像鏈(A->B->C)。
master-host = hostname 主控server的主機名或IP地址。假設從屬server上存在mater.info文件(鏡像關系定義文件),它將忽略此選項。
master-user = replicusername 從屬server用來連接主控server的用戶名。假設從屬server上存在mater.info文件。它將忽略此選項。
master-password = passwd 從屬server用來連接主控server的密碼。假設從屬server上存在mater.info文件,它將忽略此選項。
master-port = n 從屬server用來連接主控server的TCP/IPport(默認設置是3306port)。
master-connect-retry = n 假設與主控server的連接沒有成功。則等待n秒(s)后再進行管理方式(默認設置是60s)。假設從屬server存在mater.info文件。它將忽略此選項。
master-ssl-xxx = xxx 對主、從server之間的SSL通信進行配置。
read-only = 0/1 0: 同意從屬server獨立地運行SQL命令(默認設置); 1: 從屬server僅僅能運行來自主控server的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數據庫鏡像處理為從屬server上的db2name數據庫。
report-host = hostname 從屬server的主機名; 這項信息僅僅與SHOW SLAVE HOSTS命令有關–主控server能夠用這條命令生成一份從屬server的名單。
slave-compressed-protocol = 1 主、從server使用壓縮格式進行通信–假設它們都支持這么做的話。
slave-skip-errors = n1, n2, …或all 即使發生出錯代碼為n1、n2等的錯誤。鏡像處理工作也繼續進行(即無論發生什么錯誤,鏡像處理工作也繼續進行)。
假設配置得當,從屬server不應該在運行 SQL命令時錯誤發生(在主控server上運行出錯的SQL命令不會被發送到從屬server上做鏡像處理); 假設不使用slave-skip-errors選項,從屬server上的鏡像工作就可能由於錯誤發生而中斷,中斷后須要有人工參與才干繼續進行。
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。
除文件名稱外,還能夠用硬盤分區的設置名來定義表 空間,此時必須給表空間的最大初始長度值加上newrawkeyword做后綴,給表空間的最大擴充長度值加上rawkeyword做后綴(比如/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緩存區的數據寫入數據表,那些數據將在MySQLserver下次啟動時再寫入 (這么做沒有什么風險。由於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一起使用時沒有多大意義(啟用MySQLserver的二進制日志功能就足夠用了)。
mysqld程序–InnoDB–緩存區的設置和優化
innodb_log_buffer_pool_size = n 為InnoDB數據表及其索引而保留的RAM內存量(默認設置是8MB)。
這個參數對速度有着相當大的影響。假設計算機上僅僅執行有 MySQL/InnoDB數據庫server,就應該把所有內存的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 MySQLserver的IP地址。
假設MySQLserver所在的計算機有多個IP地址,這個選項將很重要。
default-storage-engine = type 新數據表的默認數據表類型(默認設置是MyISAM)。這項設置還能夠通過–default-table-type選項來設置。
default-timezone = name 為MySQLserver設置一個地理時區(假設它與本地計算機的地理時區不一樣)。
ft_min_word_len = n 全文索引的最小單詞長度工。這個選項的默認設置是4。意思是在創建全文索引時不考慮那些由3個或更少的字符構建單詞。
Max-allowed-packet = n 客戶與server之間交換的數據包的最大長度。這個數字至少應該大於客戶程序將要處理的最大BLOB塊的長度。這個選項的默認設置是1MB。
Sql-mode = model1, mode2, … MySQL將執行在哪一種SQL模式下。這個選項的作用是讓MySQL與其它的數據庫系統保持最大程度的兼容。這個選項的可取值包含ansi、db2、 oracle、no_zero_date、pipes_as_concat。
注意:假設在配置文件中給出的某個選項是mysqld無法識別的,MySQLserver將不啟動。
對於單台執行的WEBserver,建議加上:
skip-locking
skip-name-resolve
skip-networking
skip-networking
開啟該選項能夠徹底關閉MySQL的TCP/IP連接方式。假設WEBserver是以遠程連接的方式訪問MySQL數據庫server則不要開啟該選項!否則將無法正常連接!
在PHP鏈接數據庫時使用”LOCALHOST”.這樣MySQL client庫將覆蓋之並嘗試連接到本地套接字.(
我們能夠從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左右的server該參數可設置為256M或384M。
注意:該參數值設置的過大反而會是server總體效率減少!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查詢排序時所能使用的緩沖區大小。注意:該參數相應的分配內存是每連接獨占!假設有100個連接,那么實際分配的總共排序緩沖區大小為100 × 6 = 600MB。所以,對於內存在4GB左右的server推薦設置為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左右內存的server能夠設置為5-10。
thread_concurrency = 8
該參數取值為server邏輯CPU數量×2。在本例中,server有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實際取值為4 × 2 = 8
下面選項會被MySQLclient應用讀取。
# 注意僅僅有MySQL附帶的client應用程序保證能夠讀取這段內容。
# 假設你想你自己的MySQL應用程序獲取這些值。
# 須要在MySQLclient庫初始化的時候指定這些選項。
#
[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/IPport上進行監聽.
# 假設全部的進程都是在同一台server連接到本地的mysqld,
# 這樣設置將是增強安全的方法
# 全部mysqld的連接都是通過Unix sockets 或者命名管道進行的.
# 注意在windows下假設沒有打開命名管道選項而僅僅是用此項
# (通過 “enable-named-pipe” 選項) 將會導致mysql服務沒有不論什么作用!
#skip-networking
# MySQL 服務所同意的同一時候會話數的上限
# 當中一個連接將被SUPER權限保留作為管理員登錄.
# 即便已經達到了連接數的上限.
max_connections = 3000
# 每一個client連接最大的錯誤同意數量,假設達到了此限制.
# 這個client將會被MySQL服務阻止直到運行了”FLUSH HOSTS” 或者服務重新啟動
# 非法的password以及其它在鏈接時的錯誤會添加此值.
# 查看 “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中保留多少線程用於重用
# 當一個client斷開連接后,假設cache中的線程還少於thread_cache_size,
# 則client線程被放入cache中.
# 這能夠在你須要大量新連接的時候極大的降低線程創建的開銷
# (一般來說假設你有好的線程模型的話,這不會有明顯的性能提升.)
thread_cache_size = 16
# 此同意應用程序給予線程系統一個提示在同一時間給予渴望被執行的線程的數量.
# 此值僅僅對於支持 thread_concurrency() 函數的系統有意義( 比如Sun Solaris).
# 你可能夠嘗試使用 [CPU數量]*(2..4) 來作為thread_concurrency的值
thread_concurrency = 8
# 查詢緩沖常被用來緩沖 SELECT 的結果而且在下一次相同查詢的時候不再運行直接返回結果.
# 打開查詢緩沖能夠極大的提高server速度, 假設你有大量的同樣的查詢而且非常少改動表.
# 查看 “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主server必須打開此項
# 假設你須要從你最后的備份中做基於時間點的恢復,你也相同須要二進制日志.
log-bin=mysql-bin
# 假設你在使用鏈式從server結構的復制模式 (A->B->C),
# 你須要在serverB上打開此項.
# 此選項打開在從線程上重做過的更新的日志,
# 並將其寫入從server的二進制日志.
#log_slave_updates
# 打開全查詢日志. 全部的由server接收到的查詢 (甚至對於一個錯誤語法的查詢)
# 都會被記錄下來. 這對於調試很實用, 在生產環境中經常關閉此項.
#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段的凝視來使其生效)
#
# 為了配置此主機作為復制的slaveserver,你能夠選擇兩種方法:
#
# 1) 使用 CHANGE MASTER TO 命令 (在我們的手冊中有完整描寫敘述) -
# 語法例如以下:
#
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,
# MASTER_USER=, MASTER_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 =
#
# 當連接到master上時slave所用來認證的username – 必須
#master-user =
#
# 當連接到master上時slave所用來認證的password – 必須
#master-password =
#
# master監聽的port.
# 可選 – 默認是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越少.
# 在一個獨立使用的數據庫server上,你能夠設置這個變量到server物理內存大小的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
(說明:假設是游戲server,建議此值設置為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
