我在本地计算机上安装了MySQL Community Edition 5.5,我想允许远程连接,以便我可以从外部源连接。
我该怎么做?
答案 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
答案 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]
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
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
答案 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-address
从127.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)
如果mysqld
将bind address设置为环回/本地地址(例如127.0.0.1
),则无法从远程主机访问服务器,因为无法从任何远程主机。
将此选项设置为0.0.0.0
(IPv4 {6为::
)以接受来自任何主机的连接,或者如果您只想允许一个接口上的连接,则接受另一个外部可访问的地址。
答案 13 :(得分:1)
启用远程root用户访问可能很危险。如果您要设置具有更多限制性权限的用户帐户,那将是更好的选择。以下三个步骤应该可以做到。
确保在您的my.ini或my.cnf文件中至少注释掉以bind-address ...
开头的行。如果不存在,请继续。
您可以在Windows的C:\ProgramData\MySQL\MySQL Server 8.0
中找到此文件。
然后,检查与主机建立连接的用户帐户在“主机匹配限制”字段中是否没有localhost
。虽然不建议这样做,但您可以将%
放在该字段中以进行测试。为此,您可以使用MySQL Workbench打开与服务器的本地连接,然后从菜单栏中转到Server> Users and Privileges(服务器和用户和特权),然后找到要连接的用户帐户。
“限制主机匹配”字段不允许您进行非本地连接。即它将接受的连接限制为IP地址的模式。理想情况下,您应该从静态IP地址或子网访问MySQL服务器,以便尽可能地限制自己。
答案 14 :(得分:0)
有时需要在Windows上使用 PC的名称
第一步)放入mysql的配置文件:
mysqld.cnf SET绑定地址= 0.0.0.0
(允许通过tcp / ip接收连接)
第二步)使mysql中的用户成为表用户,并具有 Windows上的计算机名称属性,没有IP
答案 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
仅此而已。
我希望这会有所帮助