前言
我的云服务器是华为云,系统版本是Ubuntu 18.04,MySQL版本是5.7。尝试了好多种方法连接MySQL都失败,翻了好多博客,又去了官方帮助文档找答案,最后终于给弄好,总结了以下解决MySQL连接失败的原因及解决方法。
正文
一、没有开启MySQL的远程登录账号
若想myuser使用mypassword从任何主机连接到mysql服务器(自己替换myuser和mypassword):
mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
若想仅允许用户myuser从ip为xx.xx.xx.xx 的主机连接到mysql服务器,并使用mypassword作为密码:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'xx.xx.xx.xx' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
最后执行 flush privileges 刷新权限。
二、配置文件限制远程访问
使用 ss -tlnp 命令查看网络接口开启状态,如图:
如果3306前面是127.0.0.1,则要修改配置文件mysql.cnf(有些系统是my.cnf):
我的mysql.cnf是这样的内容,于是又去找上面两个文件夹,最后是在/etc/mysql/mysql.conf.d/中找到mysqld.cnf,打开文件,注释这句:
bind-address = 127.0.0.1
然后重启mysql。
三、防火墙限制外部访问MySQL接口
使用 sudo iptables -L -n
查看iptables设置:
发现服务器没有开放3306端口,于是要添加防火墙例外端口:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重新加载防火墙配置:
ufw reload
有些系统是用firewall-cmd --reload这个命令。
再次使用 sudo iptables -L -n
命令应该可以看到3306了。
排除上面几点基本都能连接了。