Navicat连接远程服务器上的mysql
写在前面:以后坚持遇到问题解决了之后就记录,周五解决的这个问题,周日才想起来记录发现已经忘记是如何解决的,重蹈覆辙!!
最近在本地的navicat上想要连接服务器上的mysql,最终一直报错如下:
终端连接报错如下:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
Navicat连接报错如下:
找了好久的解决办法,最终是因为在远程服务器上的mysql没有开启权限,所以无法在其它机器上访问(这里需要在局域网下的机器),当然你要确定的你的mysql服务启动了
1.客户端下登录数据库
输入如下:
mysql -uroot -p --socket=/var/run/mysqld/mysqld.sock
这里我如果输入的是这个
mysql -uroot -p
报错如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
问题原因:配置文件中的 socket
路径与 /tmp/mysql.sock
不一致,那么客户端会尝试连接错误的路径。因为服务器上的Mysql是老师的,所以暂时我就没有修改对应的配置文件了,采用如下进行临时登录:
mysql -uroot -p --socket=/var/run/mysqld/mysqld.sock
要是想彻底修改的话我感觉可以在服务器那台机器上更新 MySQL 客户端配置文件(通常是 /etc/mysql/mysql.conf.d/mysqld.cnf
或 /etc/my.cnf
),在 [client]
部分添加或修改 socket
参数:
[client]
socket=/var/run/mysqld/mysqld.sock
然后重新登录:
mysql -u root -p
登录成功显示如下:
2.查看root远程访问的权限
输入如下:
use mysql; ## 选择mysql数据库
select user,host from user; ## 查看用户访问端口
输出如下:
注意:root用户默认的是localhost(这里我是修改过了),说明只允许从本地登录mysql服务。而我们要从远程以root用户连接数据库,就必须修改root的host的值,改为%,允许任何ip访问。
3.修改root中的host允许任何ip访问
输入如下:
update user set host = '%' where user = 'root';
再使用之前的命令:
select user,host from user; ## 查看用户访问端口
可以看见root的host值被修改为%,即为成功!
刷新配置:
FLUSH PRIVILEGES;
4.修改远程访问的密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
输入完之后,看到Query OK,说明执行成功!
注意:此命令可以授权任何在mysql数据库user表中的用户以远程登录的方式访问数据库,本例中以’root’作为举例,若想授权其他用户,只需修改’root’的值为指定用户即可,123456’为’root’用户对应的登录密码(这里是我设置的密码),可以修改为你想要授权用户的登录密码。
最后启用本地的navicat连接即可,如下连接成功: