my.cnf 值不适用 - 在 CentOS LAMP 中优化 MySQL

Sir*_*jik 5 mysql optimization configuration

我检查了 my.cnf 的其他出现,但我只发现了 /etc/my.cnf 出现了一次。

然后,我继续修复我的值,例如 query_cache_size 等。

保存并重新启动后,未应用 my.cnf 中的值。我正在使用 CentOS 5.6、Apache 2 上的 LAMP、MySQL 5.0.77

有什么帮助吗?

我也跑了

[root@veepiz ~]# ps aux | grep mysql
root     16202  0.0  0.1  61220   704 pts/0    D+   03:17   0:00 grep mysql
root     32054  0.0  0.1  63888   536 ?        S    Jul24   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
mysql    32096  6.0  1.6 250592  8352 ?        Sl   Jul24  19:14 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

这是/etc/init.d/mysqld的内容

#!/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 config files
# Usage: get_mysql_option SECTION VARNAME DEFAULT
# result is returned in $result
# We use my_print_defaults which prints all options from multiple files,
# with the more specific ones later; hence take the last match.
get_mysql_option(){
    result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1`
    if [ -z "$result" ]; then
        # not found, use default
        result="$3"
    fi
}

get_mysql_option mysqld datadir "/var/lib/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"
socketfile="$result"
get_mysql_option mysqld_safe log-error "/var/log/mysqld.log"
errlogfile="$result"
get_mysql_option mysqld_safe 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 --datadir="$datadir" --user=mysql
        ret=$?
        chown -R mysql:mysql "$datadir"
        if [ $ret -ne 0 ] ; then
        return $ret
        fi
    fi
    chown mysql:mysql "$datadir"
    chmod 0755 "$datadir"
    # Pass all the options determined above, to ensure consistent behavior.
    # In many cases mysqld_safe would arrive at the same conclusions anyway
    # but we need to be sure.
    /usr/bin/mysqld_safe   --datadir="$datadir" --socket="$socketfile" \
        --log-error="$errlogfile" --pid-file="$mypidfile" \
        --user=mysql >/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 --socket="$socketfile" --user=UNKNOWN_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 $?
Run Code Online (Sandbox Code Playgroud)

ran*_*omx 2

您可以使用 --defaults-file 标志强制向 mysqld 提供您想要的任何 my.cnf 内容。

例如,在 Red Hat-ish 系统上:

/usr/bin/mysqld_safe --defaults-file=/etc/my_alt.cnf &
Run Code Online (Sandbox Code Playgroud)