我已经在我的本地机器上安装了 MySQL Community Edition 5.5,我想允许远程连接,以便我可以从外部源连接。
我怎样才能做到这一点?
我已经在我的本地机器上安装了 MySQL Community Edition 5.5,我想允许远程连接,以便我可以从外部源连接。
我怎样才能做到这一点?
默认情况下,MySQL 允许这样做。
默认情况下禁用的是远程root
访问。如果要启用它,请在本地运行此 SQL 命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
然后在你的文件中找到以下行并将其注释掉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
到
#bind-address = 127.0.0.1
完成上述所有操作后,我仍然无法root
远程登录,但 Telnetting 到端口3306
确认MySQL
正在接受连接。
我开始查看 MySQL 中的用户,发现有多个 root 用户使用不同的密码。
select user, host, password from mysql.user;
所以在MySQL
我再次为root设置了所有密码,我终于可以远程登录了root
。
use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
只是根据我的经验,您可以在此路径下找到配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
。
(我挣扎了一段时间才找到这条路)
就我而言,我试图连接到 cent OS 上的远程 mysql 服务器。经过很多解决方案(授予所有权限、删除 ip 绑定、启用网络)问题仍然没有得到解决。
事实证明,在研究各种解决方案时,我遇到了 iptables,这让我意识到 mysql 端口 3306 不接受连接。
这是关于我如何检查和解决此问题的小说明。
telnet (mysql 服务器 ip) [portNo]
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
服务 iptables 停止
希望这可以帮助。
远程登录的所有过程。远程登录默认关闭。您需要为所有 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
现在享受远程登录
请按照下面提到的步骤为 MySQL 用户设置通配符远程访问。
(1) 打开cmd。
(2) 导航到路径 C:\Program Files\MySQL\MySQL Server 5.X\bin 并运行此命令。
mysql -u 根目录 -p
(3) 输入root密码。
(4) 执行以下命令提供权限。
将 *.* 上的所有权限授予由“密码”标识的“用户名”@“IP”;
USERNAME:您希望连接到 MySQL 服务器的用户名。
IP:您希望允许访问 MySQL 服务器的公共 IP 地址。
PASSWORD:使用的用户名的密码。
IP 可以替换为 % 以允许用户从任何 IP 地址进行连接。
(5) 执行命令刷新权限并退出。
同花顺特权;
出口; 或\q
如果您的 MySQL 服务器进程仅在 127.0.0.1 或 ::1 上侦听,那么您将无法远程连接。如果您有一个bind-address
设置,/etc/my.cnf
这可能是问题的根源。
您还必须为非localhost
用户添加权限。
如果您从brew
它安装 MySQL,则默认情况下确实只侦听本地接口。要解决此问题,您需要编辑/usr/local/etc/my.cnf
并将bind-address
from更改127.0.0.1
为*
.
然后运行brew services restart mysql
。
在使用MySQL服务器作为数据库的Java 项目上工作时,我不得不面对这个挑战。
我是这样做的:
首先,确认你的MySQL服务器配置允许远程连接。使用您喜欢的文本编辑器打开 MySQL 服务器配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
向下滚动到bind-address行并确保将其注释掉或替换为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代表user,h代表mysql-server-ip-address,p代表password。所以在我的情况下是:
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>
就这样。
我希望这有帮助
仅供参考,我用这个问题解决了几个小时。最后我打电话给我的托管服务提供商,发现在我的情况下使用云服务器,在 1and1 的控制面板中,他们有一个二级防火墙,你必须克隆并添加端口3306. 添加后我直接进入..
对于需要它的人,如果您的防火墙服务正在运行,请检查防火墙端口 3306 是否也打开。
这篇博客How to setup a MySQL server on Local Area Network将有助于MySQL
从头开始设置
对于 OS X 用户,请注意 bind-address 参数通常设置在 launchd plist 中,而不是 my.ini 文件中。所以就我而言,我<string>--bind-address=127.0.0.1</string>
从/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist
.
启用远程 root 访问可能很危险。如果您要设置具有更多限制性权限的用户帐户,那将是更好的选择。以下三个步骤应该可以做到。
确保以开头的行bind-address ...
至少在您的 my.ini 或 my.cnf 文件中被注释掉。如果它不存在,请继续。C:\ProgramData\MySQL\MySQL Server 8.0
您可以在 Windows中找到此文件。
然后,检查您正在与之建立连接的用户帐户是否localhost
在“限制主机匹配”字段中没有。虽然不建议这样做,但您可以改为%
输入该字段以进行测试。您可以通过使用 MySQL Workbench 打开与服务器的本地连接,然后从菜单栏中转到服务器>用户和权限并找到要连接的用户帐户来执行此操作。
“限制主机匹配”字段是不允许您在非本地连接的。即,它将接受的连接限制为 IP 地址模式。理想情况下,您应该从静态 IP 地址或子网访问 MySQL 服务器,以便尽可能限制。
须藤 lsof -i -P -n | grep 听
它不应该是这样的:
mysqld 23083 mysql 21u IPv4 145900142 0t0 TCP
127.0.0.1
:3306 (LISTEN)
在这种情况下,我们需要更新 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf :
绑定地址 = 127.0.0.1 --> 0.0.0.0
然后重启mysql“sudo service mysql restart”
为了测试来自客户端的 mySQL 连接:
nc -vz <主机地址> 3306