2018-04-29 05:59:02
来 源
中存储网
运维基础
Navicat连接MySQL数据库出现10038错误的各种解决方法(亲试检查用户、防火墙端口及配置文件等) ,虽然同样的10038错误,但是原因不一,总结如下:1、查看数据库用户host列是localhost还是%,必须改为%。

连接MySQL数据库出现10038错误的各种解决方法(亲试检查用户、防火墙端口及配置文件等) 以前我的几个网站放在dreamhost的时候,我总是喜欢用Navicat连接MySQL数据库,这样可以不用命令行,直接在图像界面里修改操作数据库,非常方便,堪称MySQL图形化管理工具中的神器。最近刚弄了个阿里云的ECS服务器,配置好后,赶紧打开Navicat,输入IP地址,用户名和密码,测试连接,10038错误,显示2003 can't connect to MySQL server on 'localhost'(10038).:

Navicat连接mysql 10038错误

这个错误比较熟悉了,在用dreamhost的时候,只要修改一下允许root用户远程登录就可以。在咱们的ECS服务器里可以用命令。我的环境是linux,centos 7,PHP5.6,Apache2.4,mysql5.7,Navicat 绿色版下载的版本是Navicat for Mysql 11.00。

1、看MySQL的用户是不是限制了远程登录,也就是看host是localhost还是%。

登录mysql数据库,查看用户情况:

查看mysql用户的命令:mysql> SELECT User, Host FROM mysql.user;

查看root用户允许远程连接

果然,显示的root为localhost本地登录,修改命令如下:

mysql> grant all privileges on *.*  to  'root'@'%'  identified by '12345678'  with grant option;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

之后再次使用select查看用户:

root用可以远程登录mysql了

看到红色方框里多出的这一行了吧,用户root已经成功设置为可以远程登录mysql数据库啦。

重启MySQL,

#service mysqld restart;

再去Navicat窗口测试连接!

发现还是不行啊!

2、查看3306端口是否打开

那再看看是不是防火墙3306端口没有打开?端口查看命令:

[root@anyunwei.com~]# netstat -talnp 

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1683/httpd          

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1088/sshd           

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1683/httpd          

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1093/php-fpm: maste 

tcp        0      0 57.43.220.134:54794     116.15.69.53:80         ESTABLISHED 1270/AliYunDun      

tcp        0     68 57.43.220.134:22        201.219.61.16:50227     ESTABLISHED 14404/sshd: root@pt 

tcp6       0      0 :::3306                 :::*                    LISTEN      1269/mysqld 

看到如上黄色部分显示,知道3306端口已经是打开的,没有问题。

有点头大了,到底怎么回事啊.....

突然想到了当初刚开始用阿里云ECS的时候,感觉所有东西都配置好了,可是就是无法访问的问题,原因是ECS上实例的安全组规则没有配置。

赶紧进入该实例的安全组管理中:

ecs安全组的安全规则设置

 

mysql 3306端口打开安全规则设置

增加一个规则,准许访问MySQL 3306端口。

重新在Navicat里连接数据库,成功。

至此,我的Navicat连接数据库报错10038的问题解决。

期间查询了网上不少文章,虽然同样的错误,但是原因不一,总结如下:

1、查看数据库用户host列是localhost还是%,必须改为%;

2、把/etc/my.cnf中的 bind-address          = 127.0.0.1前加一个#注释掉,如果你的my.cnf里没有这个bind-address也是正常的,就不用理他了;

3、如果开了防火墙,注意看3306端口是不是打开了,提醒,在centos 7中,默认用的是firewall,不是iptable了;

4、如果是ecs主机,看看你的这个实例的安全规则是不是设置正确。

好了,欢迎大家随时交流,安运维anyunwei.com。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。