MySQL-无法远程访问 MySQL,有可能是哪些原因造成的?

MySQL-无法远程访问 MySQL,有可能是哪些原因造成的?

泛泛之交 发布于 2017-02-25 字数 306 浏览 1186 回复 2

想指定1个IP远程访问mysql,已经在本地执行了
mysql>GRANT ALL PRIVILEGES ON . TO user1@"192.168.1.3" IDENTIFIED BY "mypassword" WITH GRANT OPTION;

mysql>FLUSH PRIVILEGES;

且本地防火墙已打开了mysql端口,为什么在远程用$mysql -h192.168.1.2 -u user1 -p
无法访问呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2017-08-06 2 楼

默认状况下,出于安全考虑,mysql数据库屏蔽了远程访问功能。 然而在许多状况下,你需要在家或者从web程序去访问远端数据库服务器,这就相当麻烦了。

第一步: 激活网络设置
你需要编辑mysql配置文件my.cnf.

通常状况,my.cnf放置于在以下目录:
/etc/mysql/my.cnf (Debian linux)
/etc/my.cnf (Red Hat Linux/Fedora Linux)
/var/db/mysql/my.cnf (FreeBSD)

# vi /etc/my.cnf
然后用vi编辑my.cnf,修改内容从以下行:

[mysqld]

你所需要:
1. 确保skip-networking被删除或者屏蔽,否则不支持TCP/IP 访问
2. 增加行bind-address = 65.55.55.2,替代65.55.55.2 为你的服务器地址
修改后,配置为:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 65.55.55.2
# skip-networking
....
..

保存并关闭配置文件
重启mysql服务器: # /etc/init.d/mysql restart

第二步, 给远程ip授访问权限
1. 以root身份登陆mysql # mysql -u root -p
2. 授权给新数据库
如果你有一个新的数据库名称为foo。用户bar需要在客户端地址为202.54.10.20上访问。

在服务器端执行 (授权法):
mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';

如何给以存在的数据库授权?

如果用户 webadmin 经常在客户端地址202.54.10.20 访问 webd数据库,那么在服务器端执行的命令应该为(改表法):

mysql> update db set Host='202.54.10.20' where Db='webdb';
mysql> update user set Host='202.54.10.20' where user='webadmin';

第三步: 执行exit命令退出mysql环境,

第四步 测试
From remote system type command:
$ mysql -u webadmin —h 65.55.55.2 —p

注解;
-u webadmin: webadmin为mysql的用户名
-h IP or 域名: 65.55.55.2 is MySQL server IP address or hostname (FQDN)
-p : 密码提示
你也可以使用telnet去连接远程的3306端口 $ telnet 65.55.55.2 3306

甜柠檬 2017-03-22 1 楼

第一、你的这条语句是没有问题的。

建议先用这条语句看一下MySQL是否给user1在192.168.1.3机器上授权成功了:
SHOW GRANTS FOR "user1"@'192.168.1.3';

如果授权成功了,再确认一下网络连接,在192.168.1.3上是否能ping通192.168.1.2上的机器,确认防火墙屏蔽了mysql的端口。一般这样都能够连接了。

如果通过Grant命令没有授权成功,也可以直接通过改mysql表的user1用户的权限,例如:
use mysql;
mysql>update user set host = '192.168.1.3' where user = 'user1';

授权成功后,如果还不行,那就是网络连接的问题了