
前陣子交代了mysql的一些初級(jí)安裝問題,接下來繼續(xù)。
1.設(shè)置存儲(chǔ)引擎(strorage engine)
mysql有很多存儲(chǔ)引擎,不同的引擎有不同的存儲(chǔ)特性,應(yīng)對(duì)不同的解決方案,這就不多說了。
不過最基本的,應(yīng)該是不用myisam,雖然它很快,但是不支持事務(wù)。
innodb并不慢,雖然不可能會(huì)有myisam那么快,但是它支持事務(wù),完整性優(yōu)于更好的效率。
所以配置mysql的第一步,就是設(shè)置已經(jīng)選好的存儲(chǔ)引擎——innodb
在.my.cnf配置文件中加上
[server]
default-storage-engine=INNODB
2.設(shè)置數(shù)據(jù)存儲(chǔ)位置
本來不會(huì)有這一步的,數(shù)據(jù)文件默認(rèn)的會(huì)保存在mysql/data目錄下。但是我當(dāng)前的磁盤分區(qū)快滿了,今后肯定沒有辦法導(dǎo)入大量數(shù)據(jù),無奈之下加了塊磁盤,然后把數(shù)據(jù)存儲(chǔ)位置設(shè)置到新磁盤下。
因?yàn)槭褂玫氖莍nnodb,所以默認(rèn)的數(shù)據(jù)源就不進(jìn)行移動(dòng)了,只要設(shè)置innodb的目錄即可
[server]
innodb_data_home_dir=/newdisk
innodb_log_group_home_dir=/newdisk
其中一個(gè)是數(shù)據(jù)文件目錄,另外一個(gè)是log目錄,這個(gè)log和binlog還不太一樣,主要是用來維護(hù)事務(wù)完整性的吧,并不是備份用的。
The ib_logfile's hold statements affecting innodb tables only. If a crash occurs they are automatically used to complete any innodb transactions that didn't complete before the crash.
3.設(shè)置字符集
我想這是初次使用mysql的人通常會(huì)遇到的問題,而且越晚發(fā)現(xiàn)越致命吧。
mysql支持多字符集,為了支持國際化存儲(chǔ),通常服務(wù)器的字符集肯定會(huì)設(shè)置成utf8。不過沒有國際化需求的同學(xué)可以大大方方的使用gb2312/gbk之類的本地字符集。(默認(rèn)是latin)
[server]
character_set_server=utf8
服務(wù)器的字符集設(shè)置其實(shí)是次要的,畢竟可以通過create database或者create table來設(shè)置更具體的存儲(chǔ)字符集。
客戶端的字符集設(shè)置是關(guān)鍵,分為三部分:
1.client set。即作為數(shù)據(jù)源所使用的字符集。比如你從文件中導(dǎo)入數(shù)據(jù)到mysql,那么應(yīng)該將client set設(shè)置為文件所用的字符集;又比如你通過客戶端執(zhí)行插入語句,那么應(yīng)該將client set設(shè)置成客戶端所用的字符集;我的secureCRT是utf8的,所以client set=utf8。
2.connection set。mysql服務(wù)器收到數(shù)據(jù)后,會(huì)將文字從client set轉(zhuǎn)換成connection set。
為什么要有一個(gè)connection set呢,直接轉(zhuǎn)換成存儲(chǔ)字符集入庫不就好了嗎?我查了一下,使用connection set的理由是,文字長度和文字比較等事情的結(jié)果,會(huì)根據(jù)字符集的不同而不同的。
connection set可以根據(jù)需要設(shè)置,只要?jiǎng)e是有損轉(zhuǎn)換即可。通常會(huì)和client set保持一致而去掉轉(zhuǎn)換,如果比較結(jié)果不影響什么的話。
3.result set。mysql執(zhí)行語句的結(jié)果集在發(fā)給你之前,會(huì)先轉(zhuǎn)換成result set,通常會(huì)和client set一致。你的客戶端用什么就讓它返回什么就好。
我會(huì)選擇所有的字符集都用一種,這樣也就不需要什么轉(zhuǎn)換了。
[client]
default-character-set=utf8
或者set names utf8(執(zhí)行語句)
4.表空間(table space)
之所以提到表空間的問題,是因?yàn)閕nnodb會(huì)把所有的數(shù)據(jù)都寫入到一個(gè)數(shù)據(jù)文件上,如果你不修改默認(rèn)設(shè)置的話。訪問一個(gè)超大的文件和訪問多個(gè)較大的文件在效率上相比是怎樣我不清楚,但是我的當(dāng)時(shí)導(dǎo)入數(shù)據(jù)的時(shí)候是越來越慢,于是就改成使用多個(gè)表空間(數(shù)據(jù)文件)了。
[server]
innodb_autoextend_increment=50
innodb_data_file_path=ibdata1:700M;ibdata2:2200M;ibdata3:1250M;autoextend
在多個(gè)表空間的情況下,mysql只會(huì)往最新的一個(gè)數(shù)據(jù)文件上寫數(shù)據(jù),所以前面的表空間會(huì)固定在這個(gè)大小。
除非老的表空間因刪除數(shù)據(jù)而有空閑,不然是不會(huì)往里寫入的,并且老的表空間是不會(huì)再增大的。
這種多表空間的使用方式,需要偶爾停下機(jī),新建一個(gè)表空間,還是挺麻煩的。
posted on 2009-03-29 20:50
LOGOS 閱讀(1895)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
mysql入門