如何开启MySQL远程连接

安全 Jun 17, 2018

MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架构来说是没有问题的. 但随着网站流量的增加, 后期服务器架构可能会将 Web-Server 与 MySql-Server 分别放在独立的服务器上, 以便得到更大性能的提升, 此时 MySql-Server 就要修改成允许 Web-Server 进行远程连接.

开启了远程连接,数据库的后期管理运维也不用每次都登到服务器,只要用图形化界面(如phpMyAdmin)即可远程管理。

开启MySql-Server远程连接主要从授权访问ip和服务器端口进行操作:

  1. 在服务器上登录 Mysql-Server 连接本地 mysql (默认只允许本地连接,phpMyAdmin的远程访问实际相当于本地连接):
[root@iZq2mvq6snkcniZ ~]# mysql -uroot -p123456      

123456是密码,请使用您数据库的密码。此处以命令行登录举例,也可以使用图形界面等。

  1. 修改 Mysql-Server 用户配置:
MySQL [(none)]>use mysql;
#查看现有用户,密码及允许连接的主机
MySQL [mysql]> SELECT User, Password, Host FROM user;        
+------+-------------------------------------------+-----------+
| User | Password                                  | Host      |
+------+-------------------------------------------+-----------+
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost |
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 127.0.0.1 |
+------+-------------------------------------------+-----------+
2 rows in set (0.00 sec)

#设置为所有IP都可以访问,比较危险,不建议。
MySQL [mysql]> UPDATE user SET Host=@'%' where user='root' AND Host='localhost' LIMIT 1;       
MySQL [mysql]> flush privileges;
#再次查看现有用户,密码及允许连接的主机
MySQL [mysql]> SELECT User, Password, Host FROM user;       
+------+-------------------------------------------+-----------+
| User | Password                                  | Host      |
+------+-------------------------------------------+-----------+
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |           |
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 127.0.0.1 |
+------+-------------------------------------------+-----------+
  1. 最后,请注意在linux服务器上,默认3306端口是关闭的,不允许远程访问。因此需要打开3306端口供mysql远程连接使用,端口打开方法:
[root@iZq2mvq6snkcniZ ~]# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
[root@iZq2mvq6snkcniZ ~]# service iptables save

至此,就可以真正远程访问数据库了,远程访问举例:

其他命令参考:
下面我们配置 root 用户: 密码为空, 只允许从 192.168.1.100 连接

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '' WITH GRANT OPTION;
@'192.168.1.100'可以替换为@‘%’就可任意ip访问,当然我们也可以直接用 UPDATE 更新 root 用户 Host, SQL如下:
mysql> UPDATE user SET Host='192.168.1.100' WHERE User='root' AND Host='localhost' LIMIT 1;

标签

老周

Hello Websoft9!

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.