默认情况下,我们的mysql远程连接是关闭的,但是我们还需要通过navicat来远程连接服务器的mysql,这时我们必须先打开mysql的远程连接。
我们这里以开启阿里云 上的Mysql远程连接为例。
环境前提:Ubuntu16.04 mysql5.7
一,首先登录位于阿里云上的mysql:
在服务器上执行:
mysql -u root -h localhost -p
登录root数据库
二. 切换到mysql数据库 (需要有能操作mysql这个库的权限,一般是mysql的root用户)
use mysql
在Mysql中其实有一个内置且名为'mysql'的数据库,这个数据库中存储的是Mysql的一些数据,比如用户、权限信息、存储过程等,所以呢,我们可以通过如下简单的查询语句来显示所有的用户:
SELECT User, Host, Password FROM mysql.user;
执行结果:
--------------+--------------+| user | host | password |+------------------+--------------+--------------+| root | localhost | 37as%#8123fs || debian-test-user | localhost | HmBEqPjC5Y || johnsm | localhost | || brian | localhost | || root | 111.111.111.1| || guest | % | ||linuxprobe | 10.11.12.13 | RFsgY6aiVg |+------------------+--------------+--------------+7 rows in set (0.01 sec)**
三. 这时我们有两种方式来进行修改:
第一种:是直接将原来的 user='root' and host='localhost' 记录的host修改成%或指定的ip
1)将host设置为%表示任何ip都能连接mysql
update user set host='%' where user='root' and host='localhost';
- 当然也可以将host指定为某个ip
update user set host='106.39.178.131' where user='root' and host='localhost';
- 执行完以上语句,接着执行以下语句 ,刷新权限表,使配置生效
flush privileges;
第二种: 是新增一条记录方式
1)新增一个用户newname(这个新增的用户名称也可以为root)密码为并将host设置为%表示任何ip都能连接mysql
grant all on *.* to 'newname'@'%' identified by 'Navicat_123';
2)新增一个用户newname,密码为并将host设置为指定的ip 表示 只有该ip能连接mysql
grant all on *.* to 'newname'@'106.39.178.131' identified by 'Navicat_123';
grantallprivilegeson*.*to'root'@'%'identifiedby'123456'withgrantoption;
此语句意思是给root用户在任何IP都可以登录数据库,操作任何数据库中的任何对象。
其中:
. 第一个*是指数据库
*代表所有数据库
第二个*指数据库对象
*代表数据库中所有对象
'root'@'%' root是制定要授权的数据库用户
%代表允许登录的IP
123456是你的数据库密码
假如要限制只能在1.1.1.1登录,把%改成1.1.1.1 ,执行完毕后执行 flush privileges; 刷新权限
删除是数据库用户:
delete from mysql.user where user='xfz' and host='%';
- 执行完以上语句,接着执行以下语句 ,刷新权限表,使配置生效
flush privileges;
当然如果想再改成本地的连接,只需要将对应用户的host改成localhost即可,
update user set host='localhost' where user='root' and host='106.39.178.131';
四. 不要现在就去navicat进行连接,还需要做两件事,要不你就到坑里了
1)检查服务器防火墙3306端口开放了吗,没开放需要去开放
2)检查一下阿里云的安全组规则中是否开放了3306端口,
如何检查及配置参考文档:[https://help.aliyun.com/docum...]
五. 现在是时候进行远程连接啦,在工具里输入相应的参数
host: 阿里云服务器的ip
port:3306
user name : 如果是第一种方式的修改,用户就是root,第二种修改就是你自己设置的名字,例如我的就是newname
password: 如果是第一种方式的修改,密码就是root的密码,第二种修改就是你自己设置的密码,例如我的就是Navicat_123
至此,连上去那一刻,有木有很激动啊。
.查询用户表
在Mysql中其实有一个内置且名为mysql的数据库,这个数据库中存储的是Mysql的一些数据,比如用户、权限信息、存储过程等,所以呢,我们可以通过如下简单的查询语句来显示所有的用户呢。
SELECT User, Host, Password FROM mysql.user;
你将会看到如下这样的信息:
```
+------------------+--------------+--------------+| user | host | password |+------------------+--------------+--------------+| root | localhost | 37as%#8123fs || debian-test-user | localhost | HmBEqPjC5Y || johnsm | localhost | || brian | localhost | || root | 111.111.111.1| || guest | % | ||linuxprobe | 10.11.12.13 | RFsgY6aiVg |+------------------+--------------+--------------+7 rows in set (0.01 sec)
```
如果你想增加或减少一些列的显示,那么你只需要编辑这条sql语句即可,比如你只需要显示用户的用户名,那么你就可以这样使用SELECT User FROM mysql.user;,就是这样了,很简单嘛,就用这种方法就可以获得所有用户了呢,快去试试吧。
3.显示所有的用户(不重复)
熟悉Mysql的朋友们都知道DISTINCT这个修饰的作用吧,对了,就是去除重复的数据,所以我们可以使用如下命令显示所有你的Mysql的用户而忽略那些仅仅是主机名不同的用户。
SELECT DISTINCT User FROM mysql.user;
这条命令的输出就像下面显示的这样:
+------------------+
| user |
+------------------+
| root |
| debian-test-user |
| johnsm |
| brian |
| guest |
| linuxprobe |
+------------------+
6 rows in set (0.01 sec)