0%

MySQL允许远程连接

默认情况下,MySQL数据库只允许本地连接,当然数处于安全考虑,但是对于调试或者需要远程连接的情况下,会带来不少的麻烦

本文介绍如何允许数据库的远程连接,其方法对于MariaDB数据库也适用

配置MySQL服务

编辑配置文件

1
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind-address配置项,修改为0.0.0.0,允许所有地址的连接,如果有特定的服务器,建议修改为指定的IP地址

1
bind-address = 0.0.0.0

在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

参考: