阿里云linux服务器安装mysql并实现远程访问

在阿里云 Linux 服务器(通常指 ECS 或轻量应用服务器,系统多为 CentOS 7/8, Ubuntu 20.04/22.04, Debian 10/11)上安装 MySQL 并开启远程访问,主要分为 5个关键步骤。

⚠️ 核心注意 :很多人无法远程连接,不是因为没装好,而是因为 防火墙 或 安全组 没放行。请务必按顺序检查。


📋 准备工作

  1. 登录阿里云控制台,确保你的服务器实例处于 "运行中" 状态。
  2. 获取服务器的 公网 IP地址。
  3. 通过 SSH 工具(如 Xshell, PuTTY, Terminal)连接到服务器。

第一步:安装 MySQL Server

不同 Linux 发行版的命令略有不同,请根据你的系统选择:

✅ 场景 A:Ubuntu / Debian
复制代码
# 更新源
sudo apt update

# 安装 MySQL Server (交互式设置root密码)
sudo apt install mysql-server -y

# 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
✅ 场景 B:CentOS 7 / 8 / Rocky Linux (使用 MariaDB 或 MySQL 8.0)

注:CentOS 默认仓库通常是 MariaDB,若必须用 Oracle MySQL 需添加官方源。以下以通用 MySQL 8.0 为例(需先配置 yum 源):

复制代码
# 1. 安装 MySQL Yum Repository (以 CentOS 8 为例)
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm

# 2. 安装 MySQL Server
sudo dnf install mysql-server -y

# 3. 启动服务
sudo systemctl start mysqld
sudo systemctl enable mysqld

第二步:初始化安全设置 & 设置 Root 密码

安装完成后,MySQL 默认可能没有密码或密码已生成。

对于 Ubuntu/Debian:
复制代码
# 进入 MySQL 命令行
sudo mysql

# 在 MySQL 提示符下执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';
FLUSH PRIVILEGES;
exit;
对于 CentOS/RHEL (MySQL 8.0):
复制代码
# 1. 查找临时密码
sudo grep 'temporary password' /var/log/mysqld.log

# 2. 运行安全脚本
sudo mysql_secure_installation

# 按照提示操作:
# - 输入刚才找到的临时密码
# - 修改 root 密码 (务必设置复杂密码)
# - 移除匿名用户? Y
# - 禁止 root 远程登录? N (因为我们要开启远程!)
# - 移除 test 数据库? Y
# - 重新加载权限表? Y

第三步:创建允许远程访问的用户 (最关键步骤)

MySQL 默认只允许 localhost 本地连接。我们需要创建一个新用户或修改 root 用户以允许任意 IP (%) 访问。

  1. 登录 MySQL:

    复制代码
    sudo mysql -u root -p
  2. 执行 SQL 语句:

    方案一:修改 root 用户允许所有 IP 访问 (简单但不推荐生产环境)

    复制代码
    -- MySQL 8.0+ 语法
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
    UPDATE user SET Host='%' WHERE User='root';
    FLUSH PRIVILEGES;
    
    -- 如果上面报错,尝试直接创建新用户
    CREATE USER 'admin'@'%' IDENTIFIED BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    方案二:创建专用远程用户 (推荐)

    复制代码
    -- 创建用户 'myuser',密码 'mypassword',允许从任何主机连接
    CREATE USER 'myuser'@'%' IDENTIFIED BY 'MyStrongPassword123!';
    
    -- 授予所有权限 (或者指定特定数据库)
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%';
    
    -- 刷新权限
    FLUSH PRIVILEGES;
    
    -- 退出
    exit;

第四步:配置 MySQL 监听外部接口

默认情况下,MySQL 可能只监听 127.0.0.1。需要修改配置文件使其监听 0.0.0.0。

  1. 编辑配置文件:

    复制代码
    # Ubuntu/Debian
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
    # CentOS
    sudo nano /etc/my.cnf
    # 或者
    sudo nano /etc/mysql/my.cnf
  2. 找到 bind-address 行:

    复制代码
    [mysqld]
    # bind-address = 127.0.0.1   <-- 注释掉这一行
    bind-address = 0.0.0.0       <-- 或者改成这一行
  3. 保存并重启 MySQL 服务:

    复制代码
    sudo systemctl restart mysql   # Ubuntu
    sudo systemctl restart mysqld  # CentOS
  4. 验证监听状态:

    复制代码
    netstat -tlnp | grep 3306
    # 应该看到 0.0.0.0:3306 而不是 127.0.0.1:3306

第五步:放行防火墙与安全组 (90% 的人卡在这里!)

你需要打通 两道门:Linux 内部防火墙 + 阿里云控制台安全组。

1. 放行 Linux 内部防火墙

如果是 Ubuntu/Debian (UFW):

复制代码
sudo ufw allow 3306/tcp
sudo ufw reload

如果是 CentOS/RHEL (Firewalld):

复制代码
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2. 放行阿里云"安全组" (必须做!)

这是阿里云特有的网络隔离机制,即使 Linux 防火墙开了,云厂商层面也会拦截。

  1. 登录 阿里云控制台。
  2. 进入 ECS 实例列表 -> 点击你的实例 ID。
  3. 点击下方的 "安全组" 标签页 -> 点击安全组 ID 进入详情。
  4. 点击 "手动添加" 规则。
  5. 填写如下信息:
    • 方向:入方向
    • 优先级:1
    • 协议类型:自定义 TCP
    • 端口范围 :3306/3306
    • 授权对象 :0.0.0.0/0 (表示允许所有 IP,生产环境建议改为你的固定 IP xxx.xxx.xxx.xxx/32)
    • 描述:MySQL Remote Access
  6. 点击 确定。

🧪 第六步:测试远程连接

在你的 本地电脑 (Windows/Mac) 上安装一个 MySQL 客户端(如 Navicat, DBeaver, 或命令行 mysql)。

尝试连接:

  • Host/IP: 你的阿里云公网 IP
  • Port: 3306
  • User : 你创建的远程用户 (如 myuser 或 root)
  • Password: 你设置的密码

✅ 成功标志:显示 "Connection Successful"。

❌ 失败排查清单:

  1. 密码是否正确?(注意大小写)
  2. 用户是否创建了 'user'@'%'?(不能是 'user'@'localhost')
  3. 阿里云安全组是否添加了 3306 端口?
  4. Linux 防火墙是否放行了 3306?
  5. bind-address 是否改成了 0.0.0.0?
  6. 是否重启了 MySQL 服务?

🔒 安全建议 (生产环境必看)

  1. 不要暴露 root 用户:永远不要用 root 账号远程连接,创建一个权限受限的普通用户。
  2. 限制来源 IP :在阿里云安全组中,将 0.0.0.0/0 改为你的家庭/公司固定 IP,防止被暴力破解。
  3. 修改默认端口:可以将 3306 改为其他端口(如 33060),减少自动化扫描攻击。
  4. 启用 SSL:如果通过互联网传输数据,建议在 MySQL 配置中启用 SSL 加密连接。
相关推荐
wuminyu1 小时前
JVM虚拟线程的底层实现原理分析
java·linux·c语言·jvm·c++
M78佐菲1 小时前
ARM学习笔记(9)
linux·arm开发·笔记·嵌入式硬件·学习
赵民勇1 小时前
glib-compile-schemas命令详解
linux·运维
小小、码农1 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
大侠归来2 小时前
cJSON 源码解析:parse_string 函数深入剖析
linux·网络·算法
小小、码农2 小时前
〖Linux进程间通信〗IPC全家桶:匿名管道、FIFO、共享内存、消息队列与信号量一篇打通
linux·运维·服务器
阳光九叶草LXGZXJ2 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
掉进电商坑三年没爬出来的东叔2 小时前
2026最新:青龙面板搭建全自动薅羊毛脚本,云服务器24小时挂机教程
运维·服务器·pygame
ha_lydms2 小时前
MaxCompute中JSON函数
大数据·数据库·阿里云·json·dataworks·maxcompute·odps