被逼无奈学了几个mysql命令,竟然有大用。

点击上方关注 前端技术江湖,一起学习,天天进步

这是一个欲哭无泪得故事,故事从开始到结束花了我整整2个小时。

现在开始进入这个小故事,请备好垃圾桶。

下面这张图,就是我的网站前两天的状态。

3788833bcbfd7bc416dd53d984f7b898.png

image.png

这个是我的前端刷题网站,后台数据是mysql,前天深夜我玩着玩着突然给玩坏了,数据链接失败,navicat也不好使了。

所以就有了上面那副图,你也绝对想不到我是怎样解决这个问题的。

这个刷题网站,虽然没啥流量,但也每天稳定200uv,这一下子打不开了,可把我急坏了,没事儿真不能瞎折腾。

418c8f39c27241f3ed1ef7285f7fd01a.png

image.png

先看日志

服务器在自己手里,肯定第一反应就是上服务器看下日志。

b4cdbbd83cd175cb204455cd3ff7e187.png

image.png

从错误上来看是数据库查询没返回数据,导致ssr服务端渲染异常,猜测是数据库链接问题。

难道mysql服务停止了?

登录mysql

使用命令行登录msyql,来看下数据库是否正常.

mysql -u root -p

结果能正常登录。

a234c4ef40582649ebad75f4c2cae238.png

image.png

难道数据库丢了?

命令行扫下数据库。

show dagabases;

数据库还在!

8d62d999e5073f312720351c70e04694.png

image.png

再看下表的数据是否正常。

use db; //切到具体数据库
show tables; //查看所有的表
select * from news limit 0,10; //查看数据前10条数据

结果都正常。

dd7f7ce3bb56e73a6f10732c6954fb2e.png

image.png

看进程

验证下mysql进程和端口是否正常!没办法的办法。

ps -ef|grep mysqld //查看mysql进程

进程好像也没啥问题!没太仔细研究。

f920609e02b69e3758a66a36973f1f30.png

image.png

再看下mysql监听的ip和端口是否正常。

netstat -anpt

监听地址如果是:::3306或者是0.0.0.0:3306,表示监听所有IP地址,这监听状态是正常。若出现127.0.0.0:3306,说明监听的本地地址,需要在mysql配置文件中将bind-address选项设置为bind-address = 0.0.0.0,重启mysql。

最后的结果让我失望了,一切正常。

6a51f6166a911b10c5c3eef458c38471.png

image.png

本地调试

以上步骤后,可以确定数据库和数据都没问题。

所以最快的方法就是本地调试,看抛出的异常信息。

果然是数据库链接失败!

cebcfb3c303895d610b98ce08c766a6a.png

image.png

其实不是链接失败,而是被拒绝。

Error: connect ECONNREFUSED

什么情况下才会出现被拒绝呢?被拒绝是什么个操作呢?

然后开始了漫长的百度和谷歌。

b17a89e7a79c2010cee7ad1ac1e8bd3c.png

image.png

看了几篇文章后,归纳起来大概有以下几种可能。

  1. mysql 通信端口变更了

  2. 服务器有安全限制,需要打开对外的访问

  3. root账号权限不足

确认mysql端口和账号权限

上面第2种情况,直接排除,阿里云早就开了。

确认mysql通信端口是不是3306!

//查看mysql端口号 
show global variables like 'port';

端口也确实没问题!!

b9156f7d503ab06cb2261ba904ee1d71.png

image.png

查看root账号权限,其实很早之前就配过,还是要确认下。

使用以下命令查看!

use mysql; //切换数据库
select host,user from user;

账号权限也ok,上面host为%就可,表示任何客户端都可以链接。不过,突然意识到这样设置有点风险。

c46121f3f52099c68254e28da667950f.png

image.png

竟然到了黔驴技穷的地步(其实是经常性的),当然还有一个万能的办法,重启服务器。。。。

重启msyql!

service mysqld stop //停止mysql
service mysqld start //启动
service mysqld restart //重启

问题依然存在!

抓包

感觉所有招式都用了,依然没有头绪。

最后只能抓包了。

在服务上输入抓包命令:

tcpdump port 3306

开始监听:

452f743f081fa918db1918570833af4e.png

image.png

发起数据库链接:

3bc6b47966a3bfc69f01e784c2167b8a.png

image.png

好家伙,确实存在异常, tcp 第一次握手就失败了。

正常是这样的,有来有往。

879c412114447c431985aa644f90dbe5.png

image.png

我到底干了什么?

经过上面的种种操作,可以确定数据库没问题,数据库进程没问题,问题在于服务器的配置出问题了。

也就是端口访问被拦截。

思考了片刻,灵光乍现,前几天是不是玩了下宝塔,这货是不是有安全限制?

果然!

79acb5b6683c69fc1cd4ac6c925956db.png

image.png

最后我深深的给自己鞠了一躬!我服你!

f3a8e3bc3bdecbff6c8ede3ba072744c.png

最后

最后为了说服自己,与自己和解,原谅我这波操作,虽然浪费了时间,但我真的学到了知识。

所以把用到的命令整理给大家,希望以后你不会用到!

1. mysql -u root -p  // 登录mysql, 输入后直接回车才能输入密码
2. show dagabases; //查看有几个数据
3. use db; //切到具体数据库
show tables; //查看所有的表
select * from news limit 0,10; //忽略吧,大家都知道
4. ps -ef|grep mysqld //查看mysql进程
5. netstat -anpt //查看mysql 监听的端口和ip是否正常
6. show global variables like 'port'; //查看mysql端口号 ,需要先登录msyql
use mysql; //切换数据库,先登录mysql 
7. select host,user from user; // 查看root账号权限,先登录mysql
8. service mysqld stop //停止mysql
service mysqld start //启动
service mysqld restart //重启
9. tcpdump port 3306 //端口抓包,好用的很

参考资料:

https://jingyan.baidu.com/article/380abd0a3aef431d90192c33.html https://www.cnblogs.com/pyng/p/9699068.html

The End

欢迎自荐投稿到《前端技术江湖》,如果你觉得这篇内容对你挺有启发,记得点个 「在看」

点个『在看』支持下 9d7ea94ad4feaea7e69e4d80dd54a7d3.gif

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>