章
目
录
公司开发一个基于arm64硬件的盒子项目,盒子中装的aarch64 GNU/Linux Ubuntu 18.04.1
系统,我在该系统上装了mysql5.7
,能成功启动mysql,也能成功登入,但是就是在远程连接时始终提示无法访问,于是开始各种查找解决方案,最终花了大半天时间终于搞定!
安装说明
先说下我是怎么安装支出aarch6
版的mysql的,一开始想从mysql官网寻找下相关tar包,但是始终找不到合适的,支持Ubuntu要么是rpm的要么是deb的,两种都试过,没成功,基本原因都是和arm64不兼容,导致无法安装,最后还是在线通过如下指令直接安装的,估计也正是这种安装方式导致后面无法连接的问题。
# 安装服务端 阿里云镜像默认5.7版本 apt-get install mysql-server # 安装客户端 apt-get install mysql-client
解决方案
遇到mysql本地连接成功,但远程连接不上的问题,无非从以下几个方面入手:
1、user表问题
mysql库中user表的root用户的host没有指定为%
,而是默认的localhost
,在mysql客户端执行如下操作即可
# 1、切换到mysql库 use mysql; #2、查看root用户的host是不是 %,如果是localhost继续下面操作 select user,authentication_string,host from user where user = 'root'; # %为任意主机,就是任意主机可以通过用户名root + 密码 进行连接,你也可以指定只允许某IP的主机进行连接 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码'; # 如果之前没有密码,最好再设置下密码,发现上面语句不会产生密码,否则后面连接可能会提示无权限需要更新客户端 alter user 'root'@'%' identified with mysql_native_password by '密码'; # mysql重新加载用户权限 flush privileges;
2、防火墙问题
如果上面操作之后仍然无法远程连接mysql,就需要检查防火墙问题。我这里是ubuntu系统(其他系统自己找对应的指令)
潘老师首先查看了防火墙是否开启:
# 查看防火墙状态 ufw status
3、3306端口开放的问题
如果3306端口没有开发也会导致无法远程连接,潘老师通过指令发现3306开放了。
netstat -tunlp
但是仔细看图,有一点奇怪,就是它开放的是127.0.0.1:3306
而不是0.0.0.0:3306
,这才是本次问题的突破点,127.0.0.1:3306
只对本机开放访问,其他ip都不行,那么该怎么解决呢?重点来了~
1)由于是apt在线安装的,mysql在目录/etc/mysql/mysql.conf.d
下有个默认配置文件mysqld.cnf
,打开编辑发现:
2)原来罪魁祸首就在这里,bind-address
绑定的ip是127.0.0.1
,我们只需将127.0.0.1
改为0.0.0.0
表示任意ip主机都能访问即可:
3)最后,重启mysql服务即可。
使用 navicat或者telnet就能发现能正常连接了mysql服务了。
终于舒了一口气哦,解决了这麻烦的mysql5.7无法远程连接的问题!