最近在学习服务器安装mysql用来做项目,需要用到远程连接,但是经过排错用navicat连接后一直出现下面这种情况解决后顺便记录下ubuntu安装mysql及远程连接。

mysql卸载
//首先如果之前安装过的话,先要彻底卸载掉,以下命令依次执行
//purge可以将包以及软件的配置文件全部删除,remove仅仅可以删除包,不会删除配置文件
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove
sudo apt autoclean
mysql安装
ubuntu20.04通过apt-get命令得到的是mysql8的版本,所以无需指定,下载完成后会设置root登录密码。
//更新源
sudo apt-get update
sudo apt-get upgrade
//下载
sudo apt-get install mysql-server
mysql管理命令
sudo service mysql status //查看服务状态
sudo service mysql start //启动服务
sudo service mysql stop //停止服务
sudo service mysql restart //重启服务
exit //退出mysql
登录
安装完成之后使用命令登录
mysql -u root -p
远程连接(出现问题最多)
登录之后,一般为了安全性考虑,通常不会用root作为远程连接对象,可以新创建一个用户
create user '用户名'@'%' identified by '密码';
grant all on *.* to '用户名'@'%';
flush privileges; //刷新权限
创建好之后可以查看新建用户权限,如果像下图那样便是授权创建成功。
use mysql;
select user,host from user;

接下来可以试试用navicat登录试试,如果出现第一张图的错误信息,尝试一下办法
solution1:
首先是查看启动状态,如果是正在运行的话,网上很多的办法是更改配置文件,去找bind-address 退出mysql。
sudo vim /etc/mysql/my.cnf
执行完之后可能会出现这种情况

然后在看一下其他的配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
如果找到了bind-address,将它注释后,重启mysql尝试连接。
solution2
第一种解决办法中可能找不到bind-address,(巧了我就是没找到)。然后试一下检查网络和端口情况。在windows命令行
ping ip 可以通
telent ip 3306 //发现失败,问题可能是防火墙的原因,端口号没开放。
查看防火墙信息
sudo ufw status
该命令可能会显示防火墙已经关闭。这个地方是个误区。但是执行下面命令发现防火墙是运行着的
//查看防火墙
systemctl status firewalld


这里要解释一下误区
常见的linux系统的防火墙有:UFW、firewall、和iptables,其中,UFW是Debin系列默认的防火墙,firewall是红帽系列7以上的防火墙(CentOS7.x)。
而且他们很可能同时安装在同一个系统上,并且相互影响,就比如我这次的ubuntu20.04是同时存在ufw跟firewall的,就导致了3306端口没有放开。
找到问题所在了就开放一下3306端口,当然也可以把两个防火墙都给禁了(虚拟机无所谓一蹴而就)。
//查看3306端口状态
firewall-cmd --zone=public --query-port=3306/tcp
//如果是no,那么打开3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
//防火墙重载
firewall-cmd --reload
//再次查看状态显示yea说明成功开启3306
再次连接
