欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Linux下解决MySQL服务的两个基本问题_MySQL

程序员文章站 2022-05-01 13:49:17
...
使用mysql基本基本上会遇到主要的两个问题.

1.第一次起动mysql是没有问题的.对mysql做了一些操作,特别是删除mysql中一些不要的帐号后,重新起动mysql会遇到这样的问题

#/etc/init.d/mysqld restart
stopping mysql [ok]
Timeout error occurred trying to start MySQL Daemon. [failure]

但是这个时候mysql实际上已经起动了,因为用netstat -ln命令去看3306端口已经起动.使用mysql -u root -p password也能连接到数据库.

这实际上是mysql-3.x的一个bug(具体可以去看mysql的bugzilla和redhat的bugzilla).

是什么原因导致连接超时呢?

我们不妨先看看/etc/init.d/mysqld起动脚本是如何工作的,注意下面的一段

# If you've 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 0 ]; then
for x in 1 2 3 4 5 6 7 8 9 10; do
if [ -n "`$ping 2> /dev/null`" ]; then
break;
else
sleep 1;
fi
done

if !([ -n "`$ping 2> /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 0 ] && touch /var/lock/subsys/mysqld
return $ret

我们看到,脚本判断mysql是否起动,使用的是mysqladmin ping命令.

而这个命令想要正确执行是需要能够登录mysql的.现在一些默认帐号已经删除,而且其它帐号已经设置了密码(默认没有设置密码).于是它没有办法连接到mysql.

不妨使用下面的命令测试一下

#mysqladmin -u root -ppassword ping
mysql alive

当你提供了帐号和密码时,它的ping命令就可以正确执行了.

这个bug在mysql新出的mysql4.x可以解决.

但是RH9到FC3一直使用的是mysql3.x(不过mysql官方好象才推出mysql4.1,FC需要考虑问题性).

于是我用了下面的办法临时解决.

a)建立一个帐号,不设置密码,不给任何权限.
b)修改/etc/init.d/mysqld

下面我给出具体操作

#mysql -u root -p passwd
mysql>GRANT select ON test.* TO daemon@localhost

mysql>revoke select on test.* from daemon@localhost

打开/etc/init.d/mysqld

把下面这行

ping="/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping"

修改为

ping="/usr/bin/mysqladmin -udaemon ping"

保存,退出.