问题现象
mysql 安装完毕,本机登录正常,在远程输入正确账号密码登录连接时报错如下
问题原因
远程IP没有登录权限,root用户默认只能在localhost也就是只能在本机登录,需要设置允许其他IP登录权限。
解决方案
1. 在服务器内部登录数据库,然后执行
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
此语句意思是给root用户在任何IP都可以登录数据库,操作任何数据库中的任何对象。
其中:
*.* 第一个*是指数据库
*代表所有数据库
第二个*指数据库对象
*代表数据库中所有对象
'root'@'%' root是制定要授权的数据库用户
%代表允许登录的IP
123456是你的数据库密码
假如要限制只能在1.1.1.1登录,把%改成1.1.1.1 ,执行完毕后执行 flush privileges; 刷新权限
2. 然后在远程电脑mysql客户端就可以连接了。
如问题还未解决,请联系
售后技术支持。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您的描述已经很详细了,这里再简要概括一下解决MySQL远程连接问题的步骤,并补充一些可能遇到的其他常见问题及解决方案:
登录数据库服务器:首先,您需要通过SSH或其他方式登录到运行MySQL服务器的机器上。
修改用户权限:执行以下SQL命令来授予root用户从任意IP地址(%
)访问MySQL的权限。请根据实际情况替换123456
为您的实际密码。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
如果您希望限制访问只来自特定IP(例如1.1.1.1),则将%
替换为该IP地址。
刷新权限:执行完上述命令后,需要运行以下命令来使更改生效。
FLUSH PRIVILEGES;
检查防火墙设置:确保服务器的防火墙允许外部访问MySQL的默认端口(通常是3306)。在Linux系统中,可以通过如下命令打开端口:
sudo ufw allow 3306/tcp
或者如果是使用iptables,可以这样添加规则:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo service iptables save
重启MySQL服务:有时更改配置后需要重启MySQL服务才能使改动生效。
sudo systemctl restart mysql
MySQL配置文件:检查MySQL的配置文件(如my.cnf
)中是否绑定了特定IP地址。如果发现有bind-address = 127.0.0.1
这样的设置,应将其更改为bind-address = 0.0.0.0
以允许所有IP连接,或指定允许的IP地址。
SELinux设置:如果您使用的是启用了SELinux的系统,可能还需要调整SELinux策略以允许MySQL接受远程连接。
云服务商安全组:如果您是在阿里云等云服务商上部署的MySQL,还需要检查并配置相应的安全组规则,确保开放了3306端口给外部访问。
如果以上步骤都正确执行但问题依旧,请检查MySQL的日志文件(通常位于/var/log/mysql/error.log
),日志中可能会提供错误的具体原因,从而帮助进一步诊断问题。