mysql远程链接10038_Mysql 远程访问控制--10038问题的解决

帮朋友维护一个php的网站,用Navicat链接ECS虚拟机的Mysql服务一直失败,出现php

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

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

虽然Mysql也是Oracle的,可是Mysql的权限管理和Oracle还不同,以前在建立Mysql的用户的时候,觉得和Oracle的同样,用了web

Create user XX identified by xxxx

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

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,有一个过滤的做用,也没有必要设置)。服务器

30c9cdd09d81f77bc264d47ab5d66ba7.png

下面,咱们就来看看这个选项是干吗的。这个选项上方有它的说明,大体的意思是这样的:不监听TCP/IP端口;本选项能够做为一个安全加强以确保,全部到Mysqld即Mysql服务的链接都是经过本机进行的;全部与Mysql进行到通讯都必须通过Unix sockets和命名管道。如今明白了吧。socket

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

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

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

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

service iptables restart

就是重启Mysql的服务了:

service mysql restart。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值