有許多可以采用的配置文件,它們都被包含在mysql-server PRM程序中。還有一個默認的配置文件被包含在MySQL PRM程序包中。
配置MySQL服務器是一個豐富而復雜的工作。在本文中,我只能膚淺的說一下各種選項。可以使用的MySQL配置文件共有5個。最後4個位於/usr/share/doc/MySQL-server-*/目錄中。
·/etc/my.cnf是默認的MySQL配置文件。應該對這個文件配置修改。它是為學習目的而設計的。
·my-small.cnf是為了小型數據庫而設計的。不應該把這個模型用於含有一些常用項目的數據庫。
·my-medium.cnf是為中等規模的數據庫而設計的。如果你正在企業中使用RHEL,可能會比這個操作系統的最小RAM需求(256MB)明顯多得多的物理內存。由此可見,如果有那麼多RAM內存可以使用,自然可以在同一台機器上運行其它服務。
·my-large.cnf是為專用於一個SQL數據庫的計算機而設計的。由於它可以為該數據庫使用多達512MB的內存,所以在這種類型的系統上將需要至少1GB的RAM,以便它能夠同時處理操作系統與數據庫應用程序。
·my-huge.cnf是為企業中的數據庫而設計的。這樣的數據庫要求專用服務器和1GB或1GB以上的RAM。
這些選擇高度依賴於內存的數量、計算機的運算速度、數據庫的細節大小、訪問數據庫的用戶數量以及在數據庫中裝入並訪問數據的用戶數量。隨著數據庫和用戶的不斷增加,數據庫的性能可能會發生變化。
我將逐個的說明這些配置文件。如果用戶決定使用my-*.cnf文件之一,將首先需要把這個文件復制到/etc/my.cnf文件上。
由於這些原因,用戶應該仔細觀察數據庫系統的性能。如果發現問題,可能需要增加更多的RAM,或者把數據庫遷移到一個含有附加資源(比如多個CPU)的系統上。
提示:數據庫變得非常大。把一個SQL數據庫目錄配置在一個專用分區上可能更有道理。雖然一個不斷增長的數據庫可能會占滿整個分區,但它至少不會吞掉RHEL運行所必需的磁盤空間。
/etc/my.cnf文件
默認是/etc/my.cnf文件。它包含6條命令,並且這6條命令被組織在3個配置段中。這些配置段與Samba配置文件中的配置段相似,並且含有功能組名稱和相關的命令。本文將逐行的說明這個文件的默認版本。如果用戶進行了任何修改,將需要確保MySQL啟動腳本(即/etc/rc.d/init.d/MySQLd)中的命令一致。
[MySQLd]
在這個配置段之內,將會看到與MySQL守護進程相關的命令。
datadir=/var/lib/MySQL
MySQL服務器把數據庫存儲在由datadir變量所定義的目錄中。
Socket=/var/lib/mysql/MySQL.sock
MySQL套接字把數據庫程序局部的或通過網絡連接到MySQL客戶。
提示:MySQL被配置成使用InnoDB存儲器引擎。如果用戶在自己的系統上還沒有一個InnoDB數據庫,將需要給[MySQLd]配置段添加skip-innodb語句。
[MySQL.server]
在這個配置段之內,將會看到MySQL服務器守護進程有關的命令。這個配置段的較早期版本被命名為[mysql_server]。如果使用MySQL4.X或MySQL4.X以上版本,將必須把這個配置段標題改成[mysql_server]。當啟動MySQL服務時,它使用這個配置段中的選項。
user=MySQL
與MySQL服務相關聯的標准用戶名是mysql。它應該是/etc/passwd文件的一部分;如果在這個文件中沒有發現它,用戶可能還沒有安裝Red Hat Enterprise Linux MySQL-server RPM程序包。
basedir=/var/lib
這表示MySQL數據庫的頂級目錄。它充當MySQL系統上的一個根目錄;這個數據庫中的其它目錄都是相對於這個目錄。
[safe_MySQLd]
這個配置段包含MySQL啟動腳本所引用的命令。如果使用MySQL4.X或4.X以上版本,必須把這個配置段改成[MySQLd_safe]。
err-log=/var/log/MySQLd.log
這是MySQL所關聯的錯誤被發送到的這個文件。如果使用MySQL4.X或4.X以上版本,必須使用log-error指令替換這條命令。
pid-file=/var/run/mysqld/MySQLd.pid
最後,pid-file指令定義MySQL服務器在運作期間的進程標識符(PID)。如果MySQL服務器當前沒有運行,這個文件應該不存在。
提示:用戶可以配置與用戶特定相關的MySQL配置文件;為此,只需給指定用戶主目錄中的.my.cnf隱含文件添加所選的配置命令即可。
my-samll-cnf
在本文中,將說明my-small-cnf配置文本中的所有命令。當回顧其它MySQL樣本配置文件時,將參考本文所解釋的各條命令和指令的含義。先從下面這個配置段開始分析該文件中的有效命令和指令:
[clIEnt]
這個配置把指令傳遞給與MySQL服務器相關的客戶。
port=3306
MySQL所相關的標准TCP/IP端口是3306。如果需要修改這個端口號(可以增強安全),必須確保用於MySQL客戶與服務器的所有相應配置文件中均修改這個號。
socket=/var/lib/mysql/MySQL.sock
正像默認的/etc/my.cnf文件中所定義的那樣,這是控制MySQL客戶與服務器間通信的標准套接字文件。
[MySQLd]
當啟動MySQL服務器時,它由[MySQLd]配置段中所定義的命令來控制。
port=3306
socket=/var/lib/mysql/MySQL.sock
當然,與同一個MySQL數據庫相關的客戶與服務器需要使用相同的TCP/IP端口和套接字。
skip-locking
多個客戶可能會訪問同一個數據庫,因此這防止外部客戶鎖定MySQL服務器。這個skip-locking命令是MySQL4.X或4.X以上版本中的skip-external-locking命令。
一般來說,如果正在使用MySQL4.X或4.X上以版本,這個set-variable指令沒有必要帶有這個列表中的這些命令。
set-variable=key_buffer=16k
這個緩沖區確實很小;如果一個數據庫在一個文本文件中包含不止幾百行數據,它將會超載這個緩沖區的容量。這個數據庫可能不會超載一個文本文件地址簿的容量。如果這不只是一個供個人使用的數據庫,這個限額很快就會被達到。假使那樣的話,可能需要考慮與其它配置文件之一相關的那些限額。
set-variable=max_allowed_packet=1M
當然,與一個數據庫相關的信息會增加到超出實際數據。在默認的情況下,如果該信息在一個服務器上超過1MB以上,MySQL將會產生一條錯誤信息。
set-variable=thread_stack=64k
這條指令限定用於每個數據庫線程的棧大小。默認設置足以滿足大多數應用。
set-variable=table_cache=4
用戶可以限定一個數據庫中打開表的數量;越小的限額(默認值是64)適合越小規模的數據庫。
set-variable=sort_buffer=64k
在處理一個數據庫時,用戶可能需要內存中附加的緩沖區空間。
set-variable=net_buffer_length=2k
正如net_buffer_length指令所定義的,MySQL服務器還給傳入的請求保留了空間。
server-id=1
一般來說,如果有一個MySQL主服務器,應該把它的server-id設置成1;應該把MySQL從屬服務器的server-id設置成2;
[MySQLdump]
用戶可以在不同類型的SQL數據庫之間傳輸數據,這由[MySQLdump]配置段中的命令來控制。
quick
quick選項支持較大數據庫的轉儲。
set-variable=max_allowed_packet=16M
當然,用來傳輸數據庫表到其它數據庫的max_allowed_packet大於客戶與服務器之間的簡單通信所使用的信息包。
[MySQL]
no-auto-rehash
這個配置段設置啟動MySQL服務的條件;在這種情況下,no-auto-rehash確保這個服務啟動得比較快。
[isamchk]
[myisamchk]
像SQL這樣的關系數據庫用所謂的Indexed Sequential Access Method(索引順序存取方法,簡稱ISAM)來處理。這兩個配置段中的命令是相同的;這些命令與檢查並修復數據庫表的同名命令有關。
set-variable=key_buffer=8M
set-variable=sort_buffer=8M
在前面談及MySQL服務器時,用戶己經見過這些變量。它們在這裡都比較大,以便支持數據庫的較快速檢查與修復。
[MySQLhotcopy]
interactive-timeout
正如[MySQLhotcopy]配置段所指定的,在一個數據庫復制操作期間,連接會掛起。在默認情況下,interactive-timeout變量把一個數據傳輸的最大時間量設置為28800秒(8個小時)。
my-medium.cnf文件
與中等數據庫相關的MySQL配置文件含有和my-small-cnf配置文件中一樣的有效配置段。在[MySQLd]配置段中,下面這些命令支持較大規模的服務器數據庫:
set-variable=key_buffer=16M
set-variable=table_cache=64
set-variable=sort_buffer=512K
set-variable=net_buffer_length=8K
log-bin
一般來說,這個配置段中的命令支持服務器上的較大高速緩存與緩沖區長度。應該看到兩條新命令。
set-variable=myisam_sort_buffer_size=8M
log-bin
myisam_sort_buffer_size命令允許MySQL索引數據庫,第二條命令支持二進制日志記錄方法。
[isamchk]
[myisamchk]
當然,這兩個配置段中的緩沖區比用於數據庫傳輸的緩沖區大,這個文件包含下面這些命令;它們發送消息到服務器和接收來自服務器的消息。
set-variable=read_buffer=2M
set-variable=write_buffer=2M
my-large.cnf文件
與較大型數據庫相關的MySQL配置文件含有和my-samll-cnf配置文件中一樣的有效配置段。在本文中,將比較my-large-cnf與my-medium-cnf樣本文件中的各條命令。在[MySQLd]配置段中,下面這些命令支持較大型的服務器數據庫:
set-variable=key_buffer=256M
set-variable=table_cache=256
set-variable=sort_buffer=1M
set-variable=myisam_sort_buffer_size=64M
set-variable=net_buffer_length=8K
這個配置段中有3條附加的命令。record_buffer命令保存對一個數據庫中不同表的掃描結果。thread_cache命令對多請求有用;空閒線程被高速緩存起來,進而允許新的搜索操作采用己有的線程。只要這防止搜索操作啟動新的服務器進程,這就能減輕系統上的負荷。
set-variable=record_buffer=1M
set-variable=thread_cache=8
set-variable=thread_concurrency=8
thread_concurrency變量限定同時運行的線程數量。my-large.cnf樣本文件建議用戶應該把這個數量限定於本計算機上CPU數量的兩倍;這個特定設置相當於4個CPU。
my-huge.cnf文件
my-huge.cnf文件含有和my-large.cnf配置文件中一樣的命令。當然,分配給大多數指令的值比較大並適合較大型的數據庫。
正如ww.mysql.com站點上所描述的,擁有大量數據庫的組織,比如:google、Sabre和NASA都采用MySQL。雖然我們猜測這些公司所使用的命令不同於用戶在my-huge.cnf文件中所看到的命令,但這至少讓用戶對MySQL企業級數據庫有一個概念。