一次花费了一两个小时的mysql问题排查
2017-07-31 18:01
190 查看
晚上把博客迁了个服务器,新建用户的时候遇到问题了。
关于mysql的问题。
建好之后,命令行下面连接mysql服务,都能正常登录,并且也都能连上各自的数据库。
但是blog用户能在终端登录,代码不能连接数据库。
那就只能看看调试信息了。
异常中说
有人提到是socket文件不对。看了下php.ini,配置文件中的选项是空的,注释掉的。
但还是不想这么简单的解决问题,就继续往下查了。
执行
连接mysql,执行
看了下php的配置
这里可以看到mysql的socket设置和php是的socket是不对应的。
这里用了一个比较二的方法。直接在/tmp建立了一个软连接到实际的sock,能运行了。
猜测:typecho用的是pdo,会需要这个socket,laravel没用这个。
在调试期间也用phpstorm自带的数据库连接器连接也失败,如果是这种猜测的话为什么phpstorm也失败,莫非phpstorm用的连接内核也是PDO?
2.为什么他们把localhost改成127.0.0.1就行?
这个问题就太专业了,不知道了。
排查问题的时候还是别搞幺蛾子了,一点点慢慢排查。
我有时候有点受虐倾向,就是喜欢走弯路去排查问题。
从头至尾总共能花了两个多小时吧。。
现在时间2017-07-30 03:45
博客:http://blog.icp0.com/
关于mysql的问题。
前置操作
建了两个用户,一个laravel,一个blog用户以及他们的同名数据库。建好之后,命令行下面连接mysql服务,都能正常登录,并且也都能连上各自的数据库。
问题体现
之前laravel用的root账号,这次建好laravel用户之后,改了laravel的配置文件,laravel的服务一切正常但是blog用户能在终端登录,代码不能连接数据库。
1.开始以为是用户权限没设置好
1.1 重新设置权限给blog用户,还是不行。
1.2 根据mysql官方文档删除用户之后,重建blog用户。 竟然还是不行!
1.3 刚好在迁移博客的时候从GitHub拉了typecho的新代码,这个时候以为是typecho升级造成的问题,那么就别升级了,直接用新代码新安装。竟然还是不行!!
** 期间经历了重启php-fpm,重启mysql等各种乱七八糟的操作之后还是没解决。**那就只能看看调试信息了。
2.调试
typecho只提示连接数据库失败,上服务器改了下install.php文件,把具体的异常打印出来。异常中说
SQLSTATE[HY000] [2002] No such file or directory,好,那就搜一下。
3.搜索
好多人都说连接数据库的时候把localhost改成127.0.0.1就可以解决。但如果就这么解决了多没意思有人提到是socket文件不对。看了下php.ini,配置文件中的选项是空的,注释掉的。
解决
解决A
这里其实应该有解决办法了,就是去改php.ini,设置默认的socket。但还是不想这么简单的解决问题,就继续往下查了。
解决B
(这里还走了一个弯路,以为是socket文件不对,删掉sock文件,重启mysql,发现还是不行。)执行
ps aux | grep mysql,看到
mysql 11964 02:48 0:01 /usr/sbin/mysqld --basedir=... --socket=/var/lib/mysql/mysql.sock
连接mysql,执行
mysql> show variables like '%sock%',结果:
+-----------------------------------------+---------------------------+ | Variable_name | Value | +-----------------------------------------+---------------------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | -1 | | socket | /var/lib/mysql/mysql.sock | +-----------------------------------------+---------------------------+
看了下php的配置
php -i | grep socket
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
这里可以看到mysql的socket设置和php是的socket是不对应的。
这里用了一个比较二的方法。直接在/tmp建立了一个软连接到实际的sock,能运行了。
后期的猜测与疑问
1.为什么laravel能正常跑而typecho不行呢?猜测:typecho用的是pdo,会需要这个socket,laravel没用这个。
在调试期间也用phpstorm自带的数据库连接器连接也失败,如果是这种猜测的话为什么phpstorm也失败,莫非phpstorm用的连接内核也是PDO?
2.为什么他们把localhost改成127.0.0.1就行?
这个问题就太专业了,不知道了。
巴拉巴拉
中途还惨杂着切换typecho各种试,typecho新老版本还切换了不同的数据驱动文件。排查问题的时候还是别搞幺蛾子了,一点点慢慢排查。
我有时候有点受虐倾向,就是喜欢走弯路去排查问题。
从头至尾总共能花了两个多小时吧。。
现在时间2017-07-30 03:45
博客:http://blog.icp0.com/
相关文章推荐
- 记一次mysql中文字符乱码的问题排查
- 记一次mysql线上问题排查
- 记一次kafka数据丢失问题的排查
- 记一次tomcat进程cpu占用过高的问题排查记录
- 由一次mycat+mysql水平拆分集群问题引发的思考
- 记一次Full GC问题的排查
- 一次MySQL死锁问题解决
- 一次 Oracle 算出运算溢出问题 排查解决 (并非除数为零!)
- 记录一次cpu 100%线上问题排查
- 记一次死锁问题的排查
- 记一次APP和DB间流量异常问题的排查
- 记一次MongoDB性能问题(从MySQL迁移到MongoDB)
- 记一次MySQL中Waiting for table metadata lock问题的处理
- [ Nginx ] 记录关于 $_GET 获取参数有误的一次问题排查
- 一次线上问题排查所引发的思考
- mysql半同步复制问题排查
- Mysql队列数据库cpu wait IO高的问题排查经历
- 记一次kafka数据丢失问题的排查
- 记一次 Redis 连接池泄漏问题排查