mysql8.0远程访问配置
最近在ubuntu上配置MySQL的数据库,配置过程非常简单,但是配置之后却发现无法通过Navicat进行访问,查阅了很多博客,但是基本都是针对Mysql8.0以前的版本进行介绍,即使个别介绍的是MySQL8.0的配置,在实际操作过程中,也发现无法解决问题,特写此博客防止大家踩坑。
一、修改bind-address
参考很多博客,都表示访问配置文件/etc/mysql/my.conf,但在8.0中,其已经不在my.conf中,具体修改方式为
cd /etc/mysql
vim mysql.conf.d
进入之后可以看到如下内容
移动光标到mysqld.cnf,单机回车,可以看到
bind-address = 127.0.0.1
在前面加 # 注释掉即可
使用service mysql restart
或者systemctl restart mysql.service
重启MySQL服务
二、授予远程访问权限
在Console输入
mysql -uroot -p
之后输入密码再运行
use mysql
select user,host,plugin from user;
可以发现 root 的 host 为localhost,这意味着只能通过本地访问,而无法通过远程对数据库进行访问
使用下面两种进行配置
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword';
FLUSH PRIVILEGES;
或
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
之后再次查询,可以看到
意味着权限已经修改成功。
如果出于安全考虑,不想授予 root 对外访问权限,可以先创建新的账户,再参照 root 的方法执行,在此不赘述
三、检查端口和防火墙
netstat -an | grep 3306
若显示下图,则端口已经开启
如果使用 firewalld 防火墙,则输入
firewall-cmd --zone=public --list-ports
查看是否包含3306端口,如果不包含,则输入
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
必须包含 --permanent
才能永久生效
如果使用 iptables 防火墙,则输入下列命令来开启端口
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT