接上文 LAMP 优化之 apache/httpd
(原文链接 http://ddbiz.com/?p=231)
测试服务器搬迁到 vmware 环境后好久了,mysql 数据库的默认建表一直是 MyISAM。
这在测试环境中没啥大影响,但是系统快要上线了,整个系统平台联调和压力测试就要进行了。为了保证数据完整性,需要统一一下平台设置,当然mysql的innodb也一定要上的。
测试环境:
CentOS 5.x x86
MySQL 5.0.45
测试环境的mysql是安装系统后直接yum install/update 的,没有做过任何设置。最初使的配置文件如下:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
根据参考手册,mysql 5.x的默认表引擎已经是 INNODB了,可是为什么自动建表时,却不能使用INNODB呢。
看看 /var/log/mysqld.log,根据里面的记录,数据库确实是使用INNODB作为默认引擎的:
081029 01:38:53 mysqld started
081029 1:38:55 InnoDB: Started; log sequence number 0 111257459
081029 1:38:57 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.45' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution
这是怎么回事呢?
修改一下.cnf 配置文件:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
#****** INNODB Specific options ******
default-table-type=InnoDB
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=100M
innodb_log_file_size=50M
innodb_thread_concurrency=8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
特别加入 INNODB 的配置信息,没想到数据库起不来了,日志中显示:
081109 01:21:31 mysqld started
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 524288000 bytes!
081109 1:21:31 [ERROR] Default storage engine (InnoDB) is not available
081109 1:21:31 [ERROR] Aborting
原来如果更改了 mysql 的 innodb_log_file_size,则需要把原来的ib_logfile0/x删除,再重新启动。
INNODB_LOG_FILE_SIZE一般设置为 INNODB_BUFFER_POOL_SIZE的40%到70%。
重新启动后的mysql,倒是建表可以使用默认的INNODB引擎,具体什么原因,后面再继续探讨吧。