使用mysql基本基本上会遇到主要的两个问题
第一次起动mysql是没有问题的对mysql做了一些操作特别是删除mysql中一些不要的帐号后重新起动mysql会遇到这样的问题
#/etc/initd/mysqld restart
stopping mysql [ok]
Timeout error occurred trying to start MySQL Daemon [failure]
但是这个时候mysql实际上已经起动了因为用netstat ln命令去看端口已经起动使用mysql u root p password也能连接到数据库
这实际上是mysqlx的一个bug(具体可以去看mysql的bugzilla和redhat的bugzilla)
是什么原因导致连接超时呢?
我们不妨先看看/etc/initd/mysqld起动脚本是如何工作的注意下面的一段
# If youve removed anonymous users this line must be changed to
# use a user that is allowed to ping mysqld
ping=/usr/bin/mysqladmin uUNKNOWN_MYSQL_USER ping
# Spin for a maximum of ten seconds waiting for the server to come up
if [ $ret eq ]; then
for x in ; do
if [ n `$ping > /dev/null` ]; then
break;
else
sleep ;
fi
done
if !([ n `$ping > /dev/null` ]); then
echo Timeout error occurred trying to start MySQL
Daemon action $Starting $prog: /bin/false
else
action $Starting $prog: /bin/true
fi
else
action $Starting $prog: /bin/false
fi
[ $ret eq ] && touch /var/lock/subsys/mysqld
return $ret
我们看到脚本判断mysql是否起动使用的是mysqladmin ping命令
而这个命令想要正确执行是需要能够登录mysql的现在一些默认帐号已经删除而且其它帐号已经设置了密码(默认没有设置密码)于是它没有办法连接到mysql
不妨使用下面的命令测试一下
#mysqladmin u root ppassword ping
mysql alive
当你提供了帐号和密码时它的ping命令就可以正确执行了
这个bug在mysql新出的mysqlx可以解决
但是RH到FC一直使用的是mysqlx(不过mysql官方好象才推出mysqlFC需要考虑问题性)
于是我用了下面的办法临时解决
a)建立一个帐号不设置密码不给任何权限
b)修改/etc/initd/mysqld
下面我给出具体操作
#mysql u root p passwd
mysql>GRANT select ON test* TO daemon@localhost
mysql>revoke select on test* from daemon@localhost
打开/etc/initd/mysqld
把下面这行
ping=/usr/bin/mysqladmin uUNKNOWN_MYSQL_USER ping
修改为
ping=/usr/bin/mysqladmin udaemon ping
保存退出
重新起动mysql
#/etc/initd/mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
如果你的第二行仍然是failure的话再执行下面的命令
#/etc/initd/mysqld start
这时应该式ok了
如果这样可以ok的话
那么你需要修改/etc/initd/mysqld
在restart函数的start后面再加一个start就可了
即使刚安装的mysql再起动后去看日志给给出下面的这些信息
Cannot initialize InnoDB as innodb_data_file_path is not set
If you do not want to use transactional InnoDB tables add a line
skipinnodb
to the [mysqld] section of init parameters in your f
or myini If you want to use InnoDB tables add to the [mysqld]
section for example
innodb_data_file_path = ibdata:M:autoextend
But to get good performance you should adjust for your hardware
the InnoDB startup options listed in section at
这是因为默认的数据库起动脚本需要加载innodb数据库但是mysql在做初始话时并没有初始化时并没有加载这样的数据库
因此这里有两种解决办法:使用和不使用innodb
我们先看不使用innodb的办法
其实这个方法就是跳过innodb的方法
在/etc/f文件的mysqld区域增加一行
skipinnodb就可以了
如果我们需要使用innodb呢?
那么可在/etc/f文件的mysqld区域增加下面几行
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata:M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
setvariable = innodb_buffer_pool_size=M
setvariable = innodb_additional_mem_pool_size=M
setvariable = innodb_log_file_size=M
setvariable = innodb_log_buffer_size=M
innodb_flush_log_at_trx_commit=
setvariable = innodb_lock_wait_timeout=
保存退出重启起动mysql再去看日志
应该不会再提示有关innodb的问题了