今天做一个简单的监控MySQL启动的一个shell出现了
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
出现过程如下:
新建shell脚本文件vi db.sh 如下
#!/bin/sh
port=$(netstat -lnt|grep 3306|wc -l) #通过端口号查看MySQL数据库3306是否启动:wc -l 来统计行数 如果能已经启动 则返回1 否则0
if [ $port -eq 1 ]
then
echo "db is running"
else
mysql -uroot -p123456
if [ $? -eq 0 ]
then
echo "db starting";
fi
fi
第一次执行,会出现 db is running
当使用脚本 killall mysqld 杀掉MySQL进程时然后再次运行 sh db.sh 出现如下问题
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
有的说是权限的问题:chown -R mysql:mysql /tmp
执行之后对我来说没什么卵用,错误依然出现,
最后进入到tmp下面发现 mysql.sock 没了,于是乎 我重启了虚拟机
启动之后:进入tmp 中,发现mysql.sock 这个东西已在心稍安:执行 sh db.sh 输出 db is running
然后又用命令:killall mysqld 杀掉MySQL进程,再次执行sh db.sh 发现错误重现,额的小心脏啊
总结:执行 killall mysqld 时会清掉tmp中的mysql.sock 再次启动所以还会报错
思路:不要把它放到tmp文件中 移动到别的文件中,但是怎么去指定这个文件中 于是乎又进入百度
百度这个神奇的东西也没让人失望找到解决方案:修改/etc/my.conf:
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/usr/local/mysql
[client]
socket=/usr/local/mysql/mysql.sock
执行mysql -uroot -p123456 错误还再:
重新启动服务器:/etc/init.d/mysql start
Starting MySQL. SUCCESS!
over 告一段落:重复上面动作 执行killall mysqld 杀掉mysql进程 再次执行sh db.sh 发现还是有错
修改db.sh 脚本:
if [ $port -eq 1 ]
then
echo "db is running"
else
/etc/init.d/mysql start
if [ $? -eq 0 ]
then
echo "db starting";
fi
fi
再次执行输出:db starting 成功了
再辞职感谢百度提供那么好的平台还有那些乐于分享的人给的提示