news 2026/5/1 8:34:39

MySQL远程连接配置与安全实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL远程连接配置与安全实战

本地开发连公司数据库,在家连公司测试环境,远程运维生产库…

MySQL远程连接是刚需,但配置不当就是安全隐患。这篇整理一下远程连接的正确姿势。


为什么连不上?

先说最常见的问题:MySQL装好了,远程连不上。

原因通常就这几个:

1. MySQL没有监听外网

# 查看MySQL监听地址netstat-tlnp|grep3306# 如果显示 127.0.0.1:3306,说明只监听本地# 需要改成 0.0.0.0:3306 或具体IP

修改配置:

# /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf [mysqld] bind-address = 0.0.0.0

重启MySQL:

systemctl restart mysql

2. 用户没有远程权限

-- 查看用户权限SELECTuser,hostFROMmysql.user;-- 如果host是localhost,就只能本地连-- user: root, host: localhost ← 只能本地-- user: root, host: % ← 可以任意IP连接

创建远程用户或修改权限:

-- 方式1:创建新用户CREATEUSER'dev'@'%'IDENTIFIEDBY'your_password';GRANTALLPRIVILEGESONyour_db.*TO'dev'@'%';FLUSHPRIVILEGES;-- 方式2:修改现有用户(不推荐直接改root)-- MySQL 8.0ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'your_password';

3. 防火墙拦截

# 查看防火墙状态ufw status# 或firewall-cmd --list-all# 开放3306端口ufw allow3306# 或firewall-cmd--permanent--add-port=3306/tcp firewall-cmd--reload

4. 云服务器安全组

如果是云服务器,还要在控制台开安全组:

入站规则: 协议: TCP 端口: 3306 来源: 0.0.0.0/0 (或指定IP)

远程连接的几种方式

1. 直接连接(不推荐)

mysql-h公网IP-P3306-udev-p

问题:

  • 3306端口暴露在公网,容易被扫描攻击
  • 密码在网络上明文传输(除非用SSL)
  • 安全隐患很大

2. SSH隧道(推荐)

通过SSH建立加密隧道,MySQL流量走SSH通道:

# 本地执行ssh-L3307:localhost:3306 user@server_ip# 然后连接本地3307端口mysql-h127.0.0.1-P3307-udev-p

或者用Navicat/DataGrip等工具的SSH隧道功能:

SSH主机: server_ip SSH用户: user SSH密钥: ~/.ssh/id_rsa MySQL主机: localhost (注意是localhost,不是server_ip) MySQL端口: 3306

优点:

  • MySQL端口不用暴露公网
  • 流量加密
  • 可以用SSH密钥认证

3. VPN/组网方案

如果经常需要连接,每次建SSH隧道挺麻烦的。

更好的方式是组建虚拟局域网,让你的电脑和服务器像在同一个内网:

你的电脑(192.168.100.2) ←→ 虚拟网络 ←→ 服务器(192.168.100.1) └── MySQL(192.168.100.1:3306)

这样直接连内网IP就行:

mysql-h192.168.100.1-P3306-udev-p

我自己用的是星空组网,配置比较简单,装个客户端就能用。特别是公司有多台服务器的情况,组好网后运维方便很多,不用每台机器都配SSH隧道。


安全配置

远程连接开了,安全措施得跟上。

1. 限制访问IP

-- 只允许特定IP连接CREATEUSER'dev'@'192.168.1.%'IDENTIFIEDBY'password';-- 只允许192.168.1.x网段-- 或者更精确CREATEUSER'dev'@'192.168.1.100'IDENTIFIEDBY'password';

2. 最小权限原则

-- 别给ALL PRIVILEGES,按需授权GRANTSELECT,INSERT,UPDATEONapp_db.*TO'app_user'@'%';-- 开发环境可以宽松点GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONdev_db.*TO'dev'@'%';-- 只读用户GRANTSELECTONprod_db.*TO'readonly'@'%';

3. 强密码

-- MySQL 8.0 密码策略SHOWVARIABLESLIKE'validate_password%';-- 设置密码策略SETGLOBALvalidate_password.policy=MEDIUM;SETGLOBALvalidate_password.length=12;

4. 开启SSL

# my.cnf [mysqld] require_secure_transport = ON ssl-ca = /path/to/ca.pem ssl-cert = /path/to/server-cert.pem ssl-key = /path/to/server-key.pem

连接时指定SSL:

mysql-hserver_ip-udev-p--ssl-mode=REQUIRED

5. 修改默认端口

# my.cnf [mysqld] port = 13306

不能防住专业攻击,但能挡住大部分自动化扫描。

6. 禁用危险功能

# my.cnf [mysqld] local-infile = 0 # 禁用LOAD DATA LOCAL skip-symbolic-links = 1 # 禁用符号链接

连接工具推荐

命令行

# 基础连接mysql-hhost-Pport-uuser-p# 指定数据库mysql-hhost-uuser-pdatabase_name# 执行SQL文件mysql-hhost-uuser-pdatabase_name<script.sql

GUI工具

Navicat:功能全,收费

DBeaver:免费开源,支持多种数据库

DataGrip:JetBrains出品,IDE级别体验

MySQL Workbench:官方工具,免费

配置SSH隧道(以DBeaver为例):

1. 新建连接 → MySQL 2. SSH标签页: - 勾选 Use SSH Tunnel - Host: 服务器公网IP - Port: 22 - User: SSH用户名 - Authentication: Public Key - Private key: 选择私钥文件 3. Main标签页: - Host: localhost - Port: 3306 - Database: 数据库名 - Username: MySQL用户名

常见问题

1. Host ‘xxx’ is not allowed to connect

-- 查看用户的host设置SELECTuser,hostFROMmysql.userWHEREuser='your_user';-- 修改或新增CREATEUSER'your_user'@'%'IDENTIFIEDBY'password';GRANTALLPRIVILEGESON*.*TO'your_user'@'%';FLUSHPRIVILEGES;

2. Authentication plugin ‘caching_sha2_password’ cannot be loaded

MySQL 8.0默认用新的认证方式,老客户端可能不支持:

-- 改成旧的认证方式ALTERUSER'your_user'@'%'IDENTIFIEDWITHmysql_native_passwordBY'password';

或者升级客户端。

3. Lost connection to MySQL server

可能原因:

  • 网络不稳定
  • 查询执行时间过长
  • 连接超时
# my.cnf 调整超时 [mysqld] wait_timeout = 28800 interactive_timeout = 28800 net_read_timeout = 60 net_write_timeout = 60

4. Too many connections

-- 查看当前连接数SHOWSTATUSLIKE'Threads_connected';-- 查看最大连接数SHOWVARIABLESLIKE'max_connections';-- 临时调大SETGLOBALmax_connections=500;

永久修改要改my.cnf。


总结

MySQL远程连接的安全姿势:

  1. 不要把3306直接暴露公网
  2. 用SSH隧道组网方案连接
  3. 限制用户访问IP
  4. 最小权限原则
  5. 开启SSL加密

记住:方便和安全往往是矛盾的。图方便开放所有权限,迟早出事。


有问题评论区聊。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:13:14

农业大棚环境播报:农民随时掌握温湿度变化情况

农业大棚环境播报&#xff1a;农民随时掌握温湿度变化情况 在广袤的农村田野间&#xff0c;许多农户仍依靠经验判断大棚内的温湿度是否适宜。一位老农蹲在田头&#xff0c;眯着眼看温度计&#xff0c;再用手捻一捻土壤——这是延续了几十年的传统方式。然而&#xff0c;当物联…

作者头像 李华
网站建设 2026/4/13 3:53:52

微PE官网工具箱能否运行VoxCPM-1.5-TTS?轻量级系统适配探讨

微PE官网工具箱能否运行VoxCPM-1.5-TTS&#xff1f;轻量级系统适配探讨 在AI语音合成技术日益普及的今天&#xff0c;越来越多开发者开始尝试将TTS&#xff08;文本转语音&#xff09;模型部署到各类边缘设备中。从智能音箱到车载系统&#xff0c;再到嵌入式维护工具——人们不…

作者头像 李华
网站建设 2026/5/1 7:58:24

基于VoxCPM-1.5-TTS-WEB-UI的教育类语音应用开发实践

基于VoxCPM-1.5-TTS-WEB-UI的教育类语音应用开发实践 在一所偏远山区的小学课堂上&#xff0c;一位老师正为视障学生逐字朗读科学课本。教室安静&#xff0c;只有她的声音回荡。这样的场景每天都在发生&#xff0c;但人力有限&#xff0c;重复性工作难以持续。如果有一套系统&a…

作者头像 李华
网站建设 2026/5/1 7:58:15

Jupyter Notebook中运行VoxCPM-1.5-TTS-WEB-UI的技巧与注意事项

Jupyter Notebook中运行VoxCPM-1.5-TTS-WEB-UI的技巧与注意事项 在AI语音技术飞速发展的今天&#xff0c;越来越多开发者和研究者希望快速体验前沿文本转语音&#xff08;TTS&#xff09;模型的能力。然而&#xff0c;面对复杂的依赖环境、庞大的模型体积以及晦涩的API调用流程…

作者头像 李华
网站建设 2026/5/1 6:00:57

基于HuggingFace镜像网站快速拉取VoxCPM-1.5-TTS模型的方法

基于HuggingFace镜像网站快速拉取VoxCPM-1.5-TTS模型的方法 在语音合成技术日益普及的今天&#xff0c;越来越多的应用场景——从智能客服到虚拟主播、有声读物乃至个性化AI助手——都对“自然如真人”的语音输出提出了更高要求。然而&#xff0c;当开发者真正着手部署一个高质…

作者头像 李华
网站建设 2026/5/1 1:41:38

VoxCPM-1.5-TTS模型支持高精度声音克隆的技术原理揭秘

VoxCPM-1.5-TTS模型支持高精度声音克隆的技术原理揭秘 在虚拟主播24小时直播带货、AI亲人语音抚慰失独老人情感、影视后期一天生成百条角色对白的今天&#xff0c;我们早已越过“能不能说话”的基础阶段&#xff0c;进入“像不像你”的深度拟人时代。而这场变革的核心引擎&…

作者头像 李华