我都干了些什么?????
装的第一个mysqld服务是mysql-5.5,整个安装过程也就是从开源镜像网站下载下来的二进制安装包安装的—整个安装过程:mysql服务安装
mysql-5.5安装好后,在本机上又用自带rpm包安装mysql-server5.1,mysql-5.1
安装好后启动
service mysqld start
直接报错 MySQL Daemon failed to start
编辑mysqld文件
vim /etc/rc.d/init.d/mysqld
在文件中全局搜索“MySQL Daemon failed to start”
/MySQL Daemon failed to start
错误就是这个错误语句
if ! /bin/kill -0 $safe_pid 2>/dev/null; then
echo "MySQL Daemon failed to start."
ret=1
break
fi
#kill -0 pid > /dev/null #进程号pid存在返回0(为真),不存在返回1(为假)
#可用此脚本做测试
#!/bin/sh
kill -0 PID_NUMBER 2>/dev/null
RET=$?
echo $RET
也就是说$safe_pid不存在,再全局搜索safe_pid
发现
$!
代表 运行于后台的最后一个作业的PID
猜测产生这个pid的来源就是这个指令
$exec --datadir="$datadir" --socket="$socketfile" \
--pid-file="$mypidfile" \
--basedir=/usr --user=mysql >/dev/null 2>&1 &
于是在此段脚本上方测试查看exec,datadir,socketfile,mypidfile等变量内容
运行mysql服务脚本
service mysqld start
测试内容分别输出为
exec test exec : /usr/bin/mysqld_safe
exec test mydatafile : /date/mydate
exec test socketfile : /tmp/mysql.sock
exec test mypidfile : /var/run/mysqld/mysqld.pid
此时动态观察错误日志文件
tail -f /date/mydate/www.xiaoc.com.err
于是在控制台输出
/usr/bin/mysqld_safe --datadir=/date/mydate --socket=/tmp/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --vasedir=/usr --user=mysql
看到日志文件输出:Version: '5.1.73-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution
3306端口被正常监听了,我猜测服务已经启动
于是查看mysqld状态
service mysql status
mysqld服务果然正在running….
然后关闭服务,再此开启服务,都没有问题……
全程懵逼………
你们有遇到过这样的情况吗???
经过打磨,问题变得明朗了起来。
原来是之前用二进制包安装mysql服务的时候,将一个扩展配置文件support_files/my-large.cnf
复制到了/etc/my.cnf
,参考二进制安装mysql原文:mysql服务安装
当用rpm包再次安装mysql服务的时候,mysqld的服务脚本会先去读取/etc/路经下是否已经有对mysql服务的扩展配置,如my.cnf,如有则先读取配置文件中属性值。
#这个函数就是读取本机上已存在的my.cnf配置文件,若为空,则就赋予datadir、socket值为后面的默认值
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"
所以,整个问题的关键是/etc/my.cnf
,将此文件删除。
重新安装mysqld服务
yum -y reinstall mysql-server
运行
service mysqld start
马上对mysqld进行数据库初始化,成功开启服务。