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遍
  • 有错误请指出,作者会及时改正
相关推荐
一笑的小酒馆6 小时前
Android launcher3实现简单的负一屏功能
android
xuyin12046 小时前
【Android】Flow基础知识和使用
android
李新_8 小时前
基于Markwon封装Markdown组件
android·aigc·markdown
Non-existent98710 小时前
Flutter + FastAPI 30天速成计划自用并实践-第10天-组件化开发实践
android·flutter·fastapi
@老蝴11 小时前
MySQL数据库 - 约束和联合查询
android·数据库·mysql
ljt272496066112 小时前
Compose笔记(六十一)--SelectionContainer
android·笔记·android jetpack
有位神秘人13 小时前
Android中Compose系列之按钮Button
android
AI科技摆渡13 小时前
GPT-5.2介绍+ 三步对接教程
android·java·gpt
csdn122598733614 小时前
Android12 新启动页到底该怎么做
android·启动页
aaajj15 小时前
【Android】关于MY_PACKAGE_REPLACED广播
android