天天看點

Mysql my.cnf配置

find -name 'my-*.cnf'

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.檔案内都有詳細的說明

[mysqld]

port = 3306

serverid = 1

socket = /tmp/mysql.sock

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

skip-networking

開啟該選項可以徹底關閉MySQL的TCP/IP連接配接方式,如果WEB伺服器是以遠端連接配接的方式通路MySQL資料庫伺服器則不要開啟該選項!否則将無法正常連接配接!

/--------------------------------------------------------------------

--------------------------------------------------------------------/

[原創]MySQL安裝與配置-2005-07-19

作者:tyc00n

如有轉載,請注明出處及以上資訊

在學習MySQL過程中,遇到了很多的麻煩,為了讓初學者不再遇到相同的問題,是以我花了點時間寫了本文。本人也是一個新手,還望多多指教!!

在安裝MySQL之前,先來了解一下相關的配置檔案

MySQL配置檔案

MySQL釋出的最新産品實際上超出了Red Hat Enterprise Linux所攜帶的版本。但是,穩定性和開放源代碼可是很重要的因素,是以在作業系統上使用較早MySQL版本是有道理的。

有許多可以采用的配置檔案,它們都被包含在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企業級資料庫有一個概念。

為了友善起見,本文所說的采用Red Hat Enterprise Linux 4.0所攜帶的版本,在終端中輸入以下指令:

[[email protected] ~]#rpm –q mysql

會得到以下所顯示的内容

mysql-4.1.7-4 RHEL4.1

這說明了在安裝RHEL的時候,己經安裝了MySQL。是不是己經安裝了MySQL就可以運作了呢?接着再輸入以下指令:

[[email protected] ~]# service mysqld start

顯示如下:

mysqld:unrecognized service

說明了MySQL伺服器還沒有啟動,還需要安裝MySQL-Server程式包。其版本要與所攜帶的一緻。如:MySQL-Server-4.1.7-4.i386.rpm。安裝完成之後,重複執行之前的指令,會得到以下顯示資訊。

初始化MySQL資料庫: [确定]

啟動MySQL:          [确定]

配置MySQL使用者

在配置一個MySQL伺服器時,需要配置該伺服器上的使用者。這些使用者獨立于Linux計算機上的使用者群組。首先,需要為MySQL系統添加一個根使用者。令人遺憾的是,需要在指令行上用明文形式添加與根使用者相關的密碼。

下面這個指令為MySQL系統建立一個根使用者:

#mysqladmin –u root password i8oe66q

當然,還需要建立普通使用者來通路這個MySQL系統。接着,需要使用根帳号登入到MySQL中,如下所示:

[[email protected] root]#mysql –u root –p

Enter password:

Welcome to the MySQL montor. Command end with; or \g.

Your MySQL connection id is 7 to server Version:4.1.7

Type ‘help;’ lr ‘\h’ for help.Type ‘\C’ to clean the buffer.

Mysql>;

提示:使用者應該在直接登入到MySQL伺服器中建立MySQL使用者。除非使用一個SSH這樣的安全協定,否則密碼将用明文形式傳遞。此外,由于MySQL密碼直接鍵入在指令行上,是以在建立MySQL使用者時,避免讓其它人站在旁邊觀看。

續……

繼續閱讀