情况一:如果使用的是阿里云或者其他平台的服务器,则可能是没有配置安全组规则导致的。
- 如果使用的是轻量应用服务器,则到该服务器下的安全组进行配置;我用的云服务器ECS,所以就到对应的安全组下配置规则。
情况二:没有赋予用户远程访问的权限
mysql> use mysql;
// 【非新增用户,跳过这一步】
// 新增一个用户为username,密码为password,任何ip都可以访问到mysql。
// % 表示任何ip都可以访问,如何要进行ip限制,可以把%替换成指定的ip
mysql> grant all on *.* to 'username'@'%' identified by 'password';
// 【新增过的,跳过这一步】
// 修改用户可访问mysql的访问为所有ip。
mysql> update user set host='%' where user='username' and host='localhost';
// 执行完以上的语句,都需要更新权限配置。
mysql> flush privileges;
情况三:mysql的端口号为0,my.cnf配置文件中有skip-networking参数。
mysql> show variables like 'skip_networking';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | NO |
+-----------------+-------+
// 查看mysql端口号
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
- 查看配置文件my.cnf(我的文件在/etc/my.cnf),是否配置了skip-networking,如果有,则注释掉,配置了bind-address=127.0.0.1的也要注释掉,也可以把127.0.0.1改成0.0.0.0,然后重启mysql
skip-networking
bind-address=127.0.0.1
// 重启
[lmm@izz98rw7qik6d37cz ~]# systemctl restart mysqld.service
- 再进入到mysql,查看skip_networking是否已关闭,端口号是否为3306.
- 注意:如果使用了阿里云服务器,记得要去服务器的安全组中配置规则哦~
mysql> show variables like 'skip_networking';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | OFF |
+-----------------+-------+
// 查看mysql端口号
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
- 如果配置文件中没有配置skip-networking,也没有bind-address,或者以上配置不起效,也可能执行过mysqld --user=mysql --skip-grant-tables --skip-networking& 命令导致的,可以试一下以下这种方案(有点点暴力哈)。
// 查看mysql进程,可以看到相关的开启skip-networking的命令
[lmm@izz98rw7qik6d37cz ~]# ps -ef|grep mysql
mysql 20518 1 0 11:23 ? 00:00:00 /bin/sh /usr/bin/mysql_safe --user=mysql --skip-grant-tables --skip-networking
root 20741 1222 0 11:23 pts/2 00:00:00 mysql -uroot -px xxxxxx
root 20879 20476 0 13:52 pts/0 00:00:00 grep --color=auto mysql
// 杀掉所有的mysql进程
[lmm@izz98rw7qik6d37cz ~]# kill -9 进程ID
// 再次查看mysql相关进程,已经没有了
[lmm@izz98rw7qik6d37cz ~]# ps -ef|grep mysql
// 重启mysql
[lmm@izz98rw7qik6d37cz ~]# systemctl restart mysqld.service
- 再进入mysql,查看mysql的端口号,看看四不四已经变成3306了~
- 用第三方工具连接,连接成功啦,奈斯~
……最后,有什么不对的地方,欢迎各位路过的大哥指正~