如何允许远程连接到mysql

时间:2013-02-08 18:34:05

标签: mysql mysql-workbench

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

我该怎么做?

16 个答案:

答案 0 :(得分:670)

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)以使更改生效。

答案 1 :(得分:44)

完成上述所有操作后,我仍无法远程登录root,但Telnet到端口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;

答案 2 :(得分:29)

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

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

答案 3 :(得分:24)

在我的情况下,我试图连接到分操作系统上的远程mysql服务器。经过很多解决方案(授予所有权限,删除IP绑定,启用网络)问题仍未解决。

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

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

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

希望这有帮助。

答案 4 :(得分:13)

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

  

(1)打开cmd。

     

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

     

mysql -u root -p

     

(3)输入root密码。

     

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

     

授予所有特权*。*''USERNAME'@'IP'ENFENTIFIED BY   '密码';

     

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

     

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

     

PASSWORD:所用用户名的密码。

     

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

     

(5)按照以下命令刷新优先权并退出。

     

FLUSH PRIVILEGES;

     

退出;   或 \ q

enter image description here

答案 5 :(得分:11)

所有远程登录过程。默认情况下,远程登录是关闭的。您需要手动打开所有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

现在享受远程登录

答案 6 :(得分:6)

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

然后运行brew services restart mysql

答案 7 :(得分:5)

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

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

答案 8 :(得分:2)

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

答案 9 :(得分:2)

Just F.Y.I 我把头发拉出这个问题好几个小时..最后我打电话给我的托管服务提供商,发现在我的情况下使用云服务器,在1和1的控制面板中,他们有一个辅助防火墙,你必须克隆并添加端口3306。一旦加入,我就直接进入..

答案 10 :(得分:2)

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

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

Source

答案 13 :(得分:1)

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

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

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

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

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

答案 14 :(得分:0)

有时需要在Windows上使用 PC的名称

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

  

mysqld.cnf SET绑定地址= 0.0.0.0

(允许通过tcp / ip接收连接)

第二步)使mysql中的用户成为表用户,并具有 Windows上的计算机名称属性,没有IP

enter image description here

答案 15 :(得分:0)

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

这是我的做法

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

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

向下滚动到绑定地址行,并确保已注释或用0.0.0.0替换(以允许所有远程连接)或用您要从中 IP地址

进行必要的更改后,保存并退出配置文件。通过重新启动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-address p 表示密码。所以在我的情况下是:

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

仅此而已。

我希望这会有所帮助