问题描述:

在本地远程连接服务器中的数据库失败

ip连不上本机mysql 连不上mysql服务器_mysql

解决方案:

1、 未开启mysql远程登录账号

(1)创建新用户时可以直接使用如下命令

create user 'your_name'@'%' identified by 'your_password';
Query OK, 1 rows affected (0.06 sec)

此时新用户创建成功,mysql的user表中会添加一条新的记录,查看user表中的user和host可用如下命令:

use mysql; --切换到mysql数据库
select host,user from user; --查看user表中的host和user
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | your_name        |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
7 rows in set (0.00 sec)

%表示所有IP均可访问,也可以将%换成指定IP,localhost表示只能本地访问。

(2)修改已存在用户

update user set host = '%' where user = 'root'; --可以将root换成任意想修改的用户
flush privileges; --刷新权限
select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | your_name        |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| %         | root             |
+-----------+------------------+
7 rows in set (0.00 sec)

此时就可以进行远程连接了;如果还是失败继续下面的操作。

2、未开启3306端口

如果没有开启3306端口,那么mysql只允许服务器本地访问,此时可以在你所购买服务器网站的控制台中打开相关服务器实例,在防火墙中添加规则,添加完成之后就可以远程连接了。若此时还不成功,继续之后的操作。

ip连不上本机mysql 连不上mysql服务器_ip连不上本机mysql_02

ip连不上本机mysql 连不上mysql服务器_mysql_03

 3、修改配置文件

若添加完3306端口后连接不成功,此时可以在服务器命令行输入 ss -tlnp

lighthouse@VM-16-2-ubuntu:~$ ss -tlnp
State             Recv-Q            Send-Q                       Local Address:Port                          Peer Address:Port            Process            
LISTEN            0                 4096                         127.0.0.53%lo:53                                 0.0.0.0:*                                  
LISTEN            0                 128                                0.0.0.0:22                                 0.0.0.0:*                                  
LISTEN            0                 70                               127.0.0.1:33060                              0.0.0.0:*                                  
LISTEN            0                 151                              127.0.0.1:3306                                     *:*                                  
LISTEN            0                 128                                   [::]:22                                    [::]:*

如果看到3306端口对应的local address是127.0.0.1,则表示只能本地访问,此时需要修改mysql配置文件,只需要找到配置文件后将其中的

bind-address = 127.0.0.1

或者

skip-networking

直接注释掉,然后重启mysql即可。

网上有的帖子说配置文件的路径为 /etc/mysql/my.cnf,但是我在其中没有找到上面的两句代码,之后我在 /etc/mysql/mysql.conf.d/mysqld.cnf 中找到了bind-address = 127.0.0.1,将其注释并重启mysql后成功实现远程连接。

配置文件的修改

cd /etc/mysql/mysql.conf.d  # 切换到文件路径
sudo vi mysqld.cnf  # 进入编辑
# 然后按一下i,进入insert模式,找到对应行将相关语句注释掉
# 完成后按一下 esc ,再输入 :wq ,进行保存并退出

最后

这个时候虽然远程连接成功了,但是新建的非root用户没有创建数据库等操作的权限,此时

show grants for your_name@%; -- 查看某个用户的权限
grant all on *.* to 'your_name'@'%' [with grant option]; -- 授予your_name用户全部权限
flush privileges; -- 刷新权限

 其中,with grant option表示允许your_name向其他用户授予权限。