如何允许远程连接到mysql

Leo*_*Leo 328 mysql mysql-workbench

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

我怎样才能做到这一点?

mju*_*rez 724

MySQL默认允许这样做.

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

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

然后找到以下行并在您的文件中将其注释掉my.cnf,该文件通常存在/etc/mysql/my.cnf于Unix/OSX系统上.在某些情况下,文件的位置是/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
Run Code Online (Sandbox Code Playgroud)

 #bind-address = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

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

  • 对于那些寻找`my.cnf`文件并且没有在其中找到`bind-address`指令的人,请注意在我的情况下(Ubuntu 16.04.2上的MySQL版本14.14)文件的位置是`/ etc/mysql/mysql.conf.d/mysqld.cnf` (57认同)
  • 嗯,你不需要添加它.就像我的回答所说的那样,你需要将其评论出来,而不是添加它.默认情况下有一个,所以你需要找到它,并通过在其前面添加#来注释它 (7认同)
  • 嗯,在\ MYsql Server 5.5 \中只有一个名为my-default.ini的ini文件,没有#的唯一行是:sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES (6认同)
  • 好的,所以我在文件末尾添加了binnd-address = 127.0.0.1,我尝试使用外部主机的navicat进行连接,得到10060错误 (4认同)
  • 这个答案很完美.thnx @mjuarez - 授予所有特权*.*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' (2认同)
  • 如果GRANT导致查询正常,受影响的0行(0.00秒),我该怎么办? (2认同)
  • 它不起作用我按照所有步骤,我使用的是Windows 8,并且在My.ini中没有建立绑定地址行我始终得到相同的错误 (2认同)
  • 我按照并运行命令,但mysql返回```你的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以便在第1行```''''''''''''''''''''''''''''''''''''''''''''''''''' 我该怎么办? (2认同)
  • @HàLink for mysql 8 检查一下:/sf/ask/3528685191/ (2认同)

Mat*_*ock 48

完成上述所有操作后,我仍无法root远程登录,但Telnetting to port 3306确认MySQL接受了连接.

我开始查看MySQL中的用户,发现有多个root用户使用不同的密码.

select user, host, password from mysql.user;
Run Code Online (Sandbox Code Playgroud)

所以在MySQL我再次为root设置所有密码时,我终于可以远程登录了root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
Run Code Online (Sandbox Code Playgroud)

  • SQL for 5.7及以上```update user set authentication_string = password('YOUR_PASSWORD')其中user ='root';``` (8认同)
  • 这是对的.在执行其他答案中的步骤时,似乎会创建具有空密码的用户帐户.所以你需要为它们添加密码. (3认同)

May*_*tel 34

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

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

  • 这很大程度上取决于您使用的发行版。最好的方法就是搜索它:`sudo find /etc -iname 'mysql*.cnf'` (3认同)

Kus*_*hal 25

在我的情况下,我试图连接到分操作系统上的远程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

希望这可以帮助.


alb*_*rus 16

远程登录的所有过程。默认情况下远程登录是关闭的。您需要手动打开所有ip..才能访问所有ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

特定IP

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

然后

flush privileges;
Run Code Online (Sandbox Code Playgroud)

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

SELECT host,user,authentication_string FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)

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

bind-address = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

你可以找到这个

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

Run Code Online (Sandbox Code Playgroud)

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

sudo nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

在此评论

#bind-address = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

然后重启Mysql

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

现在享受远程登录


Hir*_*ghi 15

请按照下面提到的步骤为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地址.

密码:使用的用户名密码.

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

(5)按照命令退出并取消.

FLUSH特权;

出口; 或者\ q

在此输入图像描述

  • 完成后,我的root仍然被拒绝访问.我错过了什么? (3认同)

Pro*_*ton 10

当我从事一个以MySQL服务器作为数据库的Java 项目时,我遇到了这个挑战。

我是这样做的

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Run Code Online (Sandbox Code Playgroud)

向下滚动到绑定地址行,并确保将其注释掉或替换为0.0.0.0(以允许所有远程连接)或替换为您想要远程连接的Ip 地址。

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

sudo systemctl restart mysql
Run Code Online (Sandbox Code Playgroud)

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

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

输入你的mysql用户密码

检查您想要的用户已经有权访问的主机。就我而言,用户是root

SELECT host FROM mysql.user WHERE user = "root";
Run Code Online (Sandbox Code Playgroud)

这给了我这个输出:

+-----------+
| host      |
+-----------+
| localhost |
+-----------+
Run Code Online (Sandbox Code Playgroud)

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

USE my_database;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';
Run Code Online (Sandbox Code Playgroud)

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

之后我检查了用户现在可以访问的主机。就我而言,用户是root

SELECT host FROM mysql.user WHERE user = "root";
Run Code Online (Sandbox Code Playgroud)

这给了我这个输出:

+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+
Run Code Online (Sandbox Code Playgroud)

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

mysql -u username -h mysql-server-ip-address -p
Run Code Online (Sandbox Code Playgroud)

其中u代表用户h代表mysql-server-ip-addressp代表密码。所以就我而言是:

mysql -u root -h 34.69.261.158 -p
Run Code Online (Sandbox Code Playgroud)

输入你的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> 
Run Code Online (Sandbox Code Playgroud)

资源如何允许远程连接 MySQL

就这样。

我希望这有帮助


Nam*_*ama 10

关闭链接 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf 处的注释:

bind-address = 127.0.0.1  =>>  #bind-address = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

更改主机名以便所有计算机都可以访问它,在本地运行以下 SQL 命令:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='root';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

重启服务:

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

打开mysql端口:

sudo ufw allow 3306
Run Code Online (Sandbox Code Playgroud)


Tim*_*mmm 6

如果你从brew它安装了MySQL,那么默认情况下只会在本地接口上监听.要解决此问题,您需要编辑/usr/local/etc/my.cnf并将bind-addressfrom 更改127.0.0.1*.

然后跑brew services restart mysql.

  • 对于我的 ubuntu 16.04.4 服务器,绑定地址设置位于 /etc/mysql/mysql.conf.d/mysqld.cnf 中 (2认同)

tad*_*man 5

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

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

  • @Pacerier 127.0.0.1仅绑定到环回接口.外部连接不起作用.系统通常会有多个网络接口,每个接口都需要专门绑定,或者您可以使用bind-all 0.0.0.0地址. (2认同)

小智 5

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

  • 我也遇到过这个问题。常见于云托管服务器, (4认同)