LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   can not "service mysqld start" (https://www.linuxquestions.org/questions/linux-newbie-8/can-not-service-mysqld-start-550171/)

dfw123 04-30-2007 01:02 PM

can not "service mysqld start"
 
Hello!

I have mysql5.0 on fedora6. I am root user and can use "mysqld_safe --user=mysql & "to start mysql but can not use "service mysqld start", I can "service mysqld stop", I don't even use InnoDB, it will has error in error log

070425 mysqld started
070425 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
070425 mysqld ended

I check /var/lib/mysql and ibdata1 both are mysql user and mysql group, mysql is installed by add/remove.

[root@localhost ~]# rpm -aq *mys*
mysql-server-5.0.27-1.fc6
libdbi-dbd-mysql-0.8.1a-1.2.2
php-mysql-5.1.6-3.5.fc6
mysql-5.0.27-1.fc6
mysql-connector-odbc-3.51.12-2.2

I can not start mysql by "service mysqld start", the error is show in first post of the error log and following error

Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]

But I can stop mysql by "service mysqld stop"

I can start mysql by "mysqld_safe --user=mysql &"


any help?

twantrd 05-01-2007 07:11 PM

You probably need to modify your startup script. Can you paste it here for us to see?

-twantrd

dfw123 05-02-2007 12:28 PM

sure.

Code:

#!/bin/bash
#
# mysqld        This shell script takes care of starting and stopping
#              the MySQL subsystem (mysqld).
#
# chkconfig: - 64 36
# description:  MySQL database server.
# processname: mysqld
# config: /etc/my.cnf
# pidfile: /var/run/mysqld/mysqld.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network


prog="MySQL"

# extract value of a MySQL option from /etc/my.cnf
# Usage: get_mysql_option FILE VARNAME DEFAULT
# result is returned in $result
# Ugly as this is, it knows nothing of option file sections ...
get_mysql_option(){
        result=`sed -n "s/^[ \t]*$2[ \t]*=[ \t]*//p" "$1" 2>/dev/null | tail -n 1`
        if [ -z "$result" ]; then
            # not found, use default
            result="$3"
        else
            # found, still have to deal with quoting and end-of-line comments
            dequoted=`echo "$result" | sed "s/^'\([^']*\)'.*$/\1/"`
            if [ x"$dequoted" != x"$result" ]; then
                result="$dequoted"
            else
                dequoted=`echo "$result" | sed 's/^"\([^"]*\)".*$/\1/'`
                if [ x"$dequoted" != x"$result" ]; then
                    result="$dequoted"
                else
                    result=`echo "$result" | sed 's/^\([^ \t#]*\).*$/\1/'`
                fi
            fi
        fi
}

get_mysql_option /etc/my.cnf datadir "/var/lib/mysql"
datadir="$result"
get_mysql_option /etc/my.cnf socket "$datadir/mysql.sock"
socketfile="$result"
get_mysql_option /etc/my.cnf log-error "/var/log/mysqld.log"
errlogfile="$result"
get_mysql_option /etc/my.cnf pid-file "/var/run/mysqld/mysqld.pid"
mypidfile="$result"

start(){
        touch "$errlogfile"
        chown mysql:mysql "$errlogfile"
        chmod 0640 "$errlogfile"
        [ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile"
        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
        chown -R mysql:mysql "$datadir"
        chmod 0755 "$datadir"
        # The reason for explicitly specifying --pid-file is that there may
        # be no such entry in my.cnf, and the default behavior will be to not
        # create it at all.  Likewise, we specify --log-error in case there
        # was not an entry in my.cnf.
        /usr/bin/mysqld_safe  --defaults-file=/etc/my.cnf --pid-file="$mypidfile" --log-error="$errlogfile" >/dev/null 2>&1 &
        ret=$?
        # Spin for a maximum of N seconds waiting for the server to come up.
        # Rather than assuming we know a valid username, accept an "access
        # denied" response as meaning the server is functioning.
        if [ $ret -eq 0 ]; then
            STARTTIMEOUT=30
            while [ $STARTTIMEOUT -gt 0 ]; do
                RESPONSE=`/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping 2>&1` && break
                echo "$RESPONSE" | grep -q "Access denied for user" && break
                sleep 1
                let STARTTIMEOUT=${STARTTIMEOUT}-1
            done
            if [ $STARTTIMEOUT -eq 0 ]; then
                    echo "Timeout error occurred trying to start MySQL Daemon."
                    action $"Starting $prog: " /bin/false
                    ret=1
            else
                    action $"Starting $prog: " /bin/true
            fi
        else
            action $"Starting $prog: " /bin/false
        fi
        [ $ret -eq 0 ] && touch /var/lock/subsys/mysqld
        return $ret
}

stop(){
        MYSQLPID=`cat "$mypidfile"  2>/dev/null `
        if [ -n "$MYSQLPID" ]; then
            /bin/kill "$MYSQLPID" >/dev/null 2>&1
            ret=$?
            if [ $ret -eq 0 ]; then
                STOPTIMEOUT=60
                while [ $STOPTIMEOUT -gt 0 ]; do
                    /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
                    sleep 1
                    let STOPTIMEOUT=${STOPTIMEOUT}-1
                done
                if [ $STOPTIMEOUT -eq 0 ]; then
                    echo "Timeout error occurred trying to stop MySQL Daemon."
                    ret=1
                    action $"Stopping $prog: " /bin/false
                else
                    rm -f /var/lock/subsys/mysqld
                    rm -f "$socketfile"
                    action $"Stopping $prog: " /bin/true
                fi
            else
                action $"Stopping $prog: " /bin/false
            fi
        else
            ret=1
            action $"Stopping $prog: " /bin/false
        fi
        return $ret
}
 
restart(){
    stop
    start
}

condrestart(){
    [ -e /var/lock/subsys/mysqld ] && restart || :
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status mysqld
    ;;
  restart)
    restart
    ;;
  condrestart)
    condrestart
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|condrestart|restart}"
    exit 1
esac

exit $?

any help?

twantrd 05-02-2007 03:07 PM

Code:

/usr/bin/mysqld_safe  --defaults-file=/etc/my.cnf --pid-file="$mypidfile" --log-error="$errlogfile" >/dev/null 2>&1 &
        ret=$?

In the "start" statement, what happens when you modify the command to be this:

Code:

/usr/bin/mysqld_safe --user=mysql --defaults-file=/etc/my.cnf --pid-file="$mypidfile" --log-error="$errlogfile" >/dev/null 2>&1 &
        ret=$?

-twantrd

dfw123 05-02-2007 05:46 PM

After I change the script still the same problem,

[root@localhost init.d]# service mysqld restart
Stopping MySQL: [ OK ]
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]
[root@localhost init.d]# service mysqld start
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]

mysqld.log:

070502 08:32:12 mysqld ended

070502 08:32:13 mysqld started
070502 8:32:13 [ERROR] /usr/libexec/mysqld: unknown variable 'defaults-file=/etc/my.cnf'

070502 08:32:13 mysqld ended

070502 08:34:21 mysqld started
070502 8:34:21 [ERROR] /usr/libexec/mysqld: unknown variable 'defaults-file=/etc/my.cnf'

070502 08:34:21 mysqld ended

twantrd 05-02-2007 06:13 PM

Take out the flag "defaults-file=/etc/my.cnf" in the script. By default, startup of mysql will look for an existance of that file anyhow.

-twantrd

dfw123 05-02-2007 06:22 PM

I took off that still same problem,

[root@localhost etc]# service mysqld start
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]


log:
070502 09:09:44 mysqld ended

070502 09:09:45 mysqld started
070502 9:09:45 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
070502 09:09:45 mysqld ended

twantrd 05-03-2007 12:29 AM

Have you seen the posts on this link?

http://forums.macosxhints.com/archiv...p/t-11466.html

The user appears to have the same problem as you.

-twantrd


All times are GMT -5. The time now is 03:42 PM.