MySQL 8 开启远程登录

前言

在日常开发和运维工作中,我们经常需要从远程客户端连接MySQL数据库。MySQL 8默认出于安全考虑,只允许本地连接。本文将详细介绍如何安全地开启MySQL 8的远程访问功能。

环境信息

  • MySQL版本:8.0.44-0ubuntu0.24.04.1
  • 系统:Ubuntu 24.04

完整步骤

1. 登录MySQL服务器

bash 复制代码
mysql -u root -p

2. 处理密码策略问题(如遇报错)

在创建远程用户时,可能会遇到密码策略限制:

sql 复制代码
-- 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 如果密码过于简单,可临时降低策略等级
SET GLOBAL validate_password.policy = LOW;

注意:生产环境建议保持强密码策略,使用复杂密码。

3. 创建远程访问用户

sql 复制代码
-- 创建允许任意主机连接的root用户(生产环境不推荐)
CREATE USER 'root'@'%' IDENTIFIED BY '你的安全密码';

-- 更安全的做法:创建专用远程用户
CREATE USER 'remote_user'@'%' IDENTIFIED BY '强密码';

4. 授予权限

sql 复制代码
-- 授予所有权限(根据实际需要调整)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

-- 或者授予特定权限(推荐)
GRANT SELECT, INSERT, UPDATE, DELETE ON 数据库名.* TO 'remote_user'@'%';

5. 刷新权限

sql 复制代码
FLUSH PRIVILEGES;

6. 退出MySQL

sql 复制代码
EXIT;

配置MySQL允许远程连接

修改MySQL配置文件

bash 复制代码
# 编辑MySQL配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到bind-address配置项并修改:

ini 复制代码
# 将127.0.0.1改为0.0.0.0或注释掉
bind-address = 0.0.0.0
# 或直接注释
# bind-address = 127.0.0.1

重启MySQL服务

bash 复制代码
sudo systemctl restart mysql
# 或
sudo service mysql restart

防火墙配置

如果系统启用了防火墙,需要开放3306端口:

bash 复制代码
# UFW防火墙(Ubuntu)
sudo ufw allow 3306

# firewalld(CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

安全建议

1. 使用专用用户而非root

sql 复制代码
-- 创建专用远程用户
CREATE USER 'db_remote'@'%' IDENTIFIED BY '复杂密码123!@#';

-- 按需授权
GRANT SELECT, INSERT, UPDATE ON 特定数据库.* TO 'db_remote'@'%';

2. 限制访问IP

sql 复制代码
-- 只允许特定IP段访问
CREATE USER 'secure_user'@'192.168.1.%' IDENTIFIED BY '密码';

3. 恢复密码策略

sql 复制代码
-- 操作完成后恢复密码策略
SET GLOBAL validate_password.policy = MEDIUM;

4. 定期检查用户权限

sql 复制代码
-- 查看用户权限
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR '用户名'@'%';

测试远程连接

从远程客户端测试连接:

bash 复制代码
mysql -h 服务器IP -u 用户名 -p

故障排除

常见问题及解决方案

  1. 连接被拒绝

    • 检查防火墙设置
    • 确认MySQL绑定地址配置
    • 验证用户主机权限
  2. 权限错误

    • 确认用户有远程访问权限
    • 检查GRANT语句是否正确执行
  3. 密码策略问题

    • 使用更复杂的密码
    • 适当调整密码策略等级

总结

开启MySQL远程访问需要综合考虑安全性和便利性。建议遵循最小权限原则,为不同的使用场景创建专用用户,并定期审计权限设置。

记得在生产环境中操作前进行充分测试,并做好相应的安全防护措施。


温馨提示:本文中的操作示例仅供参考,请根据实际环境调整配置。重要的生产环境操作前请务必备份数据。

相关推荐
Lethehong5 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码6 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
cspttty6 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
roman_日积跬步-终至千里7 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析
猫咪很可爱8 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy8 小时前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒8 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss2739 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_180079052479 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
搞AI的金鱼9 小时前
skill agent workflow的区别
数据库