昨天我在阿里云买了一台微型服务器,重装了系统,装上docker,mysql,redis,正准备开发项目,结果云服务器docker里面的mysql一直连接不上,一直显示 ERROR 2003 (HY000): Can’t connect to MySQL server on ‘xxxxxx:3306’ (10060) ,这问题困扰了我小半天,特写下该文章。以下是几种解决方案:
一:防火墙问题
# 使用该命令该防火墙是否打开
systemctl status firewalld
# 如果打开使用以下命令
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁用防火墙
systemctl is-disabled firewalld # 查看防火墙是否被禁用
二:mysql访问权限问题
1、修改配置文件
不同系统下的配置文件路径
Linux: /etc/my.cnf
Windows: C:\ProgramData\MySQL\MySQL Server X.Y\my.ini
# 打开配置文件,如果有以下代码需要进行修改
bind-adress=127.0.0.1 # 只允许本机访问
# 改为
bind-adress=0.0.0.0 # 允许任何地址访问
2、修改数据库
1)访问权限
use mysql; # 进入系统库
selecct user,host form user; # 查看用户访问权限
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
# 如果访问的用户host不为%,需要设置为%,代表任意地址可连接
update user set host = % where user = root;
2)操作权限
-- 授权用户操作数据库的权限 password 填自己的密码
GRANT ALL PRIVILEGES ON '.' TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
-- 刷新权限,使授权生效
FLUSH PRIVILEGES;
3)url路径
如果使用的是mysql8.0以上版本,通过图形化界面进行连接,可以在url后面拼接上以下参数
url: jdbc:mysql://host:port/db?characterEncoding=utf-8&userSSL=false&allowPublicKeyRetrieval=true
4) 查看错误日志
MySQL错误日志:查看MySQL错误日志以获取更多信息。错误日志通常位于 /var/log/mysql/error.log 或 /var/log/mysqld.log。检查日志文件是否包含与连接问题相关的错误消息。
三:云服务安全组
如果服务器是云服务,需要看看云服务安全组是否开放该端口
四:查看网路状态
# 查看服务器是否可以连接,如果ping不通则是服务器网路有问题
ping host
# 看服务器端口是否可以访问,如果不能访问需要检查路由
telnet host port
# 确认服务器是否已经处于路由转发状态:
sudo sysctl net.ipv4.ip_forward
# 如果不为1,可以通过以下命令来临时开启路由转发功能:
sudo sysctl -w net.ipv4.ip_forward=1
# 这个命令会将net.ipv4.ip_forward参数的值设置为1,从而临时开启路由转发功能。系统重启后会失效。
# 如果希望永久开启路由转发功能,可以编辑sysctl.conf配置文件。可以通过以下命令打开sysctl.conf文件:
sudo vi /etc/sysctl.conf
# 在文件中找到类似于`net.ipv4.ip_forward = 0`的行,并将其修改为`net.ipv4.ip_forward = 1`。保存文件并关闭编辑器。
# 应用新的配置:运行以下命令使新的配置生效:
sudo sysctl -p
# 这个命令会读取sysctl.conf文件中的配置,并应用到系统中。
五:检查linux版本
如果实在不行,可以检查下linux版本,我当时使用的是centos7.0,使用docker开启myslq后无法进行远程连接,升级到7.9后就可以了。