mysql --version结果:mysql Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
有人说是mysql8改了身份认证方式,但navicat还是使用的旧身份认证方式;或未开启远程连接的原因;查我的报错代码都是windows环境未启动mysql服务,而我的mysql在linux,图中xshell已进入mysql,说明mysql服务已启动,也可以通过service mysql status或ps -ef | grep mysql查看。
之前文章记录了我的mysql的配置,sudo mysql_secure_installation时选了允许远程root登录(问Disallow root login remotely?,输入n再回车),root身份认证方式是旧的;另一篇文章记录了我的普通用户的主机是%,是任意地址,身份认证方式是新的(那篇文章末尾有查看方式)。这两个用户都不能用navicat连上mysql,即便身份认证方式都改成旧的,且主机都改成%,不行。
后来经过搜索和测试,我的环境要想远程登录,要满足两个条件,允许远程登录和要远程登录的用户的主机地址设为%,后者可以在创建用户时直接指定,也可以创建用户后再修改。
sudo mysql_secure_installation # (之前文章设置过了,这里无需再设置)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 将bind-address=127.0.0.1改成0.0.0.0或直接注释掉这一句,127.0.0.1与localhost都表示本地
service mysql restart
update user set host='%' where user='username'; # 将要远程登录的用户的主机,改成%允许任意地址登录,前提是已设置上面的允许远程登录
补充:navicat打开时(还未点击数据库)我的防火墙有联网提醒,IP是国外IP,我就点了阻止连接,这也会导致navicat无法连接mysql,允许连接就行(最好创建允许规则,因不同防火墙只点允许时,可能还是无法连接)。暂时不知道原因,可能是navicat打开时需要联网验证授权才能使用,也可能是我点阻止连接时会阻止navicat的所有出站请求,待验证。另外,也可以检查linux防火墙里是否允许了mysql端口,我暂时未遇到。
补充:redis-server --version结果:Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923
用RedisDesktopManager连接redis服务器,或用python操作redis服务器,同样需要先开启远程连接,sudo vim /etc/redis/redis.conf,注释掉bind 127.0.0.1 ::1,再添加bind 0.0.0.0,再service redis-server restart或service redis restart,防火墙也要允许联网或允许端口。(其他需要注意的,我暂未遇到)