天天看點

[轉]MYSQL中的my.ini或my.cnf配置說明

本文中的配置都是從《MySQL5權威指南(3rd)》中摘抄出來的,個人認為對于使用MySQL十分有用。放在此處友善自己随時查閱,也希望對其他朋友有所助益。(2007.05.30最後更新)

mysqld程式--目錄和檔案

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伺服器将不啟動。