注意:本文還處於Beta版本!
很多人對於mysql一個最大的誤解就是MySQL的事務處理功能。
從MySQL 3.23開始,就開始支持BDB表類型,但是需要首先編譯BDB支持,而在Red Hat 7.0上的編譯,一直存在問題。就是看上去編譯成功,
> show table status
也顯示表類型為BDB,但是如果使用begin語句,定義事務的話,接下來的rollback語句卻不能回滾事務。
筆者在實踐中總結出的結論就是,需要安裝RH7.0中的db*devel.rpm包,我們知道RPM 4以上的版本采用了最新的BDB db3格式來存儲軟件包信息,而BDB數據庫包在有些庫函數上是和這些軟件是相關的,因此,我們懷疑這個問題和RH7中BDB相關的包有關。果然,在我們安裝完db1-devel.rpm和db3-devel.rpm以後,重新編譯 MySQL,事務處理就正常了。
首先編譯BDB(下載的版本是MySQL網站上的db3.2.9h.tar.gz,直接從Berkeyley DB網站上下載的軟件包是不能使用的,編譯MySQL時會出錯):
cd build-unix
../dist/configure
make
make install
然後編譯 MySQL:
./configure --prefix=/usr/local/mysql --with-berkeley-db=/usr/local/BerkeyleyDB3.2 --with-tcp-port=9999 --withmysqld-user=mysql --with-charset=gb2312 --with-extra-charsets=latin1
需要說明的是,MySQL從3.23.35開始內置了BDB,因此,我們可以省去前面編譯BDB的過程,但是需要在編譯MySQL時要把--with-berkeley-db部分改為:
--with-berkeley-db=./bdb
同時,從這個版本開始,還支持Innobase,另外一種支持事務處理的數據庫類型。我們只要在 my.cnf 中指定:
..
就可以使用 innobase 類型的數據庫了。
從配置的過程看上去很像Sybase等大型數據庫了。
看樣子,MySQL會在功能上走得更遠。