MySQL:如何允许远程连接到MySQL
我已经在本地机器上安装了MySQL Community Edition 5.5,我希望允许远程连接,以便可以从外部源进行连接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服务器进程正在监听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不接受连接 以下是我如何检查和解决此问题的小说明
- 正在检查端口是否正在接受连接:
- 正在添加ip表规则以允许端口上的连接:
- 不建议在生产环境中使用此方法,但如果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>