MySQL开启远程访问

默认情况下,MySQL是不允许远程访问的,可以通过以下步骤修改。

修改MySQL配置文件

找到MySQL配置文件,增加或修改以下配置

[mysqld]
bind-address = 0.0.0.0
# skip-networking

0.0.0.0:说明所有IP都可以访问,当然也可以修改成只允许特定的IP访问。

修改完成后,需要重启MySQL服务。

授权MySQL用户可以远程访问

登录到MySQL命令行,执行以下命令

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

database_name:数据库名称,使用*则可以访问所有数据库。

user_name:数据库用户。

ip_address:指定的远程IP可以访问,使用%则允许所有IP连接。

user_password:用户密码。

配置防火墙

很多服务器需要手动开启防火墙才可以访问指定的端口,国内的服务器需要在安全组里放行MySQL端口,一般为3306端口。

Iptables:

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:

sudo ufw allow 3306/tcp

特定IP放行

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD:

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

验证MySQL远程访问

使用以下命令测试远程访问

mysql -u user_name -h mysql_server_ip -p

user_name:MySQL数据库远程访问用户。

mysql_server_ip:MySQL服务器IP地址。

没有报错则说明开启MySQL远程访问成功,否则有问题。