LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 869|回复: 1

关于fedora core 系统的mysql服务器起动脚本问题的解决

[复制链接]
发表于 2005-2-2 19:33:32 | 显示全部楼层 |阅读模式
我写这片文章的目的不是想告诉朋友们如何解决这个问题,而是想提示新手们如何分析一个陌生的问题,并主动解决问题。
问题发现:
    我装的是fedora core 3,平时只是写点C代码,从来没玩过mysql服务器。可毕业设计要用到mysql,于是不得不在linux配置一个,运行的很好。但是当我给mysql的root用户(刚知道他和系统root用户是两回事)添加的密码后,却发现了问题如下:
  1.service mysqld start 非常慢,十秒后提示
------------------------------------------------------------------------------------
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL:                                            [FAILED]
------------------------------------------------------------------------------------
  2.但是mysql服务器程序却起动正常,因为客户端可以连接到服务器并对数据进行操作。
  3.service mysqld stop正常
问题分析:
    从上述三个现象来看,我认为问题出在系统的/etc/rc.d/init.d/mysqld脚本(mysql启动脚本)中的start()函数部分,且问题不严重。于是我把解决问题的突破口定在/etc/rc.d/init.d/mysqld这个文件上。
    现在,到google狂搜固然有帮助,但不如先看看/etc/rc.d/init.d/mysqld再说,start()函数部分列在下面:

-------------------------------------------------------------------------------------------------------
start(){

        touch /var/log/mysqld.log
        chown mysql:mysql /var/log/mysqld.log
        chmod 0640 /var/log/mysqld.log
        ###上面三行不至于让我等10秒
        if [ ! -d $datadir/mysql ] ; then
            action $"Initializing MySQL database: " /usr/bin/mysql_install_db
            ret=$?
            chown -R mysql:mysql $datadir
            if [ $ret -ne 0 ] ; then
                return $ret;
            fi
        fi
         ###那"Initializing MySQL database: "只在第一次运行mysql服务器时见过,固排除
        chown -R mysql:mysql $datadir
        chmod 0755 $datadir
        /usr/bin/safe_mysqld  --defaults-file=/etc/my.cnf >/dev/null 2>&1 &
        ret=$?
        ###哦!上面两行起动了服务器,难道是这里有问题?于是我在确保服务器关闭的前提下运
        ###行
        ###    #/usr/bin/safe_mysqld --defaults-file=/etc/my.cnf
        ###结果发现服务器正常启动,并可登陆,固排除

        # 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"
        ###我感觉,给root加上密码与上文可能有联系,问题似乎找到了
        # 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;###呵呵,就是在这里睡了10秒的,好,上面就是问题所在
            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
}
----------------------------------------------------------------------------------------------
    通过分析,可以肯定这个命令
/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping
有问题。脚本里对它的说明指出要把UNKNOWN_MYSQL_USER改成一个有mysql ping权利的用户。可我还不会建立mysql用户,现在到了求救的时候了。
问题解决:
    打开google搜索相关内容,我在国外一个网站得知此问题还与selinux有关,但我已经关闭了selinux,固然与我无关。最后,我在网上查到了有关建立mysql帐户和权限的配置相关内容,为我的mysql服务器创建了一个据有ping权利的mysql用户"usr_ping",过程如下:
(已经启动服务器)
#mysql --user=root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.58
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>grant process on *.* to 'usr_ping'@'localhost';###注意
Query OK, 0 rows affected (0.04 sec)
mysql>quit
Bye
这一部是建立用户usr_ping,我允许他在我的机器上拥有process权利,即允许之查询服务器状态,除此之外用户usr_ping什么都不能做(为了安全)。
然后就是编辑/etc/rc.d/init.d/mysqld文件的
ping="/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping"
改为
ping="/usr/bin/mysqladmin -u usr_ping ping"
(我没有给usr_ping创建密码,如果创建了,则应改成
ping="/usr/bin/mysqladmin -u usr_ping ping -p"
但这样,每次启动mysql时似乎就要输入密码了

保存后,重启mysql:
# service mysqld restart
Stopping MySQL:                                           [  OK  ]
Starting MySQL:                                            [  OK  ]
呵呵,问题解决了。
发表于 2005-2-2 22:44:10 | 显示全部楼层
我是直接把原来那个 /var/run/mysqld/mysqld.sock 删掉了,再启动mysql就正常了
而且,我把mysql升级以后也是正常的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表