连接MySQL数据库出现10038错误的各种解决方法(亲试检查用户、防火墙端口及配置文件等) 以前我的几个网站放在dreamhost的时候,我总是喜欢用Navicat连接MySQL数据库,这样可以不用命令行,直接在图像界面里修改操作数据库,非常方便,堪称MySQL图形化管理工具中的神器。最近刚弄了个阿里云的ECS服务器,配置好后,赶紧打开Navicat,输入IP地址,用户名和密码,测试连接,10038错误,显示2003 can't connect to MySQL server on 'localhost'(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为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数据库啦。
重启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上实例的安全组规则没有配置。
赶紧进入该实例的安全组管理中:
增加一个规则,准许访问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。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。