标签:
MySQL默认的数据文档存储目录为/var/lib/mysql。假如要把MySQL目录移到/home/data下需要进行下面几步:
1、创建目录 
cd /opt && mkdir data
2、把MySQL服务进程停掉
mysqladmin -u root -p shutdown .. 或者 service mysqld stop
3、把/var/lib/mysql整个目录移到/home/data 
mv /var/lib/mysql/* /opt/data/ 
这样就把MySQL的数据文档移动到了/home/data/下 。
4、找到my.cnf配置文档
假如/etc/目录下没有my.cnf配置文档,请到/usr/share/mysql/下找到*.cnf文档,拷贝其中一个到/etc/并改名为my.cnf)中。 
命令如下: 
[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
5、编辑MySQL的配置文档/etc/my.cnf  
为确保MySQL能够正常工作,需要指明mysql.sock文档的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下: . 
vi my.cnf (用vi工具编辑my.cnf文档,找到下列数据修改之,有的版本上是有的,就不用改了) . 
# The MySQL server 
[mysqld] 
port = 3306 
#socket = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行) 
socket = /opt/data/mysql/mysql.sock (加上此行) .
6、修改MySQL启动脚本/etc/init.d/mysql    
最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成您现在的实际存放路径:home/data/mysql。 
[root@test1 etc]# vi /etc/init.d/mysql 
#datadir=/var/lib/mysql (注释此行) 。 
datadir=/opt/data/mysql (加上此行) ..
7、重新启动MySQL服务
/etc/init.d/mysql start ... 或者 service mysqld start
8、配置文件示例
[root@test1 etc]# more /etc/my.cnf 
# Example MySQL config file for medium systems. 
# 
# This is for a system with little memory (32M - 64M) where MySQL plays 
# an important part, or systems up to 128M where MySQL is used together with 
# other programs (such as a web server) 
# 
# MySQL programs look for option files in a set of 
# locations which depend on the deployment platform. 
# You can copy this option file to one of those 
# locations. For information about these locations, see: 
# http://dev.mysql.com/doc/mysql/en/option-files.html 
# 
# In this file, you can use all long options that a program supports. 
# If you want to know which options a program supports, run the program 
# with the "--help" option.
# The following options will be passed to all MySQL clients 
[client] 
#password    = your_password 
port        = 3306 
#socket        = /var/lib/mysql/mysql.sock 
socket        = /opt/data/mysql.sock
# Here follows entries for some specific programs
# The MySQL server 
[mysqld] 
port        = 3306 
#socket        = /var/lib/mysql/mysql.sock 
socket        = /opt/data/mysql.sock 
skip-external-locking 
key_buffer_size = 16M 
max_allowed_packet = 1M 
table_open_cache = 64 
sort_buffer_size = 512K 
net_buffer_length = 8K 
read_buffer_size = 256K 
read_rnd_buffer_size = 512K 
myisam_sort_buffer_size = 8M
# Don‘t listen on a TCP/IP port at all. This can be a security enhancement, 
# if all processes that need to connect to mysqld run on the same host. 
# All interaction with mysqld must be made via Unix sockets or named pipes. 
# Note that using this option without enabling named pipes on Windows 
# (via the "enable-named-pipe" option) will render mysqld useless! 
# 
#skip-networking
# Replication Master Server (default) 
# binary logging is required for replication 
log-bin=mysql-bin
# binary logging format - mixed recommended 
binlog_format=mixed
# required unique id between 1 and 2^32 - 1 
# defaults to 1 if master-host is not set 
# but will not function as a master if omitted 
server-id    = 1
# Replication Slave (comment out master section to use this) 
# 
# To configure this host as a replication slave, you can choose between 
# two methods : 
# 
# 1) Use the CHANGE MASTER TO command (fully described in our manual) - 
#    the syntax is: 
# 
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, 
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ; 
# 
#    where you replace <host>, <user>, <password> by quoted strings and 
#    <port> by the master‘s port number (3306 by default). 
# 
#    Example: 
# 
#    CHANGE MASTER TO MASTER_HOST=‘125.564.12.1‘, MASTER_PORT=3306, 
#    MASTER_USER=‘joe‘, MASTER_PASSWORD=‘secret‘; 
# 
# OR 
# 
# 2) Set the variables below. However, in case you choose this method, then 
#    start replication for the first time (even unsuccessfully, for example 
#    if you mistyped the password in master-password and the slave fails to 
#    connect), the slave will create a master.info file, and any later 
#    change in this file to the variables‘ values below will be ignored and 
#    overridden by the content of the master.info file, unless you shutdown 
#    the slave server, delete master.info and restart the slaver server. 
#    For that reason, you may want to leave the lines below untouched 
#    (commented) and instead use CHANGE MASTER TO (see above) 
# 
# required unique id between 2 and 2^32 - 1 
# (and different from the master) 
# defaults to 2 if master-host is set 
# but will not function as a slave if omitted 
#server-id       = 2 
# 
# The replication master for this slave - required 
#master-host     =   <hostname> 
# 
# The username the slave will use for authentication when connecting 
# to the master - required 
#master-user     =   <username> 
# 
# The password the slave will authenticate with when connecting to 
# the master - required 
#master-password =   <password> 
# 
# The port the master is listening on. 
# optional - defaults to 3306 
#master-port     =  <port> 
# 
# binary logging - not required for slaves, but recommended 
#log-bin=mysql-bin
# Uncomment the following if you are using InnoDB tables 
#innodb_data_home_dir = /var/lib/mysql 
#innodb_data_file_path = ibdata1:10M:autoextend 
#innodb_log_group_home_dir = /var/lib/mysql 
# You can set .._buffer_pool_size up to 50 - 80 % 
# of RAM but beware of setting memory usage too high 
#innodb_buffer_pool_size = 16M 
#innodb_additional_mem_pool_size = 2M 
# Set .._log_file_size to 25 % of buffer pool size 
#innodb_log_file_size = 5M 
#innodb_log_buffer_size = 8M 
#innodb_flush_log_at_trx_commit = 1 
#innodb_lock_wait_timeout = 50
[mysqldump] 
quick 
max_allowed_packet = 16M
[mysql] 
no-auto-rehash 
# Remove the next comment character if you are not familiar with SQL 
#safe-updates
[myisamchk] 
key_buffer_size = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M
[mysqlhotcopy] 
interactive-timeout
[root@test1 etc]# 
[root@test1 etc]# 
[root@test1 etc]# 
[root@test1 etc]# more /etc/init.d/mysqld 
#!/bin/sh 
# 
# 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
exec="/usr/bin/mysqld_safe" 
prog="mysqld"
# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld 
STARTTIMEOUT=120 
STOPTIMEOUT=60
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/$prog
# 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" 
get_mysql_option mysqld datadir "/opt/data/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(){ 
    [ -x $exec ] || exit 5 
    # check to see if it‘s already running 
    RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1` 
    if [ $? = 0 ]; then 
    # already running, do nothing 
    action $"Starting $prog: " /bin/true 
    ret=0 
    elif echo "$RESPONSE" | grep -q "Access denied for user" 
    then 
    # already running, do nothing 
    action $"Starting $prog: " /bin/true 
    ret=0 
    else 
        # prepare for start 
    touch "$errlogfile" 
    chown mysql:mysql "$errlogfile" 
    chmod 0640 "$errlogfile" 
    [ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile" 
    if [ ! -d "$datadir/mysql" ] ; then 
        # First, make sure $datadir is there with correct permissions 
        if [ ! -e "$datadir" -a ! -h "$datadir" ] 
        then 
        mkdir -p "$datadir" || exit 1 
        fi 
        chown mysql:mysql "$datadir" 
        chmod 0755 "$datadir" 
        [ -x /sbin/restorecon ] && /sbin/restorecon "$datadir" 
        # Now create the database 
        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.  (An exception is that we don‘t force the 
    # log-error setting, since this script doesn‘t really depend on that, 
    # and some users might prefer to configure logging to syslog.) 
    # Note: set --basedir to prevent probes that might trigger SELinux 
    # alarms, per bug #547485 
    $exec   --datadir="$datadir" --socket="$socketfile" \ 
        --pid-file="$mypidfile" \ 
        --basedir=/usr --user=mysql >/dev/null 2>&1 & 
    safe_pid=$! 
    # Spin for a maximum of N seconds waiting for the server to come up; 
    # exit the loop immediately if mysqld_safe process disappears. 
    # Rather than assuming we know a valid username, accept an "access 
    # denied" response as meaning the server is functioning. 
    ret=0 
    TIMEOUT="$STARTTIMEOUT" 
    while [ $TIMEOUT -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 
        if ! /bin/kill -0 $safe_pid 2>/dev/null; then 
        echo "MySQL Daemon failed to start." 
        ret=1 
        break 
        fi 
        sleep 1 
        let TIMEOUT=${TIMEOUT}-1 
    done 
    if [ $TIMEOUT -eq 0 ]; then 
        echo "Timeout error occurred trying to start MySQL Daemon." 
        ret=1 
    fi 
    if [ $ret -eq 0 ]; then 
        action $"Starting $prog: " /bin/true 
        touch $lockfile 
    else 
        action $"Starting $prog: " /bin/false 
    fi 
    fi 
    return $ret 
}
stop(){ 
    if [ ! -f "$mypidfile" ]; then 
        # not running; per LSB standards this is "ok" 
        action $"Stopping $prog: " /bin/true 
        return 0 
    fi 
    MYSQLPID=`cat "$mypidfile"` 
    if [ -n "$MYSQLPID" ]; then 
        /bin/kill "$MYSQLPID" >/dev/null 2>&1 
        ret=$? 
        if [ $ret -eq 0 ]; then 
        TIMEOUT="$STOPTIMEOUT" 
        while [ $TIMEOUT -gt 0 ]; do 
            /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break 
            sleep 1 
            let TIMEOUT=${TIMEOUT}-1 
        done 
        if [ $TIMEOUT -eq 0 ]; then 
            echo "Timeout error occurred trying to stop MySQL Daemon." 
            ret=1 
            action $"Stopping $prog: " /bin/false 
        else 
            rm -f $lockfile 
            rm -f "$socketfile" 
            action $"Stopping $prog: " /bin/true 
        fi 
        else 
        action $"Stopping $prog: " /bin/false 
        fi 
    else 
        # failed to read pidfile, probably insufficient permissions 
        action $"Stopping $prog: " /bin/false 
        ret=4 
    fi 
    return $ret 
} 
  
restart(){ 
    stop 
    start 
}
condrestart(){ 
    [ -e $lockfile ] && restart || : 
}
# See how we were called. 
case "$1" in 
  start) 
    start 
    ;; 
  stop) 
    stop 
    ;; 
  status) 
    status -p "$mypidfile" $prog 
    ;; 
  restart) 
    restart 
    ;; 
  condrestart|try-restart) 
    condrestart 
    ;; 
  reload) 
    exit 3 
    ;; 
  force-reload) 
    restart 
    ;; 
  *) 
    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" 
    exit 2 
esac
exit $?
[root@test1 etc]# 
[root@test1 etc]# chkconfig --add mysqld 
[root@test1 etc]# chkconfig --level mysqld on 
[root@test1 etc]# 
[root@test1 etc]#
标签:
原文地址:http://www.cnblogs.com/jedy/p/4422605.html