文章目录
MySQL 8 允许远程主机连接本地服务器
环境信息
Ubuntu 版本信息:
$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
MySQL 版本信息:
$ mysql --version
mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)
新建账户、分配权限
默认情况下,MySQL 只允许本地连接,查看 mysql
数据库的 user
表,可以看到所有用户都只允许通过 localhost 连接服务器:
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
我们可以新建一个账户:
mysql> create user 'root'@'192.168.1.4' // 'user_name'@'host_name'
-> identified by 'password'; // 密码
Query OK, 0 rows affected (0.09 sec)
以上的命令表示:创建一个账户,用户名为 root
,密码为 password
,允许 IP 为 192.168.1.4
的主机连接到本机的 MySQL 服务器。
新建的账户被添加到 mysql
数据库的 user
表中:
mysql> select host,user from user;
+-------------+------------------+
| host | user |
+-------------+------------------+
| 192.168.1.4 | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-------------+------------------+
5 rows in set (0.00 sec)
然后分配权限给该账户:
mysql> GRANT ALL // 所有权限
-> ON *.* // 任意数据库的任意表
-> TO 'root'@'192.168.1.4'; // 给那一个账户
Query OK, 0 rows affected (0.11 sec)
开放端口
查看防火墙的状态:
$ sudo ufw status
[sudo] password for mk:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
我们需要开放 3306 端口的 TCP 协议:
$ sudo ufw allow 3306/tcp
Rule added
Rule added (v6)
重新加载防火墙规则:
$ sudo ufw reload
Firewall reloaded
重新查看防火墙状态:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
3306/tcp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
3306/tcp (v6) ALLOW Anywhere (v6)
完成以上的操作之后,指定 IP 的远程客户端便可通过该账户连接到本机的 MySQL 服务器。
参考
Adding Accounts, Assigning Privileges, and Dropping Accounts