MySQL 远程登录实验:通过 IP 地址跨机器连接实战指南

学习目标:

  • 学习

在实际开发和运维中,远程登录 MySQL 是高频操作,而通过 IP 地址直接连接是最基础、最常用的方式。本文将以 "实验" 为核心,从环境准备、实验步骤、结果验证到问题排查,带您手把手完成 MySQL IP 远程登录全流程,兼顾新手友好性和实操性。

一、实验环境说明

明确实验涉及的软硬件环境,避免因环境差异导致操作失败:

  • 服务器端 :CentOS 7 操作系统 + MySQL 5.7(部署在云服务器 / 本地虚拟机,IP 地址:192.168.1.100
  • 客户端 :Windows 10 操作系统 + MySQL 8.0 客户端(本地电脑,IP 地址:192.168.1.200
  • 网络要求:服务器与客户端处于同一局域网(或服务器开放公网访问权限),能相互 ping 通

二、实验核心目标

  1. 配置 MySQL 服务器,允许客户端通过 IP 地址远程登录;
  2. 在客户端通过命令行 / 图形化工具,成功连接远程 MySQL 服务器;
  3. 验证远程连接的可用性(执行查询、插入等基础操作)。

三、实验前置准备

  1. 服务器端已安装 MySQL 并正常启动(通过 systemctl status mysqld 确认状态为 active);
  2. 客户端已安装 MySQL 客户端(命令行工具或 Navicat、SQLyog 等图形化工具);
  3. 关闭服务器端 SELinux(避免权限拦截,执行 setenforce 0 临时关闭,永久关闭需修改配置文件)。

四、实验步骤(分服务器端 + 客户端)

第一部分:服务器端配置(关键!决定能否远程连接)

步骤 1:本地登录 MySQL,创建远程登录用户并授权

MySQL 默认仅允许 localhost 登录,需手动创建支持 IP 访问的用户并赋予权限:

  1. 登录服务器本地 MySQL: bash

    复制代码
    mysql -u root -p  # 输入 root 密码登录
  2. 创建远程用户(用户名:remote_test,允许客户端 IP 192.168.1.200 访问):

    sql

    复制代码
    -- 格式:CREATE USER '用户名'@'客户端IP' IDENTIFIED BY '密码';
    CREATE USER 'remote_test'@'192.168.1.200' IDENTIFIED BY 'Test@123456';  -- 强密码要求
  3. 赋予用户对目标数据库的权限(以 test_db 为例,赋予查询、插入、更新权限):

    sql

    复制代码
    -- 格式:GRANT 权限 ON 数据库.表 TO '用户名'@'客户端IP';
    GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'remote_test'@'192.168.1.200';
    FLUSH PRIVILEGES;  -- 刷新权限,立即生效
  4. 验证用户配置是否生效: sql

    复制代码
    SELECT Host, User FROM mysql.user WHERE User = 'remote_test';

    输出结果中 Host 应为 192.168.1.200,说明用户配置成功。

步骤 2:放行 MySQL 端口(3306)

服务器防火墙需允许客户端访问 MySQL 默认端口 3306

  1. 执行防火墙配置命令(CentOS 7 用 firewalld): bash

    复制代码
    # 放行 3306 端口(永久生效)
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    # 重新加载防火墙规则
    firewall-cmd --reload
  2. 验证端口是否放行成功: bash

    复制代码
    firewall-cmd --zone=public --query-port=3306/tcp

    输出 yes 表示放行成功。

步骤 3:确认 MySQL 服务监听地址

确保 MySQL 服务监听所有网卡(而非仅本地回环地址 127.0.0.1):

  1. 编辑 MySQL 配置文件 my.cnf(路径:/etc/my.cnf):

    bash

    复制代码
    vi /etc/my.cnf
  2. 检查是否有 bind-address 配置,若有则改为 0.0.0.0(允许所有 IP 访问),无则新增:

    ini

    复制代码
    bind-address = 0.0.0.0
  3. 重启 MySQL 服务使配置生效: bash

    复制代码
    systemctl restart mysqld

第二部分:客户端连接操作(两种方式,按需选择)

方式 1:命令行连接(最基础,无额外工具依赖)
  1. 打开 Windows 命令提示符(CMD)或 PowerShell;

  2. 输入远程连接命令(替换服务器 IP、用户名): bash

    复制代码
    # 格式:mysql -h 服务器IP -u 远程用户名 -p
    mysql -h 192.168.1.100 -u remote_test -p
  3. 输入密码 Test@123456,回车后若出现以下界面,说明连接成功:

    plaintext

    复制代码
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 10
    Server version: 5.7.40 MySQL Community Server (GPL)
    ...
    mysql>
  1. 打开 Navicat,点击 "连接"→"MySQL";
  2. 在弹出的配置窗口中填写信息:
    • 连接名:自定义(如 "远程 MySQL 连接");
    • 主机:192.168.1.100(服务器 IP);
    • 端口:3306(默认端口,未修改则无需改);
    • 用户名:remote_test
    • 密码:Test@123456
  3. 点击 "测试连接",若提示 "连接成功",则配置无误;点击 "确定" 完成连接。

五、实验结果验证

连接成功后,执行以下操作验证可用性:

  1. 命令行 / Navicat 中切换到 test_db 数据库:

    sql

    复制代码
    USE test_db;
  2. 执行查询操作(假设 user 表已存在):

    sql

    复制代码
    SELECT * FROM user LIMIT 10;
  3. 执行插入操作: sql

    复制代码
    INSERT INTO user (name, age) VALUES ('远程测试用户', 25);

若查询能返回结果、插入无报错,且在服务器端本地查询能看到新增数据,说明远程连接完全可用。

六、实验常见问题排查

问题 1:客户端报错 Host '192.168.1.200' is not allowed to connect to this MySQL server

  • 原因:远程用户的 Host 配置未包含客户端 IP,或权限未刷新;
  • 解决:服务器端执行 UPDATE mysql.user SET Host = '192.168.1.200' WHERE User = 'remote_test';,再执行 FLUSH PRIVILEGES;

问题 2:客户端报错 Can't connect to MySQL server on '192.168.1.100' (10060)

  • 原因:服务器防火墙未放行 3306 端口,或 MySQL 服务未监听 0.0.0.0
  • 解决:重新执行防火墙放行命令,检查 my.cnfbind-address 配置,重启 MySQL 服务。

问题 3:客户端报错 Access denied for user 'remote_test'@'192.168.1.200' (using password: YES)

  • 原因:密码错误,或 MySQL 密码策略限制(弱密码被拒绝);
  • 解决:核对密码大小写,若密码不符合策略(如长度不足 8 位),服务器端执行 ALTER USER 'remote_test'@'192.168.1.200' IDENTIFIED BY 'Strong@123'; 修改强密码。

七、实验总结

本次实验通过 "服务器端配置(用户授权 + 端口放行 + 监听配置)→ 客户端连接 → 功能验证" 的流程,成功实现了 MySQL IP 地址远程登录。核心要点如下:

  1. 远程用户的 Host 需精准匹配客户端 IP(或用 % 允许所有 IP,适合测试场景);
  2. 防火墙放行 3306 端口是跨机器连接的前提;
  3. 强密码策略和最小权限授权是远程登录的安全基础。

八、拓展建议

  1. 生产环境中,避免用 % 开放所有 IP 访问,优先限制具体客户端 IP 或 IP 段;
  2. 若需公网远程登录,建议修改 MySQL 默认端口(如改为 3307),并配合防火墙加强防护;
  3. 定期更换远程用户密码,避免权限泄露。

MySQL IP 远程登录实验操作速查清单

一、服务器端核心配置命令(CentOS 7 + MySQL 5.7)

1. 远程用户创建与授权

sql

复制代码
-- 创建允许指定IP(192.168.1.200)访问的用户
CREATE USER 'remote_test'@'192.168.1.200' IDENTIFIED BY 'Test@123456';
-- 赋予test_db库查询/插入/更新权限
GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'remote_test'@'192.168.1.200';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证用户配置
SELECT Host, User FROM mysql.user WHERE User = 'remote_test';

2. 防火墙端口放行

bash

复制代码
# 永久放行3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重载防火墙规则
firewall-cmd --reload
# 验证端口放行状态(输出yes则成功)
firewall-cmd --zone=public --query-port=3306/tcp

3. MySQL 监听配置

bash

复制代码
# 编辑配置文件
vi /etc/my.cnf
# 新增/修改监听地址(允许所有IP访问)
bind-address = 0.0.0.0
# 重启MySQL服务
systemctl restart mysqld
# 验证服务状态(active则正常)
systemctl status mysqld

二、客户端连接操作(Windows 10)

1. 命令行连接

bash

复制代码
# 基础连接(默认3306端口)
mysql -h 192.168.1.100 -u remote_test -p
# 输入密码:Test@123456
配置项 填写内容
连接名 远程 MySQL 连接(自定义)
主机 192.168.1.100
端口 3306
用户名 remote_test
密码 Test@123456

三、常见问题排查对照表

报错信息 核心原因 解决方法
Host '192.168.1.200' is not allowed to connect... 用户 Host 未包含客户端 IP 或权限未刷新 UPDATE mysql.user SET Host='192.168.1.200' WHERE User='remote_test'; FLUSH PRIVILEGES;
Can't connect to MySQL server on '192.168.1.100' (10060) 防火墙未放行 3306 端口或监听配置错误 重新执行防火墙放行命令;检查 my.cnf 中 bind-address=0.0.0.0,重启 mysqld
Access denied for user 'remote_test'@'192.168.1.200'... 密码错误或密码策略不满足 核对密码大小写;执行 ALTER USER 'remote_test'@'192.168.1.200' IDENTIFIED BY 'Strong@123';

学习时间:

学习时间为学习时间

|-----------|------------|
| 学习时间 | 筋肉人 |
| 为学习时间 | future |

内容为笔记【有时比较抽象,有时比较过于详细,请宽恕。作者可能写的是仅个人笔记,筋肉人future


学习产出:

  • 技术笔记 1遍
  • 有错误请指出,作者会及时改正
相关推荐
此去正年少3 分钟前
编写adb脚本工具对Android设备上的闪退问题进行监控分析
android·adb·logcat·ndk·日志监控
落羽凉笙23 分钟前
Python基础(4)| 玩转循环结构:for、while与嵌套循环全解析(附源码)
android·开发语言·python
十幺卜入1 小时前
Unity3d C# 基于安卓真机调试日志抓取拓展包(Android Logcat)
android·c#·unity 安卓调试·unity 安卓模拟·unity排查问题
frontend_frank1 小时前
脱离 Electron autoUpdater:uni-app跨端更新:Windows+Android统一实现方案
android·前端·javascript·electron·uni-app
薛晓刚1 小时前
MySQL的replace使用分析
android·adb
DengDongQi2 小时前
Jetpack Compose 滚轮选择器
android
stevenzqzq2 小时前
Android Studio Logcat 基础认知
android·ide·android studio·日志
代码不停2 小时前
MySQL事务
android·数据库·mysql
朝花不迟暮2 小时前
使用Android Studio生成apk,卡在Running Gradle task ‘assembleDebug...解决方法
android·ide·android studio
yngsqq2 小时前
使用VS(.NET MAUI)开发第一个安卓APP
android·.net