学习目标:
- 学习
在实际开发和运维中,远程登录 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 通
二、实验核心目标
- 配置 MySQL 服务器,允许客户端通过 IP 地址远程登录;
- 在客户端通过命令行 / 图形化工具,成功连接远程 MySQL 服务器;
- 验证远程连接的可用性(执行查询、插入等基础操作)。
三、实验前置准备
- 服务器端已安装 MySQL 并正常启动(通过
systemctl status mysqld确认状态为active); - 客户端已安装 MySQL 客户端(命令行工具或 Navicat、SQLyog 等图形化工具);
- 关闭服务器端 SELinux(避免权限拦截,执行
setenforce 0临时关闭,永久关闭需修改配置文件)。
四、实验步骤(分服务器端 + 客户端)
第一部分:服务器端配置(关键!决定能否远程连接)
步骤 1:本地登录 MySQL,创建远程登录用户并授权
MySQL 默认仅允许 localhost 登录,需手动创建支持 IP 访问的用户并赋予权限:
-
登录服务器本地 MySQL: bash
mysql -u root -p # 输入 root 密码登录 -
创建远程用户(用户名:
remote_test,允许客户端 IP192.168.1.200访问):sql
-- 格式:CREATE USER '用户名'@'客户端IP' IDENTIFIED BY '密码'; CREATE USER 'remote_test'@'192.168.1.200' IDENTIFIED BY 'Test@123456'; -- 强密码要求 -
赋予用户对目标数据库的权限(以
test_db为例,赋予查询、插入、更新权限):sql
-- 格式:GRANT 权限 ON 数据库.表 TO '用户名'@'客户端IP'; GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'remote_test'@'192.168.1.200'; FLUSH PRIVILEGES; -- 刷新权限,立即生效 -
验证用户配置是否生效: sql
SELECT Host, User FROM mysql.user WHERE User = 'remote_test';输出结果中
Host应为192.168.1.200,说明用户配置成功。
步骤 2:放行 MySQL 端口(3306)
服务器防火墙需允许客户端访问 MySQL 默认端口 3306:
-
执行防火墙配置命令(CentOS 7 用 firewalld): bash
# 放行 3306 端口(永久生效) firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重新加载防火墙规则 firewall-cmd --reload -
验证端口是否放行成功: bash
firewall-cmd --zone=public --query-port=3306/tcp输出
yes表示放行成功。
步骤 3:确认 MySQL 服务监听地址
确保 MySQL 服务监听所有网卡(而非仅本地回环地址 127.0.0.1):
-
编辑 MySQL 配置文件
my.cnf(路径:/etc/my.cnf):bash
vi /etc/my.cnf -
检查是否有
bind-address配置,若有则改为0.0.0.0(允许所有 IP 访问),无则新增:ini
bind-address = 0.0.0.0 -
重启 MySQL 服务使配置生效: bash
systemctl restart mysqld
第二部分:客户端连接操作(两种方式,按需选择)
方式 1:命令行连接(最基础,无额外工具依赖)
-
打开 Windows 命令提示符(CMD)或 PowerShell;
-
输入远程连接命令(替换服务器 IP、用户名): bash
# 格式:mysql -h 服务器IP -u 远程用户名 -p mysql -h 192.168.1.100 -u remote_test -p -
输入密码
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>
方式 2:图形化工具连接(以 Navicat 为例,直观易用)
- 打开 Navicat,点击 "连接"→"MySQL";
- 在弹出的配置窗口中填写信息:
- 连接名:自定义(如 "远程 MySQL 连接");
- 主机:
192.168.1.100(服务器 IP); - 端口:
3306(默认端口,未修改则无需改); - 用户名:
remote_test; - 密码:
Test@123456;
- 点击 "测试连接",若提示 "连接成功",则配置无误;点击 "确定" 完成连接。
五、实验结果验证
连接成功后,执行以下操作验证可用性:
-
命令行 / Navicat 中切换到
test_db数据库:sql
USE test_db; -
执行查询操作(假设
user表已存在):sql
SELECT * FROM user LIMIT 10; -
执行插入操作: 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.cnf中bind-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 地址远程登录。核心要点如下:
- 远程用户的
Host需精准匹配客户端 IP(或用%允许所有 IP,适合测试场景); - 防火墙放行 3306 端口是跨机器连接的前提;
- 强密码策略和最小权限授权是远程登录的安全基础。
八、拓展建议
- 生产环境中,避免用
%开放所有 IP 访问,优先限制具体客户端 IP 或 IP 段; - 若需公网远程登录,建议修改 MySQL 默认端口(如改为 3307),并配合防火墙加强防护;
- 定期更换远程用户密码,避免权限泄露。
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
2. Navicat 连接配置
| 配置项 | 填写内容 |
|---|---|
| 连接名 | 远程 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遍
- 有错误请指出,作者会及时改正



