【问题标题】:MySQL: How to allow remote connection to mysqlMySQL:如何允许远程连接到 mysql
【发布时间】:2013-01-24 14:30:38
【问题描述】:

我在本地机器上安装了 MySQL Community Edition 5.5,我想允许远程连接,以便我可以从外部源进行连接。

我该怎么做?

【问题讨论】:

  • 如果你碰巧使用DigitalOcean,你可以尝试使用sudo mysql_secure_installation。仅供参考。
  • 不要对非代码文本使用代码格式。离题。
  • @EJP 为什么?出于好奇的诚实问题

标签: mysql mysql-workbench


【解决方案1】:

在使用 MySQL 服务器作为数据库的 Java 项目 工作时,我不得不面对这个挑战。

我是这样做的

首先,确认您的 MySQL 服务器配置允许远程连接。使用您喜欢的文本编辑器打开 MySQL 服务器配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

向下滚动到 bind-address 行并确保将其注释掉或替换为0.0.0.0(以允许所有远程连接)或替换为Ip-Addresses 您希望从中进行远程连接。

进行必要的更改后,保存并退出配置文件。通过重新启动 MySQL 服务来应用对 MySQL 配置文件所做的更改:

sudo systemctl restart mysql

接下来,在安装它的服务器上登录 MySQL 服务器控制台:

mysql -u root -p

输入你的mysql用户密码

检查您想要的用户已经有权访问的主机。在我的情况下,用户是root

SELECT host FROM mysql.user WHERE user = "root";

这给了我这个输出:

+-----------+
| host      |
+-----------+
| localhost |
+-----------+

接下来,我运行下面的命令来授予root 用户对名为my_database 的数据库的远程访问权限:

USE my_database;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';

注意% 授予用户从网络上所有主机的远程访问权限。您可以使用以下命令指定要授予用户访问权限的各个主机的 IP 地址 - GRANT ALL PRIVILEGES ON *.* TO 'root'@'Ip-Address' IDENTIFIED BY 'my-password';

之后,我检查了用户现在可以访问的 主机。在我的情况下,用户是root

SELECT host FROM mysql.user WHERE user = "root";

这给了我这个输出:

+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+

最后,您可以尝试使用以下命令从另一台服务器连接到 MySQL 服务器:

mysql -u username -h mysql-server-ip-address -p

其中u代表用户h代表mysql-server-ip-addressp 代表密码。所以在我的情况下是:

mysql -u root -h 34.69.261.158 -p

输入你的mysql用户密码

您应该根据您的 MySQL 服务器版本获得此输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

资源How to Allow Remote Connections to MySQL

就是这样。

我希望这会有所帮助

【讨论】:

    【解决方案2】:

    远程登录的所有过程。远程登录默认是关闭的。你需要为所有的ip手动打开它..才能访问所有的ip

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
    

    特定IP

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';
    

    然后

    flush privileges;
    

    您可以检查您的用户主机和密码

    SELECT host,user,authentication_string FROM mysql.user;
    

    现在你的职责是改变这一点

    bind-address = 127.0.0.1
    

    你可以在

    上找到
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
    

    如果你在那里没有找到这个,那么试试这个

    sudo nano /etc/mysql/my.cnf
    

    在此评论

    #bind-address = 127.0.0.1
    

    然后重启Mysql

    sudo service mysql restart
    

    现在享受远程登录

    【讨论】:

      【解决方案3】:

      启用远程 root 访问可能很危险。如果您要设置具有更多限制性权限的用户帐户,那将是更好的选择。以下三个步骤应该可以做到。

      1. 确保以bind-address ... 开头的行至少在您的 my.ini 或 my.cnf 文件中被注释掉。如果它不存在,请继续。 您可以在 Windows 上的 C:\ProgramData\MySQL\MySQL Server 8.0 中找到此文件。

      2. 然后,检查与您建立连接的用户帐户在“限制主机匹配”字段中是否没有 localhost。虽然不建议这样做,但您可以将 % 放在该字段中以进行测试。您可以使用 MySQL Workbench 打开与服务器的本地连接,然后从菜单栏中转到服务器>用户和权限并找到您要连接的用户帐户。

      “限制主机匹配”字段不允许您在非本地连接。 IE。它将接受的连接限制为 IP 地址模式。理想情况下,您应该从静态 IP 地址或子网访问 MySQL 服务器,以便尽可能限制。

      1. 显然,您的防火墙应该允许 MySQL 服务器应用程序通过您想要的端口进行通信。您和您的服务器之间的物理网络设备应该允许在您要连接的端口上进行通信。 (通常是 3306 端口)

      【讨论】:

      • 路由器中的端口(3306)转发帮助我谢谢。
      • 有时真的只是简单的事情 :^) 很高兴我能提供帮助。
      【解决方案4】:

      完成以上所有操作后,我仍然无法以 root 远程登录,但 Telnetting 到端口 3306 确认 MySQL 正在接受连接。

      我开始查看 MySQL 中的用户,发现 multiple root users 的密码不同。

      select user, host, password from mysql.user;
      

      所以在MySQL我再次set all the passwords for root,我终于可以远程登录root

      use mysql;
      update user set password=PASSWORD('NEWPASSWORD') where User='root';
      flush privileges;
      

      【讨论】:

      • 这是正确的。在执行其他答案中的步骤时,似乎创建了密码为空的用户帐户。所以你需要为他们添加密码。
      • 我需要将接受的答案与这个答案结合起来,然后一切正常。
      • SQL for 5.7 及以上update user set authentication_string=password('YOUR_PASSWORD') where user='root';
      • 接受的答案设置了密码并为我工作。
      • 谢谢你,就像@James一样,我必须将它与接受的答案结合起来才能修复。
      【解决方案5】:

      有时需要使用 windows 上的电脑名称

      第一步)放入mysql的配置文件:

      mysqld.cnf SET 绑定地址= 0.0.0.0

      (让 recibe 通过 tcp/ip 建立连接)

      第二步)在mysql中创建用户,表用户,具有windows上pc的名称属性,不是ip

      【讨论】:

        【解决方案6】:

        请按照以下步骤为 MySQL 用户设置通配符远程访问。

        (1) 打开cmd。

        (2) 导航到路径 C:\Program Files\MySQL\MySQL Server 5.X\bin 和 运行此命令。

        mysql -u root -p

        (3) 输入root密码。

        (4) 执行以下命令提供权限。

        将 *.* 上的所有权限授予 'USERNAME'@'IP' 识别者 '密码';

        USERNAME:您希望连接到 MySQL 服务器的用户名。

        IP:您希望允许访问 MySQL 的公共 IP 地址 服务器。

        PASSWORD:所用用户名的密码。

        IP 可以替换为 % 以允许用户从任何 IP 进行连接 地址。

        (5) 执行命令刷新权限并退出。

        刷新特权;

        退出;\q

        【讨论】:

        • 执行此操作后,我的 root 仍然拒绝访问。我错过了什么?
        • 您可以在第 4 步中尝试使用本地系统 IP 地址而不是 %。它应该工作。 % 表示任何 IP 地址。
        【解决方案7】:

        根据我的经验,你可以在/etc/mysql/mysql.conf.d/mysqld.cnf这个路径下找到配置文件。

        (我挣扎了一段时间才找到这条路)

        【讨论】:

        • 这在很大程度上取决于您使用的发行版。最好的方法是搜索它:sudo find /etc -iname 'mysql*.cnf'
        • 我很欣赏“查找”命令。我是命令行新手,所以非常有帮助。谢谢!
        • 我花了好几个小时编辑 /etc/mysq/conf.d/mysql.cnf 直到我发现这个答案。
        • 在 Centos 7 上:查找 /etc -iname 'my*.cnf'
        【解决方案8】:

        如果mysqldbind address 设置为环回/本地地址(例如127.0.0.1),则无法从远程主机访问服务器,因为无法从任何远程主机访问环回接口。

        将此选项设置为0.0.0.0:: 用于 IPv4+6)以接受来自任何主机的连接,或者如果您只想允许在一个接口上进行连接,则设置为另一个外部可访问地址。

        Source

        【讨论】:

          【解决方案9】:

          这在 MySQL 上是默认允许的。

          默认禁用的是远程root 访问。如果要启用它,请在本地运行此 SQL 命令:

           GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
           FLUSH PRIVILEGES;
          

          然后在您的my.cnf 文件中找到以下行并将其注释掉,该文件通常位于Unix/OSX 系统上的/etc/mysql/my.cnf 上。在某些情况下,该文件的位置是 /etc/mysql/mysql.conf.d/mysqld.cnf)。

          如果是Windows系统,可以在MySQL安装目录下找到,一般是C:\Program Files\MySQL\MySQL Server 5.5\,文件名是my.ini

          换行

           bind-address = 127.0.0.1
          

           #bind-address = 127.0.0.1
          

          并重新启动 MySQL 服务器(Unix/OSXWindows)以使更改生效。

          【讨论】:

          • 好的,所以我在文件末尾添加了 binnd-address = 127.0.0.1,我尝试使用来自外部主机的 Navicat 进行连接,但出现 10060 错误
          • 嗯,你不需要添加它。就像我的回答说的那样,您需要将其注释掉,而不是添加它。默认情况下有一个,所以你需要找到它,并通过在它前面加上 # 来注释掉它
          • 嗯,在 \MYsql Server 5.5\ 中只有 1 个名为 my-default.ini 的 ini 文件,唯一没有 # 的行是:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
          • 对于那些正在寻找 my.cnf 文件但没有在其中找到 bind-address 指令的人,请注意,在我的例子中(Ubuntu 16.04.2 上的 MySQL 版本 14.14)文件的位置是 @ 987654333@
          • 我遵循并运行命令,但 mysql 返回 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '*****' WITH GRANT OPTION' at line 1 。我该怎么办?
          【解决方案10】:

          此博客 How to setup a MySQL server on Local Area Network 将有助于从头开始设置 MySQL

          【讨论】:

          • @Kokodoko 我很高兴它做到了:)
          【解决方案11】:

          如果您从brew 安装 MySQL,它实际上只在默认情况下侦听本地接口。要解决此问题,您需要编辑 /usr/local/etc/my.cnf 并将 bind-address127.0.0.1 更改为 *

          然后运行brew services restart mysql

          【讨论】:

          • 对于我的 ubuntu 16.04.4 服务器,绑定地址设置在 /etc/mysql/mysql.conf.d/mysqld.cnf
          • 这不仅仅是使用 brew,任何 MySQL 都会有这个默认设置,只允许本地连接。
          【解决方案12】:

          对于 OS X 用户,请注意 bind-address 参数通常设置在 launchd plist 而不是 my.ini 文件中。所以就我而言,我从/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist 中删除了<string>--bind-address=127.0.0.1</string>

          【讨论】:

          • plist 文件的替代位置:~/Library/LaunchAgents
          【解决方案13】:

          仅供参考 我为这个问题拉了几个小时。最后我打电话给我的托管服务提供商,发现在我的情况下使用云服务器,在 1and1 的控制面板中,他们有一个二级防火墙,你必须克隆并添加端口 3306。一旦添加,我就直接进入了..

          【讨论】:

          • 这听起来很适合您的情况。我不是无穷无尽的网络知识来源,但你确定这个解决方案适用于这个问题吗?
          • 我也遇到过这个问题。常见于云托管服务器,
          • 我遇到了同样的问题。这对我有帮助。
          【解决方案14】:

          如果您的防火墙服务正在运行,请检查防火墙端口 3306 是否已打开。

          【讨论】:

            【解决方案15】:

            在我的情况下,我试图连接到 cent OS 上的远程 mysql 服务器。经过很多解决方案(授予所有权限、删除 ip 绑定、启用网络)问题仍然没有得到解决。

            事实证明,在寻找各种解决方案时,我遇到了 iptables,这让我意识到 mysql 端口 3306 不接受连接。

            以下是关于我如何检查和解决此问题的小说明。

            • 检查端口是否接受连接:
            telnet(mysql服务器ip) [portNo]
            • 添加ip表规则以允许端口连接:
            iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
            • 不建议将此用于生产环境,但如果您的 iptables 配置不正确,添加规则可能仍无法解决问题。在这种情况下,应执行以下操作:
            服务 iptables 停止

            希望这会有所帮助。

            【讨论】:

              【解决方案16】:

              如果您的 MySQL 服务器进程仅在 127.0.0.1 或 ::1 上侦听,那么您将无法远程连接。如果您在 /etc/my.cnf 中有 bind-address 设置,这可能是问题的根源。

              您还必须为非localhost 用户添加权限。

              【讨论】:

              • 奇怪,你的服务器怎么会在127.0.0.1之外的另一个IP上“监听”?
              • @Pacerier 127.0.0.1 仅绑定到环回接口。外部连接将不起作用。一个系统通常会有多个网络接口,每个网络接口都需要具体绑定,也可以使用 bind-all 0.0.0.0 地址。
              猜你喜欢
              • 1970-01-01
              • 2012-05-01
              • 2012-08-02
              • 1970-01-01
              • 2018-01-31
              • 1970-01-01
              • 2020-10-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多