默认安装的mysql使用的是myisam引擎,是比较高效的引擎,但是最近有些需求需要用到mysql 事务,而myisam是不支持事务的,在网上找了一下,重新编译数据库并做了一些配置。
1.编译
在常用的mysql编译参数里,加上 –with-plugins= innobase ,这个使得mysql自动加上inno引擎
我的全部编译参数是(我用的是mysql 5.3的版本,老版本的inno支持可能不是这样写法,可能是–with-inno
./configure –prefix=/usr/local/mysql –localstatedir=/usr/local/mysql/var/ –with-server-suffix=-enterprise-gpl –without-debug –with-big-tables –with-extra-charsets=latin1,gb2312,big5,utf8,GBK –with-extra-charsets=all –with-pthread –enable-static –enable-thread-safe-client –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –enable-assembler –with-plugins=innobase
make && make install
重启mysql后,进入mysql 输入
show engines;可以看到有无innodb的支持,如果有,就是编译成功了,先关掉mysql,打开/etc/my.cnf编辑(我是用mysql中的huge.cnf为模板,那个模板适合比较大量的数据)
将 配置文件中inno字样的前面的#注释去掉,在mysqld里面加上
default-storage-engine = InnoDB
这样之后创建的表,默认则为inno格式,如果已有的表,要改成inno,用
alter table {table_name} ENGINE=’InnoDB’;
之后重新启动mysql即可,我这里碰到一些问题,重启mysql后一直没有启动innodb的支持,看了下log文件,发现是inno的数据文件大小之类的不符配置,根据出错提示将那些数据文件删掉即可。
测试是否支持事务:
在mysql里,
begin; insert into test.user values (3);
select * from test.user;
此时应该看到有一条记录
rollback;
select * from test.user
如果此时看到空记录,就对了