您的位置:首页 > 数据库 > MySQL

Mysql 远程访问控制--10038问题的解决

2016-08-04 13:16 309 查看
帮朋友维护一个php的网站,用Navicat连接ECS虚拟机的Mysql服务一直失败,出现

`Can't connect to mysql server on xxx.xxx.xxx.xxx(10038)`


的问题,加上之前对Mysql的配置一直不是很熟悉,碰到过很多的坑,就记一下,免得以后还得各种查。

虽然Mysql也是Oracle的,但是Mysql的权限管理和Oracle还不一样,之前在创建Mysql的用户的时候,以为和Oracle的一样,用了

Create user XX identified by xxxx


这样的语句,然后再Mysql里各种赋权限,结果连本地mysql客户端都连不上,很郁闷。后来,偶然的机会,才知道,原来一般在实际使用中,Mysql的授权和用户创建时一块儿进行的,直接一句话就搞定了:

GRANT ALL PRIVILEGES ON *.* TO 'XXX'@'%' IDENTIFIED BY 'xxxx' WITH GRANT OPTION


刚好这句话,还解决了另外一个问题,就是那个“%”。它允许XXX用户远程连接Mysql服务,而如果@后边的那个值是 localhost 的话,那XXX用户就只能在服务器上连接Mysql服务了。如果用户不是你建的,那就得去mysql的user表中将该用户的host改为%就行了。

好了,用户算是创建完了,接下来,就是对Mysql服务进行配置了。打开/etc/my.cnf,将选项skip-networking注释掉(注:有的资料上说还要讲bind-address设置成127.0.0.1,我的配置文件中反正没看到这句话,也就没有设置。这个选项是用来设置可以进行外部访问Mysql的IP,有一个过滤的作用,也没有必要设置)。



下面,我们就来看看这个选项是干嘛的。这个选项上方有它的说明,大致的意思是这样的:不监听TCP/IP端口;本选项可以作为一个安全增强以确保,所有到Mysqld即Mysql服务的连接都是通过本机进行的;所有与Mysql进行到通信都必须经过Unix sockets和命名管道。现在明白了吧。

回来我们在my.cnf中往上找,看到在[mysqld]组的配置中,开启了3306的端口和一个Unix socket文件,分别用于远程连接和本地连接。如果不将skip-networking注释掉,我们就只能通过服务器本地进行连接了,而这对于开发和维护都相当的不方便。

至此,问题就算解决一半了,然后,还得去看看防火墙有没有屏蔽掉3306端口。Centos系统的话,在 /etc/sysconfig/iptables 中,有没有这样一句话:

A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT


有的话就不用管了,没有就加上。然后重启防

service iptables restart


就是重启Mysql的服务了:

service mysql restart。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysqld linux centos