MySQL:如何允许远程连接到MySQL

MySQL:如何允许远程连接到MySQL,mysql,mysql-workbench,Mysql,Mysql Workbench,我已经在本地机器上安装了MySQL Community Edition 5.5,我希望允许远程连接,以便可以从外部源进行连接 我该怎么做呢?如果您的MySQL服务器进程正在监听127.0.0.1或::1,那么您将无法远程连接。如果在/etc/my.cnf中设置了绑定地址,这可能是问题的根源 您还必须为非本地主机用户添加权限。这在MySQL上是默认允许的 默认情况下禁用的是远程root访问。如果要启用此功能,请在本地运行此SQL命令: GRANT ALL PRIVILEGES ON *.* TO

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


我该怎么做呢?

如果您的MySQL服务器进程正在监听127.0.0.1或::1,那么您将无法远程连接。如果在
/etc/my.cnf
中设置了
绑定地址
,这可能是问题的根源


您还必须为非本地主机用户添加权限。

这在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


然后重新启动MySQL服务器(、和),使更改生效。

在我的例子中,我试图连接到cent OS上的远程MySQL服务器。在经历了许多解决方案(授予所有特权、删除ip绑定、启用网络)之后,问题仍然没有得到解决

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

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

  • 正在检查端口是否正在接受连接:
telnet(mysql服务器ip)[portNo]
  • 正在添加ip表规则以允许端口上的连接:
iptables-A输入-i eth0-p tcp-m tcp--dport 3306-j接受
  • 不建议在生产环境中使用此方法,但如果iptables配置不正确,添加规则可能仍然无法解决问题。在这种情况下,应采取以下措施:
关闭防火墙
希望这能有所帮助。

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

我开始观察MySQL中的用户,发现他们有不同的密码

select user, host, password from mysql.user;
因此,在
MySQL
中,我再次登录,最终可以以
root
身份远程登录

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

对于需要它的人,如果您的防火墙服务正在运行,请检查防火墙端口3306是否也已打开。

仅限F.Y.I
我为这个问题烦恼了好几个小时。。最后,我打电话给我的主机提供商,发现我使用的云服务器在1和1的控制面板中有一个辅助防火墙,您必须克隆并添加端口3306。我一加进去就直接进去了

对于OS X用户,请注意绑定地址参数通常在launchd plist中设置,而不是在my.ini文件中设置。因此,在我的例子中,我从
/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist
中删除了
--bind address=127.0.0.1
,如果您从
brew
安装MySQL,默认情况下它只监听本地接口。要解决此问题,您需要编辑
/usr/local/etc/my.cnf
,并将
绑定地址从
127.0.0.1
更改为
*


然后运行
brew services restart mysql

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


(我费了一段时间才找到这条路径)

这个博客将有助于从头开始设置
MySQL

请按照下面提到的步骤为MySQL用户设置通配符远程访问

(1) 打开cmd

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

mysql-u root-p

(3) 输入根密码

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

将**上的所有权限授予由标识的“用户名”@“IP” “密码”

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

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

密码:所用用户名的密码

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

(5) 按照命令刷新previleges并退出

FLUSH特权

退出\q


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

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


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

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

mysqld.cnf设置绑定地址=0.0.0.0

(允许通过tcp/ip进行recibe连接)

第二步)在mysql中创建用户,表用户,使用windows上pc的名称Properties,而不是ip


启用远程根目录访问可能很危险。如果您要设置具有更严格权限的用户帐户,则更可取。以下三个步骤应该可以做到这一点

  • 确保以
    绑定地址…
    开头的行在my中至少被注释掉。 iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT service iptables stop
    select user, host, password from mysql.user;
    
    use mysql;
    update user set password=PASSWORD('NEWPASSWORD') where User='root';
    flush privileges;
    
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
    
    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
    
    sudo service mysql restart
    
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
    sudo systemctl restart mysql
    
    mysql -u root -p
    
    SELECT host FROM mysql.user WHERE user = "root";
    
    +-----------+
    | host      |
    +-----------+
    | localhost |
    +-----------+
    
    USE my_database;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';
    
    SELECT host FROM mysql.user WHERE user = "root";
    
    +-----------+
    | host      |
    +-----------+
    | %         |
    | localhost |
    +-----------+
    
    mysql -u username -h mysql-server-ip-address -p
    
    mysql -u root -h 34.69.261.158 -p
    
    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>