news 2026/4/27 2:12:20

MySQL 远程访问实战:从基础操作到真实踩坑记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 远程访问实战:从基础操作到真实踩坑记录

MySQL 远程访问实战:从基础操作到真实踩坑记录

本文记录了一次完整的 MySQL 远程连接踩坑过程,涵盖基础命令行操作、认证插件报错、IP 被拉黑等问题及解决方案。


一、MySQL 基础命令行操作

1.1 登录与退出

# 本地登录(默认走 localhost)mysql-uroot-p# 指定 IP 登录(走网络连接)mysql-h192.168.1.100-uroot-p# 指定端口mysql-h192.168.1.100-P3306-uroot-p# 退出exit;-- 或 quit;

1.2 用户管理

-- 查看所有用户SELECTUser,Host,pluginFROMmysql.user;-- 创建本地用户CREATEUSER'alice'@'localhost'IDENTIFIEDBY'密码';-- 创建远程用户(允许任意 IP)CREATEUSER'bob'@'%'IDENTIFIEDBY'密码';-- 创建远程用户(只允许特定 IP)CREATEUSER'charlie'@'192.168.1.50'IDENTIFIEDBY'密码';-- 修改密码ALTERUSER'bob'@'%'IDENTIFIEDBY'新密码';-- 删除用户DROPUSER'bob'@'%';-- 刷新权限(修改后必须执行)FLUSHPRIVILEGES;

1.3 权限管理

-- 授予所有权限GRANTALLPRIVILEGESON*.*TO'bob'@'%';-- 授予特定数据库权限GRANTALLPRIVILEGESONmydb.*TO'bob'@'%';-- 授予只读权限GRANTSELECTONmydb.*TO'readonly'@'%';-- 撤销权限REVOKEALLPRIVILEGESON*.*FROM'bob'@'%';-- 查看用户权限SHOWGRANTSFOR'bob'@'%';

1.4 数据库与表操作

-- 创建数据库CREATEDATABASEmydbCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 查看所有数据库SHOWDATABASES;-- 切换数据库USEmydb;-- 创建表CREATETABLEusers(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50)NOTNULL,emailVARCHAR(100)UNIQUE,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);-- 查看表结构DESCusers;-- 或SHOWCREATETABLEusers;-- 插入数据INSERTINTOusers(name,email)VALUES('张三','zhangsan@example.com');-- 查询SELECT*FROMusersWHEREnameLIKE'%张%';-- 更新UPDATEusersSETemail='new@example.com'WHEREid=1;-- 删除DELETEFROMusersWHEREid=1;

1.5 服务管理(Linux)

# 启动sudosystemctl start mysql# 停止sudosystemctl stop mysql# 重启sudosystemctl restart mysql# 查看状态sudosystemctl status mysql

二、远程访问配置

2.1 服务端配置

编辑 MySQL 配置文件:

  • Linux:/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf
  • Windows:my.ini
# 允许所有网卡监听(默认 127.0.0.1 只监听本地) bind-address = 0.0.0.0 # 或注释掉该行 # bind-address = 127.0.0.1

重启生效:

sudosystemctl restart mysql

2.2 防火墙放行

# UFW (Ubuntu/Debian)sudoufw allow3306/tcp# firewalld (CentOS/RHEL)sudofirewall-cmd--permanent--add-port=3306/tcpsudofirewall-cmd--reload# 云服务器还需在安全组中放行 3306 端口

2.3 用户授权

-- 创建远程专用用户(推荐)CREATEUSER'remote_user'@'%'IDENTIFIEDBY'强密码';GRANTALLPRIVILEGESONmydb.*TO'remote_user'@'%';FLUSHPRIVILEGES;

三、踩坑实录:认证插件与 IP 拉黑

3.1 环境背景

  • 服务端: MySQL 8.0(Linux 服务器)
  • 客户端: Windows C++ 程序,使用较老的 MySQL C API 库
  • 连接方式:mysql_real_connect(conn, "10.136.11.246", "root", ...)

3.2 第一坑:IP 被拉黑

报错信息:

mysql_real_connect failed: Host '10.136.26.183' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

原因分析:
MySQL 有安全机制,当某个 IP 连续多次连接失败(默认阈值 100 次),会自动将该 IP 加入黑名单,防止暴力破解。

解决方法:

# 服务端执行,清空黑名单mysqladmin flush-hosts

或登录 MySQL 后:

FLUSH HOSTS;

3.3 第二坑:认证插件不兼容

报错信息:

mysql_real_connect failed: Authentication plugin 'caching_sha2_password' cannot be loaded: 找不到指定的模块。

原因分析:
MySQL 8.0 默认使用caching_sha2_password认证插件,但客户端(C++ 的 MySQL 库)版本太老,不支持这个插件。

根本区别:

MySQL 版本默认认证插件兼容性
5.7 及以前mysql_native_password老客户端都支持
8.0+caching_sha2_password需要新版客户端库

3.4 第三坑:ALTER USER 报错

报错信息:

ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'10.136.11.246'

原因分析:
MySQL 的用户是用户名 + Host的组合。查询发现系统中只有:

SELECTUser,HostFROMmysql.user;

结果:

+------+-----------+ | User | Host | +------+-----------+ | root | % | | root | localhost | +------+-----------+

'root'@'10.136.11.246'这个用户根本不存在!

MySQL 用户匹配规则:

Host 值含义
localhost只允许本机 socket 连接
127.0.0.1只允许本机 TCP 连接
192.168.1.%允许该网段
10.136.11.246只允许该特定 IP
%允许任意 IP(最宽松)

注意localhost10.136.11.246

  • localhost127.0.0.1,不经过网卡
  • 10.136.11.246是服务器的实际网卡 IP,走网络协议

四、完整解决过程

步骤 1:确认现有用户

SELECTUser,Host,pluginFROMmysql.userWHEREUser='root';

确认有'root'@'%'存在。

步骤 2:修改认证插件(服务端执行)

-- 修改已存在的 'root'@'%' 用户ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'你的密码';FLUSHPRIVILEGES;

步骤 3:验证修改结果

SELECTUser,Host,pluginFROMmysql.userWHEREUser='root';

确认'root'@'%'plugin变为mysql_native_password

步骤 4:清空 IP 黑名单

FLUSH HOSTS;

步骤 5:客户端连接测试

C++ 代码:

#include<mysql.h>MYSQL*conn=mysql_init(nullptr);if(!mysql_real_connect(conn,"10.136.11.246",// 服务器 IP"root",// 用户名"你的密码",// 密码"数据库名",// 数据库3306,// 端口nullptr,0)){printf("连接失败: %s\n",mysql_error(conn));}else{printf("连接成功!\n");}mysql_close(conn);

五、其他解决方案对比

方案 A:改服务端认证方式(本文采用)

优点:客户端不用改,快速解决
缺点:安全性略降,新特性无法使用

-- 改单个用户ALTERUSER'user'@'%'IDENTIFIEDWITHmysql_native_passwordBY'密码';-- 或改全局默认(my.cnf)[mysqld]default_authentication_plugin=mysql_native_password

方案 B:升级客户端库(推荐长期方案)

优点:支持最新特性,更安全
缺点:需要重新编译项目

  • 下载MySQL Connector/C++ 8.0+: https://dev.mysql.com/downloads/connector/cpp/
  • 或更新 C API 的libmysql.dll到 8.0 版本

方案 C:使用 SSH 隧道(最安全)

# 本地建立隧道,把远程 3306 映射到本地 3307ssh-L3307:localhost:3306 user@服务器IP# 然后 C++ 连接本地 3307,实际走的是加密 SSHmysql_real_connect(conn,"127.0.0.1","root",...,3307,...);

优点:不暴露 3306 端口,全程加密
缺点:需要额外配置 SSH


六、安全建议

  1. 不要用 root 远程访问:创建专用账号,最小权限原则
  2. 限制 Host 范围:能用192.168.1.%就不要用%
  3. 强密码 + SSL:生产环境必须配置 SSL 连接
  4. 修改默认端口:将 3306 改为其他端口,减少扫描
  5. fail2ban:自动封禁暴力破解 IP

七、常用排查命令速查

-- 查看当前连接SHOWPROCESSLIST;-- 查看连接错误阈值SHOWVARIABLESLIKE'max_connect_errors';-- 修改阈值(临时)SETGLOBALmax_connect_errors=1000;-- 查看用户认证方式SELECTUser,Host,plugin,authentication_stringFROMmysql.user;-- 查看被拉黑的 IP(performance_schema 需开启)SELECT*FROMperformance_schema.host_cacheWHERESUM_CONNECT_ERRORS>0;

总结

问题现象解决
IP 被拉黑Host is blockedFLUSH HOSTS;
认证插件不支持caching_sha2_password cannot be loadedmysql_native_password或升级客户端
用户不存在Operation ALTER USER failedSELECT查用户,确认 Host 正确
localhost vs IP连接方式不同,匹配的用户不同明确用%还是具体 IP

核心教训:MySQL 的用户是用户名@Host的组合,修改前务必先查清楚!


本文基于 MySQL 8.0 + Windows C++ 客户端的真实踩坑经历整理。

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

使用yubikey-agent实现硬件级SSH密钥安全管理与无缝认证

1. 项目概述&#xff1a;为什么你需要一个硬件密钥管理代理 如果你是一名开发者&#xff0c;或者日常工作中需要频繁使用SSH密钥访问远程服务器、Git仓库&#xff0c;那么你一定对管理那一堆 id_rsa 、 id_ed25519 私钥文件感到头疼。它们要么躺在 ~/.ssh 目录里&#x…

作者头像 李华
网站建设 2026/4/27 2:10:01

医疗电子设备核心技术:信号处理与低功耗设计

1. 医疗电子设备的核心技术解析医疗电子设备的核心在于精准的信号采集与处理&#xff0c;这依赖于高性能的模拟前端和数字信号处理技术。作为一名在医疗电子领域工作多年的工程师&#xff0c;我见证了从传统分立式设计到现代高度集成方案的演变过程。医疗设备对信号链的要求极为…

作者头像 李华
网站建设 2026/4/27 2:09:57

机器学习商业化:技术变现路径与实战经验

1. 项目概述"Machine Learning for Money"这个标题直击当下最热门的两个领域交汇点&#xff1a;机器学习技术与商业变现。作为一名在数据科学和金融科技交叉领域工作多年的从业者&#xff0c;我见证过太多优秀的机器学习模型因为缺乏合理的商业逻辑而束之高阁&#x…

作者头像 李华
网站建设 2026/4/27 2:03:37

Python统计假设检验速查指南与实战技巧

## 1. 统计假设检验的核心价值与应用场景假设检验是数据分析师和研究人员最常使用的统计工具之一。在Python生态中&#xff0c;借助SciPy、StatsModels等库&#xff0c;我们可以快速实现各类统计检验。这个"17种统计检验速查表"的价值在于&#xff1a;当面对不同数据…

作者头像 李华
网站建设 2026/4/27 2:02:37

如何快速搭建个人哔咔漫画离线图书馆:picacomic-downloader完整指南

如何快速搭建个人哔咔漫画离线图书馆&#xff1a;picacomic-downloader完整指南 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器&#xff0c;带图形界面 带收藏夹&#xff0c;已打包exe 下载速度飞快 项目地址: https://gi…

作者头像 李华
网站建设 2026/4/27 2:00:33

Photoshop PS 2026保姆级详细安装教程(附安装包)

前言 在当今数字创意领域&#xff0c;Photoshop作为行业标准的图像处理软件&#xff0c;掌握它的安装与使用已成为设计师、摄影师及创意工作者的必备技能。本文为您提供Photoshop 2026最新版本的详细安装指南&#xff0c;无论您是初学者还是需要更新软件的专业人士&#xff0c…

作者头像 李华