[mysql基础文档]-3-配置MySQL远程访问
引言
有时,我们需要对数据库进行远程管理,默认MySQL并不支持远程登陆,本文提供了一种实现命令行远程访问MySQL的方法。
文章目录
0×1.Ubuntu环境如何允许MySQL远程连接
1)更改主配置文件,允许远程IP访问数据库
--用vim打开my.cnf文件,注释掉bind-address一行
987@hk987.xyz:~$ sudo vim /etc/mysql/my.cnf
--注释下面这一行
#bind-address=127.0.0.1
--部分系统my.cnf文件中并没有bind-address,这些系统的主配置放在mysqld.cnf文件中
987@hk987.xyz:~$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
--注释这一行
#bind-address=127.0.0.1
--修改主配置文件后,重启mysql服务
987@hk987.xyz:~$ sudo service mysql restart
2)配置访问权限
● 允许指定用户远程访问MySQL
--使用root用户登陆本地数据库
987@hk987.xyz:~$ mysql -u root -p
--连接到mysql库
mysql> use mysql;
--配置远程访问权限,hk987是远程登陆使用的用户名,123456是远程登陆使用的密码,%允许远程所有IP访问,如果需要指定IP,使用IP替换%
mysql> grant all privileges on *.* to 'hk987'@'%' identified by '123456' with grant option;
--使配置生效
mysql> flush privileges;
--查看mysql.user表,能看到我们添加进去的hk987用户,host下面是允许访问的IP地址,%表示允许所有IP访问,由此可以看出,root用户只允许本地用户访问
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | hk987 |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | debian-sys-maint |
| localhost | root |
| ubuntus | root |
+-----------+------------------+
● 允许使用root用户远程访问MySQL
可能大家也猜到了,在mysql.user表中root对应127.0.0.1,说明只有localhost能够使用root访问数据库;那么允许root远程访问,只需要将mysql.user表root对应的127.0.0.1改为%即可:
mysql> use mysql;
mysql> update user set host='%' where host='127.0.0.1' and user='root';
mysql> flush privileges;
--现在能够使用root远程登陆数据库了
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| ::1 | root |
| localhost | debian-sys-maint |
| localhost | root |
| ubuntus | root |
+-----------+------------------+
3)防火墙设置
如果在完成上面两步之后还是不能连接到数据库,可能是系统防火墙阻止了访问,ubuntu下比较常见的防火墙是ufw,使用下面的命令允许访问本机3306端口
--查看ufw防火墙启动状态
987@hk987.xyz:~$ sudo ufw status
状态: 激活 <-如果没有激活,就不必要配置了
--在ufw中添加允许mysql的3306端口
987@hk987.xyz:~$ sudo ufw allow 3306/tcp
4)远程访问命令
--使用hk987这个用户访问192.168.1.104这台主机的MySQL数据库
987@hk987.xyz:~$ mysql -h 192.168.1.104 -u hk987 -p
password: <--输入我们授权时设置的那个密码
5)删除远程访问
如果不需要远程访问数据库了,用下面的命令来删除远程访问用户;
mysql> use mysql;
--删除刚才授权的hk987用户
mysql> delete from user where user='hk987';
--将root更改成只能本地访问
mysql> update user set host='127.0.0.1' where host='%' and user='root';
--使配置生效
mysql> flush privileges;
0×2.Windows环境如何允许MySQL远程连接
1)使用"MySQL 5.6 Command Line Client",或者直接到MySQL安装目录bin下面,用cmd调用mysql.exe登陆数据库;
2)进入mysql库,配置远程访问权限;
请参考本文第一部分第二小段"配置访问权限"中的操作。
3)关闭防火墙,或在防火墙中添加规则
笔者在这一部分曾经遇到过一个问题,在上面的权限设置完成之后,远程无法访问,结果发现是Windows自带的"系统防火墙"导致的,如果对Windows系统防火墙比较熟悉,可以配置允许MySQL的程序和端口通过防火墙;本文的操作是"直接将防火墙禁用",使用"win徽章键+r",在打开的窗口中输入cmd,确定,然后使用"sc config"命令将防火墙服务禁用:
--MpsSvc是win7以后的防火墙服务名称,start=后面要空一格再输入disabled
C:\Users\Administrator>sc config MpsSvc start= disabled
--如果要开启系统防火墙可以输入下面的命令
C:\Users\Administrator>sc config MpsSvc start= auto
防火墙服务禁用后,需要重新启动系统,让配置生效。
4)远程连接到Windows MySQL
--笔者偷懒没有设置环境变量,所以用mysql.exe绝对路径调用参数,-h后面是远程服务器的IP地址,-u后面是远程服务器授权的用户名
C:\Users\Administrator> "c:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe" -h 192.168.1.107 -u hk987 -p
Enter password: ****** <--输入授权用户密码
5)删除远程访问用户
请参考本文第一部分中第五小段的内容。