[mysql基础文档]-3-配置MySQL远程访问

引言

有时,我们需要对数据库进行远程管理,默认MySQL并不支持远程登陆,本文提供了一种实现命令行远程访问MySQL的方法。

文章目录

0×1.Ubuntu环境如何允许MySQL远程连接

1)更改主配置文件,允许远程IP访问数据库

					--用vim打开my.cnf文件,注释掉bind-address一行
					www@qingsword.com:~$ sudo vim /etc/mysql/my.cnf 
					--注释下面这一行
					#bind-address=127.0.0.1

					--部分系统my.cnf文件中并没有bind-address,这些系统的主配置放在mysqld.cnf文件中
					www@qingsword.com:~$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
					--注释这一行
					#bind-address=127.0.0.1

					--修改主配置文件后,重启mysql服务
					www@qingsword.com:~$ sudo service mysql restart
					

2)配置访问权限

● 允许指定用户远程访问MySQL

					--使用root用户登陆本地数据库
					www@qingsword.com:~$ mysql -u root -p

					--连接到mysql库
					mysql> use mysql;

					--配置远程访问权限,qingsword是远程登陆使用的用户名,123456是远程登陆使用的密码,%允许远程所有IP访问,如果需要指定IP,使用IP替换%
					mysql> grant all privileges on *.* to 'qingsword'@'%' identified by '123456' with grant option;

					--使配置生效
					mysql> flush privileges;

					--查看mysql.user表,能看到我们添加进去的qingsword用户,host下面是允许访问的IP地址,%表示允许所有IP访问,由此可以看出,root用户只允许本地用户访问
					mysql> select host,user from user;
					+-----------+------------------+
					| host      | user             |
					+-----------+------------------+
					| %         | qingsword        |
					| 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防火墙启动状态
					www@qingsword.com:~$ sudo ufw status
					状态: 激活 <-如果没有激活,就不必要配置了

					--在ufw中添加允许mysql的3306端口
					www@qingsword.com:~$ sudo ufw allow 3306/tcp
					

4)远程访问命令

					--使用qingsword这个用户访问192.168.1.104这台主机的MySQL数据库
					www@qingsword.com:~$ mysql -h 192.168.1.104 -u qingsword -p
					password: <--输入我们授权时设置的那个密码
					

5)删除远程访问

如果不需要远程访问数据库了,用下面的命令来删除远程访问用户;

					mysql> use mysql;

					--删除刚才授权的qingsword用户
					mysql> delete from user where user='qingsword';

					--将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 qingsword -p
					Enter password: ****** <--输入授权用户密码
					

5)删除远程访问用户

请参考本文第一部分中第五小段的内容。