授予任何IP地址的MySQL数据库远程访问权限
问题的原因是需要从任何IP地址远程访问MySQL数据库。解决方法是允许MySQL服务器接受远程连接,并创建一个具有远程访问权限的用户。
首先,打开mysqld.conf文件,可以使用以下命令:
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
在该文件中搜索以"bind-address"开头的行,并将其值设置为0.0.0.0:
bind-address = 0.0.0.0
保存文件。
如果运行的是MySQL 8+版本,mysqld.cnf文件中可能没有bind-address指令。在这种情况下,将此指令添加到文件的底部:/etc/mysql/mysql.conf.d/mysqld.cnf。
然后,使用systemd或service命令重新启动MySQL服务器,具体取决于操作系统:
sudo systemctl restart mysql(适用于Ubuntu)
sudo systemctl restart mysqld.service(适用于Debian)
MySQL服务器现在可以接受远程连接。
接下来,需要创建一个用户并授予其权限,以便我们可以使用此用户进行远程登录。
以root身份或任何具有root权限的其他用户连接到MySQL数据库:
mysql -u root -p
现在,在localhost和'%'通配符中创建所需的用户,并授予其对所有数据库的权限:
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
然后,授予用户在所有数据库上的所有权限:
GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
最后不要忘记刷新权限:
FLUSH PRIVILEGES;
注意:如果在数据库服务器上配置了防火墙,则还需要打开MySQL的默认端口3306,以允许流量通过。
sudo systemctl restart mysqld.service适用于Debian,我必须使用sudo systemctl restart mysql.service适用于Ubuntu。
我更新了答案并添加了这两个发行版的MySQL重启命令。感谢提供信息。
问题出现的原因是MySQL服务器默认只允许本地访问,而不允许远程访问。为了解决这个问题,需要编辑MySQL的配置文件,并更改授权权限。
首先,打开MySQL配置文件(my.cnf):
vim /etc/mysql/my.cnf
然后,注释掉以下两行:
#bind-address = 127.0.0.1 #skip-networking
如果找不到skip-networking这一行,可以手动添加并注释掉。
重启MySQL服务器:
~ /etc/init.d/mysql restart
接下来,需要更改授权权限。
默认情况下,使用的MySQL用户名和密码只允许在本地访问MySQL服务器。需要更新权限,可以使用以下命令:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
其中,将USERNAME和PASSWORD替换为自己的用户名和密码。
如果要给特定IP地址授权访问,可以使用以下命令:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
其中,将USERNAME和PASSWORD替换为自己的用户名和密码,将1.2.3.4替换为要授权的IP地址。可以多次运行该命令以授权多个IP地址的访问。
还可以为远程访问指定单独的用户名和密码。
可以通过以下命令来检查最终结果:
SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";
最后,可能还需要运行以下命令来刷新权限:
mysql> FLUSH PRIVILEGES;
测试连接是否成功,可以在终端或命令行中运行以下命令:
mysql -h HOST -u USERNAME -pPASSWORD
如果成功连接到MySQL shell,可以运行show databases;命令来检查是否具有远程访问的权限。
如果误将访问权限授予用户,可以使用撤销命令进行撤销。
以下命令将撤销所有用户在所有机器上的权限:
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
以下命令将撤销特定IP地址上用户的权限:
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
需要注意的是,执行REVOKE命令后,可以通过检查information_schema.user_privileges表来确认撤销的结果。
如果在执行以上操作后仍然无法连接,请检查防火墙设置,可能会阻止3306端口或其他设置的端口。
需要注意的是,'USERNAME'与'username'是不同的,所以要注意大小写。
文章来源:[Enable Remote Access (Grant)](https://rtcamp.com/tutorials/mysql/remote-access/)
问题的原因是无法从任何IP地址远程访问MySQL数据库。解决方法是使用以下命令将远程访问权限授予MySQL数据库:
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
其中,'user'是要授予远程访问权限的用户名,'password'是该用户的密码。
这个问题可能出现的原因有很多。这个命令是用于远程访问(两台不同的机器)。如果你不是在做这个操作,那么这个命令就不适用。你仍然需要正确的密码和其他信息。
为了使更改生效,你需要使用"flush privileges;"命令。
当连接到在同一操作系统实例上运行的数据库实例(例如开发机器)时,关键是传入"-h my_machine_name"参数。这样客户端会将你标识为'user'_machine_name.example.com,而不是'user'。这样你就不需要为localhost和网络访问创建和维护两个帐户和授权。当然,确保mysqld绑定到0.0.0.0而不是127.0.0.1。
如果出现"Operation CREATE USER failed for 'remote'@'%'"错误,可以尝试以下解决方法:
1. 确保你有足够的权限执行CREATE USER操作。
2. 检查是否已经存在名为'remote'的用户。如果存在,可以尝试删除该用户并重新创建。
3. 确保在执行CREATE USER操作时提供了正确的语法和参数。
4. 如果你是在使用MySQL 8.0以上版本,需要使用CREATE USER语句的版本2。
希望以上方法能够帮助你解决远程访问MySQL数据库的问题。