为了安全,默认情况下MySQL 是不允许远程连接的,本教程将详细讲解如何开启 MySQL 数据库远程连接权限。
关闭防火墙
首先要关闭防火墙,或者开启MySQL的监听端口,默认为3306端口。
# systemctl disable firewalld --now
允许MySQL监听特定IP地址
默认情况下, bind - address 的值为 127.0.0.1 ,所以只能监听本地连接。我们需要将这个值改为远程连接 ip 可访问,可使用通配符 ip 地址 *, ::, 0.0.0.0 ,当然也可以是单独的固定 ip,这样就仅允许指定 ip 连接,更加安全。
下面我们来修改MySQL配置文件,让 MySQL 可以监听远程固定 ip 或者监听所有远程 ip。
备注:参考 MySQL数据库配置文件在哪里呢?查找MySQL配置文件的位置。
我这里修改的是 /etc
添加 bind-address=0.0.0.0 允许任何IP地址连接。
[mySQLd] datadir=/var/lib/mysql socket=/var/lib/mysql log-error=/var/log/mysql pid-file=/run/mysqld bind-address=0.0.0.0
创建远程登录用户
如果数据库进行了安全配置,那么root用户只能本机登录。
mysql> select user,host from user; +------------------+-----------+ | user | host | +------------------+-----------+ | my | localhost | | my | localhost | | my | localhost | | root | localhost | +------------------+-----------+ 4 rows in set sec)
创建一个用户,用户名:'remote1'@'%' ,密码:password
注意:在MySQL 5.x版本直接在一条SQL中 就可以创建用户并授予权限;而8.x后,需要先创建用户,再GRANT权限。
CREATE USER 'remote1'@'%' IDENTIFIED BY 'password';
授权远程登录账户可以访问的数据库
MySQL授权语法:grant 权限列表 on 数据库.表 to '用户名'@'主机';
此外,grant用于增加用户权限,revoke用于删除用户权限。
# 授权用户('remote1'@'%')可以在任何远程主机访问 test数据库的任何表,并且具有授权权限 GRANT ALL PRIVILEGES ON test.* TO 'remote1'@'%' WITH GRANT OPTION;
最后刷新授权
flush privileges;
测试
点击测试连接
测试连接成功
远程连接到test数据库
参考
如何远程连接 MySQL 数据库,阿里云腾讯云允许远程连接教程()