在 Debian 系统上为轻量服务器配置 MySQL 远程访问,需兼顾安全性与可用性。以下是安全、规范的完整步骤(基于 MySQL 8.0+,MariaDB 类似):
✅ 前提条件
- 已安装并运行 MySQL/MariaDB 服务
- 拥有
root或具有sudo权限的账户 - 确认防火墙规则允许远程连接(如
ufw或云厂商安全组)
🔐 步骤 1:检查并修改 MySQL 绑定地址
默认情况下,MySQL 可能只监听 127.0.0.1,需改为监听所有接口(或指定 IP):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 或对于 MariaDB: /etc/mysql/mariadb.conf.d/50-server.cnf
找到 [mysqld] 部分,确保包含(或添加):
[mysqld]
bind-address = 0.0.0.0
# 若仅允许特定网段,可写为 bind-address = 你的公网IP
⚠️ 注意:生产环境强烈建议配合防火墙限制来源 IP,而非开放
0.0.0.0。
重启服务生效:
sudo systemctl restart mysql
# 或 sudo systemctl restart mariadb
🔑 步骤 2:创建远程用户并授权
登录 MySQL(本地):
sudo mysql -u root -p
执行以下 SQL(替换占位符):
-- 创建专用远程用户(推荐!避免直接用 root 远程)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!';
-- 授予必要权限(按最小权限原则调整)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER
ON your_database.* TO 'remote_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证用户
SELECT user, host FROM mysql.user WHERE user='remote_user';
EXIT;
🔒 安全建议:
- 将
'%'替换为具体客户端 IP 或 CIDR(如'192.168.1.100'或'10.0.0.0/8')- 使用强密码 + 定期轮换
- 禁用
root远程登录(除非必要)
🛡️ 步骤 3:配置防火墙(关键!)
若使用 ufw(Debian 默认):
sudo ufw allow from <客户端IP> to any port 3306
# 示例:允许 192.168.1.100 访问
sudo ufw allow from 192.168.1.100 to any port 3306
# 启用并查看状态
sudo ufw enable
sudo ufw status
若使用云服务商(如阿里云/AWS/腾讯云):
- 登录控制台 → 安全组/防火墙规则
- 入方向 添加入站规则:协议
TCP,端口3306,源 IP 设为可信范围(非0.0.0.0/0!)
🧪 步骤 4:测试远程连接
从外部机器测试:
mysql -h <服务器公网IP> -P 3306 -u remote_user -p
输入密码后应能成功登录。
❗ 若失败,检查:
- 防火墙是否放行
bind-address是否正确- MySQL 日志:
sudo tail -f /var/log/mysql/error.log或/var/log/mariadb/mariadbd.log
🔒 进阶安全加固(强烈推荐)
-
禁用远程 root 登录:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY ''; -- 或直接删除 root@% 用户 DROP USER IF EXISTS 'root'@'%'; -
启用 SSL/TLS 加密传输(可选但推荐):
-- 生成证书(略),然后在 mysqld.cnf 中添加: [mysqld] ssl-ca=/etc/mysql/certs/ca.pem ssl-cert=/etc/mysql/certs/server-cert.pem ssl-key=/etc/mysql/certs/server-key.pem require_secure_transport = ON -
限制最大连接数 & 超时:
[mysqld] max_connections = 100 wait_timeout = 28800 interactive_timeout = 28800
需要我提供自动化脚本(含错误处理)、Docker 部署方案,或针对某云平台的专属配置吗?
PHPWP博客