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