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 远程访问

mysql 8创建远程访问用户以及连接mysql速度慢的解决方法

安装mysql 8.0.17并配置远程访问

MariaDB(mysql)远程访问设置

如何开启MySQL远程访问权限 允许远程连接

如何设置mysql远程访问及防火墙设置