默认情况下,MySQL数据库只允许本地连接,当然数处于安全考虑,但是对于调试或者需要远程连接的情况下,会带来不少的麻烦
本文介绍如何允许数据库的远程连接,其方法对于MariaDB数据库也适用
配置MySQL服务
编辑配置文件
1
| sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
找到 bind-address配置项,修改为0.0.0.0,允许所有地址的连接,如果有特定的服务器,建议修改为指定的IP地址
在mysql8.0版本中,可能没有bind-address选项,自己添加到[mysqld]中即可
重启服务
1 2 3 4
| # unubtu or Debian sudo systemctl restart mysql # On RedHat based distributions like CentOS sudo systemctl restart mysqld
|
Mysql 授权,允许用户远程连接
1 2 3
| mysql -u root -p
mysql> GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';
|
如授权root用户可以远程登录
1
| mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
|
如果是MYSQL8.0,上述命令会报如下错误:
ERROR 1410 (42000): You are not allowed to create a user with GRANT
是由于从8.0开始,创建用户需要用 CREATE USER,如下:
1 2 3
| mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
|
配置防火墙
配置防火墙,允许3306端口远程访问
iptables
1 2 3 4
| # 指定所有IP均可访问 sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT # 指定IP可访问 sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT
|
UFW
Ubuntu默认防火墙
1 2 3 4
| # 所有IP可访问 sudo ufw allow 3306/tcp # 指定IP访问 sudo ufw allow from 10.8.0.5 to any port 3306
|
FirewallD
一般用在centos系统上
1 2 3 4 5 6 7 8 9 10
| # 所有IP可访问 sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload
# 指定IP可访问 sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload
|
参考: