记一次 mysql 2002 error

连接mysql 遇到2002的错误,就是未连接的意思,问题是处在数据库上面了,可以通过mysql -u的命令行的方式连接数据库,也就是说,mysql本身是没有问题的,而问题是出在mysqld上面了,mysql的连接客户端。

直接/etc/init.d/mysqld restart 报错说是/tmp/mysql.sock已经存在了,不行,删除/tmp/mysql.sock ,运行/etc/init.d/mysqld 也不行,一直卡死在了start上面,touch mysql.sock 也不行,有人说是mysql.sock默认应该放在/var/lib/mysql/mysql.sock ,放在mysql.sock中会找不到,于是修改my.cnf将socket修改成为/var/lib/mysql/mysql.sock 依旧是不行

通过查看/etc/init.d/mysqld status 得到的结果是  mysqld dead but subsys locked  ,也就是说,mysqld 挂掉了,但是因为subsys已经锁上了,所以肯定无法重启,so      rm /var/lock/subsys/mysqld   然后kill掉ps中的mysql进程 运行/etc/init.d/mysqld restart 不可以,kill掉ps中的mysq进程,运行/etc/init.d/mysql restart 然后发现就可以了

总的来说,这次的故障原因恐怕是mysqld因为意外退出运行了,因为mysql和mysqld是分别独立的,所以mysql还是在运行,只是说,因为没有了mysqld这个程序和mysql的中间层,所以报错说是no connect ,而mysql和mysqld的关系应该是mysql首先启动运行初始化环境,然后是mysql创建mysql.sock 然后mysqld启动,双方通过socket套字节通信,所以如果单独启动mysqld就会遇到mysql.sock已经存在的报错,kill掉 mysql的进程,让mysql也挂掉,然后重启mysql ,就是一切从头开始的意思,让mysql重新开始初始化欢迎,让他启动mysqld,创建他们约定的.sock文件,这样就可以又愉快的开始工作了。

想解决问题,还是要理解他们的运行过程和机制啊。

Leave a comment

Your email address will not be published.

*