这是在为一位朋友安装配置服务器时遇到的问题,虽然还没有最终得到完美的解决办法。但是又变通的解决办法,算是美中不足的办法吧。
目录 [隐藏]
1 运行环境
1.1 操作系统
1.2 MySQL版本
1.3 MySQL安装
2 故障症状
2.1 症状体现
2.2 启动提示
2.3 日志信息
3 故障原因
4 解决办法
5 总结
运行环境
操作系统
因为他们对unix/linux系统也不是特别熟悉,因此在选用系统时,抱着一个使用者多,有问题好解决的宗旨。于是选择了免费的,基于Redhat企业版的 CentOS。
具体版本:
CentOS 4.4
MySQL版本
按他们的要求,选择最新的MySQL 5.0.37版本
MySQL安装
MySQL的安装方法如下:
# tar -zxvf mysql-5.0.37.tar.gz
# cd mysql-5.0.37
# ./configure --prefix=/opt/modules/mysql \
--enable-assembler \
--with-charset=utf8 \
--with-extra-charsets=all \
--with-mysqld-ldflags=-all-static \
--without-debug \
--with-mysqld-user=mysql \
--with-big-tables
# make
# make install
# cp support-files/my-medium.cnf /etc/my.cnf
# useradd mysql
# /opt/modules/mysql/bin/mysql_install_db --user=mysql
# chgrp -R mysql /opt/modules/mysql
# chown -R mysql:mysql /opt/modules/mysql/var
# cp /opt/modules/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
故障症状
症状体现
第一次启动,总是在等待状态;
强行终止第一次启动后,可以启动mysql服务;
客户端不能连接启动起来的MySQL服务;
不能停止、重启MySQL服务和杀死mysqld进程;
启动提示
安装后,第一次启动MySQL时,不断提示点号(.....),等待半个小时以上,仍然没有启动完成。如果强行终止,再启动MySQL,提示启动完成,但是客户端无法连接MySQL服务。并且,无法停止、重启MySQL服务。甚至使用killall -15 mysqld 均无效。
日志信息
在第一次启动MySQL时,可以看到初始化InnoDB的信息:
InnoDB: The first specified data file /opt/modules/mysql/var/ibdata1 did not exist:
InnoDB: a new database to be created!
070407 0:15:59 InnoDB: Setting file /opt/modules/mysql/var/ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
070407 0:15:59 InnoDB: Log file /opt/modules/mysql/var/ib_logfile0 did not exist: new to be created
InnoDB: Setting log file /opt/modules/mysql/var/ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
070407 0:15:59 InnoDB: Log file /opt/modules/mysql/var/ib_logfile1 did not exist: new to be created
InnoDB: Setting log file /opt/modules/mysql/var/ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
强行终止第一次启动后,再启动MySQL时,可以看到如下日志信息:
InnoDB: No valid checkpoint found.
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/error-creating-innodb.html
070406 22:48:06 [Note] /opt/modules/mysql/libexec/mysqld: ready for connections.
Version: '5.0.37' socket: '/tmp/mysql.sock' port: 3306 Source distribution
A mysqld process already exists at Fri Apr 6 22:50:06 CST 2007
故障原因
从上面的症状和日志信息来分析,应该是初始化InnoDB时出现异常,导致不能初始化成功。虽然强行终止第一次的初始化后,能够启动MySQL,但是却因为无法初始化InnoDB引擎,导致MySQL不能正常服务。
但是为什么会不能正常初始化呢?我google、baidu,均找不到相关的资料。由于时间以及应用的因素,没有能够进一步排查和分析。
也许有朋友会说,错误日志不是提示看 http://dev.mysql.com/doc/refman/5.0/en/error-creating-innodb.html 吗?事实上,我看了,也逐一排除上面提到的可能性,最终仍然无法解决问题。因此希望知道的朋友能够告知一声16hot。
解决办法
针对这个情况,与那位朋友商讨后,决定屏蔽不用InnoDB引擎。因为他们目前并没有用到InnoDB相关技术,而服务器很快就要托管到IDC,时间很紧。因此我们一致决定屏蔽InnoDB引擎。
屏蔽InnoDB引擎的方法: 在my.cnf文件的[mysqld]段加入skip-innodb即可。
#vi /etc/my.cnf
[mysqld]
skip-innodb
配置好后,启动MySQL正常,客户端也可以连接了。
总结
这个问题没有得到最终的解决,只是针对应用的特点来避过问题而已。还需要找机会配置实验,总不能在生产服务器上搞试验的。但是在实际工作中,会遇到很多这样的例子。如何结合应用,很快的避过次要问题,使得应用能够正常运行,才是最重要的。
当然,作为系统管理员,追求最终解决方法,是一个良好的工作、学习态度。
星期五, 02/24/2012 - 09:06 — 杨超