关于这个问题,网上说的内容很多,基本上可以解决问题,我现在分析的是为什么要这么操作,哪些操作是重复的!
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"
上面一段代码是从mysqld这个脚本中截取出来的,我把他分成两部分
1.函数,这个函数接收3个参数,主要功能是读取1中的配置,匹配2的值,如果存在,那么设置result为匹配的值,如果不存在就是用默认$3的值
2.调用了4次函数,定义了4个变量,我主要讲一下第一个datadir,从my.cnf中读取–datadir设置的值,如果存在那么datadir就是my.cnf中的值,如果不存在,那么就是默认的/var/lib/mysql
相信大家应该能看明白吧,修改默认数据库的位置,2选1,要么是my.cnf中配置,要么就是my.cnf中留空,修改mysqld中的默认值
socketfile这个也是同理,不过他的位置默认是在数据库文件的目录下面,所以my.cnf中不设置,那么就是默认,如果设置了,就是你自定义的位置
再来说下mysql这个命令,大家应该都知道是干什么,如果你修改了数据库的默认位置,那么sock这个文件默认也会改位置。
执行这个命令应该会报错,如何让他不报错,两种方法
1.在my.cnf [client] 下面增加socket=”/xxx/xxx/mysql.sock” mysql.sock的真实位置
2.ln -s “/xxx/xxx/xxx/mysql.sock” “/var/lib/mysql/mysql.sock” 在原始的mysql.sock位置做一个软链,指向真实的位置
其实就是mysql命令运行时需要mysql.sock,但是默认值是在 /var/lib/mysql/mysql.sock,如果你改了位置,那么一定要让这个命令能找到这个文件的真实位置。
像这种服务配置什么的,主要是了解它是怎么运行的,才能对症下药,找到好的修改或者解决问题的办法。