- root 用户一般只允许本地链接,即 root’@’localhost’
- 创建允许远程连接(这里允许所有IP访问,可具体指定)的用户 CREATE USER ‘op_user’@’%’ IDENTIFIED BY ‘‘
- 授权(这里给所有,可以指定到Read,Write)GRANT ALL PRIVILEGES ON op_db.* TO ‘op_user’@’%’;
- 刷新权限:FLUSH PRIVILEGES;
- 防火墙,允许3306端口
- 还是连不上… 检查mysql 是否只开启了本地监听
- 修改mysql 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address = 0.0.0.0 # 允许所有 IP 连接(云环境常用)
# 或 bind-address = <云服务器公网IP> # 仅允许通过公网IP连接
# mysqlx-bind-address 不需要改,这个是为 X Protocal(33060)定义的
8. 重启MySQL
sudo systemctl restart mysql
9. 查看是否生效
# 查看端口监听情况(需安装 net-tools)
netstat -tulpn | grep 3306
预期输出:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld
(若显示 127.0.0.1:3306,说明修改未生效,需检查配置文件)
10. 开始测试
出现了 出现 Public Key Retrieval is not allowed
错误
这通常与 MySQL 8.0+ 的加密认证方式有关。MySQL 8.0 默认使用 caching_sha2_password
插件,需要通过公钥进行密码验证,而某些客户端(如 JDBC、Navicat)默认禁用了自动获取公钥的功能
找到驱动属性,如下使用DBeaver为例, 修改为True,测试成功

如果是代码,需要在connect string上增加下面的属性,
allowPublicKeyRetrieval=true&useSSL=true&requireSSL=true
以nodejs 为例

好了,收工~
发表回复