一次较郁闷的排查:外部连接宝塔内mysql
场景:A机器安装了宝塔面板,B机器要连接到A机器的mysql。
由于之前的mysql连接设置为本地且防火墙等都屏掉了3306端口,这次要连接宝塔内部的mysql,这些设置都要去掉,按照网上教程,先将mysql的bind-address值改为0.0.0.0,然后重启mysql;再将3306端口放行,即可;同时,增加一个mysql内部用户,用于访问某数据库。这些工作全部做好了,但外部工具或php程序都无法连接宝塔内的mysql,真是郁闷至极。
于是,有了以下拼命折腾的命令:
firewall-cmd --state
systemctl stop firewalld.service
systemctl start firewalld.service
1、启动宝塔面板服务:(启动后,就可以访问宝塔管理面板) /etc/init.d/bt start
2、停止宝塔面板服务: /etc/init.d/bt stop
3、重启宝塔面板服务: /etc/init.d/bt restart
#设置IP访问限制
GRANT ALL PRIVILEGES ON chinese.* TO 这里写用户名@'ip地址' IDENTIFIED BY '这里写密码' WITH GRANT OPTION;
#修改之后记得刷新权限
flush privileges;
update mysql.user set password=password('aliyun') where user='fuckaliyun' and host='%';
---创建远程连接的数据库用户,这里远程连接IP可使用ipconfig查看IPV4的地址
create user 'fuckaliyun'@'%' identified by 'aliyun';
grant all PRIVILEGES on chinese.* to 'fuckaliyun'@'%';
#修改之后记得刷新权限
无论我如何操作,都无济于事,工具都返回16601或者16600错误,php程序也是返回connection refuse之类的。让我这个10年的老程序员束手无策。
理了一下思路,防火墙关掉,mysql在宝塔面板中也重启了,为啥就是不生效呢。奇怪。于是决定手工重启mysql进程,此时发现有mysqld_safe进程,觉得奇怪,以前编译mysql没有这个的,为啥多了这个呢。
不管了,重启mysql先,由于当时安装mysql是用宝塔安装的,需要找下手工重启的命令。用网上的命令service restart mysql,报错;又用/etc/init.d/mysqld restart,又报错了;又用systemctl restart mysqld.service,没反应,于是 systemctl list-unit-files | grep mysql,没任何数据,难道mysql没有做成服务?
于是查看mysql的服务:systemctl status mysqld.service,这一下可好了,发现有几行红色字体,意思大概是有错误发生。此时,蒙生了一个想法:会不会是宝塔“重启mysql”功能有问题,导致mysql没有真正重启?于是,ps aux|grep mysql 找出pid后,在宝塔面板中重启mysql,如果mysql重启成功,那么,再次执行ps aux | grep mysql会出现新的pid。
结果就是:真的还是原来的pid,唉,白忙活了一天。管它三七二十一,重启操作系统:reboot。重启系统后,外部工具立马可以连接mysql了。
唉,为了一个不是问题的问题,浪费了我这么多时间。重启大法真的不错,传搞疑难杂证,win下好用,没想到今天2022-10-11也在centos7上用了一次。呵呵,已经22:40了,睡觉去。
PS:重启系统后,写本篇文章时,发现/etc/init.d/mysql restart又能正常使用了,不解。
这里有一篇文章相对整洁一些:https://www.cnblogs.com/valley-yyds/p/15625091.html
- 没有相关文章
- 没有评论