mysql 8 远程访问
Posted
技术标签:
【中文标题】mysql 8 远程访问【英文标题】:Mysql 8 remote access 【发布时间】:2018-11-07 07:07:07 【问题描述】:我通常会正确设置 mysql 以进行远程访问。
目前我被 MySQL 8 卡住了。
第一件事是,在 mysql.conf.d/mysqld.cnf 上,我没有任何 bind-address 行,所以我手动添加了它(bind-address 0.0.0.0) 我在“%”上授予用户访问权限
当我连接时,我收到消息“身份验证失败”
但它在本地主机/命令行上运行良好
【问题讨论】:
我认为您必须注释绑定地址并从root授予'%'的权限。 您可能遇到了麻烦,因为 MySQL 8 更改了默认身份验证插件,并且某些客户端需要升级。另一种方法是将 MySQL 8 实例配置为使用传统的 mysql_native_password 插件。很难确定,因为您没有提供有关如何连接(客户端、语言等)的详细信息。阅读dev.mysql.com/doc/refman/8.0/en/… 我通过 Host = '%' 授予 root 权限 我尝试从我的计算机连接 dbForge Studio(一个数据库客户端)。我还阅读了 MySQL 8 的升级更新,我没有看到任何与远程访问升级有关的内容 好的我更新到旧的autentication系统,现在我收到错误:“当前不支持此服务器版本8.0.11。”我正在检查 Dbforge 【参考方案1】:-
从
my.ini
文件中删除或注释bind_address
参数。
(文件名因操作系统而异。在 Linux 上 my.ini 是 实际上 my.cnf 位于目录 /etc/mysql/)
-
重启服务。
创建root
用户(是的,一个新用户,因为存在的是'root@localhost',它只能在本地访问):
CREATE USER 'root'@'%' IDENTIFIED BY '123';
授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
对于DBA用户,在末尾添加
WITH GRANT OPTION
。例如
CREATE USER 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
因为它不起作用CREATE with GRANT?
MySQL 8 无法再用GRANT
创建用户,所以如果你尝试用GRANT
来使用IDENTIFIED BY '123'
会出现错误,这是最常见的错误。
【讨论】:
这很好用,感谢您分享您的回复。 感谢它的工作。但文件名因操作系统而异。在 Linux 上my.ini
实际上是 my.cnf
位于目录 /etc/mysql/
中。
无法加载身份验证插件'caching_sha2_password':找不到指定的模块。 ***.com/questions/50169576/…
我认为答案有误。 WITH GRANT OPTION
子句不适用于CREATE USER
语句,但适用于GRANT
语句
如果您看到任何错误,例如ERROR 1396
,那么只需将root
更改为任何其他remoteuser
,它将完美运行!【参考方案2】:
MySQL 8 中的远程访问:
1) 允许从任何主机访问
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
2) 允许用户从任何地方访问:
mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
UPDATE mysql.user SET host='%' WHERE user='root';
3) 将身份验证更改为密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'ThePassword';
【讨论】:
除非您不想对root
帐户执行此操作,否则它只会打开另一个攻击向量。创建一个只能访问所需内容的新帐户,而不是使用超级用户
@DivinesLight 为什么我的回答不正确?
你可能需要一个 'root'@'%' 开头。【参考方案3】:
遇到同样的问题,连接到 MySQL Workbench 并更新了用户权限。
MySQL 版本:8.0.20 社区。 操作系统:Windows 10。
-
打开 MySQL Workbench --> 服务器 --> 用户和权限
选择用户
将匹配主机的限制更改为“%”,以便从任何主机进行访问。
应用更改。
如果需要,重新启动 MySQL 服务。它对我有用,无需重新启动。
屏幕截图,
【讨论】:
这是 MySQL 8 的完美和最佳解决方案。忘记有关 bind_address 或 bind-address 的所有内容并应用此技巧。 这项工作在 2 分钟内完成。我在 8 中寻找 mysql.ini,但后来发现了这个。【参考方案4】:对于 MySQL 8,打开 mysqld.cnf 文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
并修改或添加bind-address选项:
[mysqld]
bind-address = 0.0.0.0
重启mysql服务器
sudo service mysql restart
【讨论】:
在手册 8.0 中,将 bind-address 更改为 bind_address link 忘记在 cnf 文件中添加任何其他内容,不要添加“bind-address”或“bind_address”。正确的解决方案是授予 root 用户(或其他用户)远程访问权限,因为 root 仅具有 localhost 访问权限: sudo mysql -u root -p # CREATE USER 'root'@'%' IDENTIFIED BY '1234567890'; # 将 . 上的所有权限授予 'root'@'%'; sudo systemctl restart mysql 将所有权限授予 . 到 'root'@'%';以上是关于mysql 8 远程访问的主要内容,如果未能解决你的问题,请参考以下文章
20190526 - CentOS 7 中 安装 MySQL 8 并授权 root 远程访问