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

帮朋友维护一个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,有一个过滤的作用,也没有必要设置)。

mysqldconf

下面,我们就来看看这个选项是干嘛的。这个选项上方有它的说明,大致的意思是这样的:不监听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。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值