大家都知道,MySQL 数据库默认 root 用户只能本地访问,不能远程连接管理,但是实际工作中,我们又常常会有这样的需求,远程对数据库进行管理,那么 Linux 该如何开启 MySQL 远程连接呢?下面这边文章就给大家介绍一下 Linux 下实现远程连接 MySQL 数据库的方法教程。
首先需要本地已经安装好数据库,并确认本地可以正常登录
$ mysql -uroot -p
Enter password: 此处输入密码
现在运行数据服务的服务器地址为 188.131.137.xxx,而我现在的需求是想让另一台机器(地址为:81.71.29.xxx)可以远程登录管理这台数据库服务器。在 Linux 系统中,如果需要远程连接登录 MySQL 数据库时,必须为 IP 和具体用户进行授权。再授权之前首先我们先看本地数据库的用户表,了解一下目前允许登录的具体用户:
mysql> select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
输出结果中,我们可以看到现在只有 ” root@’localhost’ “ 这个用户可以登录,所以为了满足我们的需求,就需要先创建一个可以远程登录的用户,具体创建用户的方法如下(此处我们创建一个 remote 的用户,让它可以远程登录管理我们的数据库):
mysql> create user remote@'81.71.29.100' identified by 'remotepass';
Query OK, 0 rows affected (0.01 sec)
mysql> grant select on *.* to remote;
Query OK, 0 rows affected (0.01 sec)
以上两句的意思就是创建一个 remote 用户,并设置密码为 remotepass;第二句命令的意思就是给这个用户授权对所有的库表都有 select 权限,select 是查询权限,可以查看一些库表的信息,不会对数据库有什么更改,比较安全。另外,以上两句命令执行完毕后,可以在执行一下刷新的命令,表示让做出的更改都即时生效。
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
本地数据库的操作都已经完成,接着我们来到 81.71.29.xxx 这台服务器上,执行数据库连接操作,如下:
# mysql -uremote -p -h188.131.137.253
执行之后出现了报错,根据报错可以看到是因为 MySQL 8.0 之后用户名加密方式改为了 ‘caching_sha2_password’,所以需要修改加密方式,那么我们再回来本地运行数据库的服务器进行修改:
mysql> alter user remote@'81.71.29.100' identified with mysql_native_password by 'remotepass';
Query OK, 0 rows affected (0.04 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
修改并刷新之后,再次测试可以成功登录进去:
以上就是远程连接数据库的测试过程,并且过程中遇到的错误也得到解决,这里需要提醒大家的是:数据库上的信息都是敏感操作,所以对每个用户都要做好限制,不可以给到过于大的权限,尤其是涉及到更新、修改、删除操作时一定要谨慎。
最后需要补充一点,在操作之前记得先确认一下 MySQL 服务器的状态,看 MySQL 是否正常启动或者是否处于正常运行的状态:
systemctl status mysqld.service 查看 MySQL 状态,running 表示运行中
systemctl start mysqld.service 启动 MySQL
systemctl stop mysqld.service 停止 MySQL
systemctl restart mysqld.service 重启 MySQL
另外,还可以通过查看监听套接字的状态来核实,正常来说 MySQL 的默认端口都是 3306,可以通过 ” ss -tlnp ” 或者 ” netstat -antp ” 来确认。
$ ss -tlnp
$ netstat -antp