新购Linux云服务器后,如何在上面部署MySQL数据库?

在新购的 Linux 云服务器上部署 MySQL 数据库,推荐使用 MySQL 官方 APT/YUM 仓库安装(推荐) 或 Docker 方式(轻量灵活)。以下是详细、安全、生产就绪的部署指南(以 Ubuntu 22.04/24.04 或 CentOS 7/8/9 为例,优先以 Ubuntu 24.04 为主):


✅ 一、前期准备(所有系统必做)

  1. 登录服务器

    ssh -i your-key.pem ubuntu@your-server-ip  # Ubuntu 默认用户通常是 ubuntu
    # 或 root@...(若允许 root 登录)
  2. 更新系统 & 安装基础工具

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y curl wget gnupg2 lsb-release software-properties-common
    
    # CentOS/RHEL/Rocky/AlmaLinux
    sudo dnf update -y  # 或 yum update -y(CentOS 7)
    sudo dnf install -y curl wget gnupg2
  3. 配置防火墙(重要!)

    # Ubuntu (UFW)
    sudo ufw enable
    sudo ufw allow OpenSSH
    sudo ufw allow from your-ip to any port 3306  # ❗仅允许可信 IP 访问 MySQL 端口(生产环境强烈建议)
    # 或临时开放(测试用):sudo ufw allow 3306
    
    # CentOS (firewalld)
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --permanent --add-port=3306/tcp --source=YOUR_TRUSTED_IP/32  # 更安全
    sudo firewall-cmd --reload

✅ 二、部署 MySQL(推荐方式:官方仓库安装)

⚠️ 不建议 apt install mysql-server(Ubuntu 自带版本较旧且非 Oracle 官方维护),推荐使用 MySQL 官方 APT 仓库 获取最新稳定版(如 8.0.x / 8.4.x)。

▶ 步骤 1:添加 MySQL 官方 APT 仓库(Ubuntu/Debian)

# 下载并安装 MySQL APT 配置包(以 MySQL 8.4 为例,查看最新版:https://dev.mysql.com/downloads/repo/)
cd /tmp
curl -OL https://dev.mysql.com/get/mysql-apt-config_8.4.0-1ubuntu24.04_all.deb
sudo dpkg -i mysql-apt-config_8.4.0-1ubuntu24.04_all.deb
# ⚠️ 安装时会弹出交互界面 → 选择「OK」→ 选中「mysql-8.4」→ 再选「OK」
sudo apt update

▶ 步骤 2:安装 MySQL Server

sudo apt install -y mysql-server
# 安装过程会自动启动 mysqld 并生成 root 密码(见日志),但首次需运行安全脚本

▶ 步骤 3:运行安全初始化(关键!)

sudo mysql_secure_installation

按提示操作:

  • ✅ 设置 root 密码(推荐强密码,记录好!)
  • ✅ 移除匿名用户(Y)
  • ✅ 禁止 root 远程登录(Y)→ 保障安全,后续通过普通用户授权访问
  • ✅ 删除 test 数据库(Y)
  • ✅ 重新加载权限表(Y)

💡 提示:该命令会生成 /etc/mysql/debian.cnf(含 debian-sys-maint 账户),请勿删除,系统维护需要。

▶ 步骤 4:验证服务状态

sudo systemctl status mysql
# 应显示 active (running)

✅ 三、配置 MySQL(生产级优化)

1️⃣ 修改绑定地址(默认只监听 127.0.0.1,如需远程连接需调整)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到并修改:

# 注释或修改这一行(⚠️ 仅当明确需要远程访问时才放开,且必须配合防火墙限制 IP!)
bind-address = 127.0.0.1
# → 改为(如需监听所有 IPv4):
# bind-address = 0.0.0.0
# 或更安全:指定内网 IP(如 172.16.0.10)

保存后重启:

sudo systemctl restart mysql

2️⃣ 创建专用数据库与用户(✅ 最佳实践!禁止直接用 root 远程操作)

sudo mysql -u root -p

在 MySQL 命令行中执行:

-- 创建数据库(UTF8MB4 推荐)
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建专用用户(替换 'myuser' 和 'StrongPass123!')
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 若需从特定 IP 连接(如应用服务器):
-- CREATE USER 'myuser'@'192.168.1.100' IDENTIFIED BY 'StrongPass123!';

-- 授权(最小权限原则)
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'myuser'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

-- 退出
EXIT;

3️⃣ (可选)启用 MySQL 8 默认身份验证插件兼容性(避免客户端连接报错)

-- 如果应用使用旧版客户端(如某些 PHP PDO),可能需切换认证方式:
ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
FLUSH PRIVILEGES;

✅ 四、连接测试(本地 & 远程)

  • 本地连接测试:

    mysql -u myuser -p -D myapp
  • 远程连接测试(从你本地电脑):

    mysql -h your-server-ip -P 3306 -u myuser -p myapp

    ✅ 前提:云服务器安全组已放行 3306 端口 + 本地 IP 已加入防火墙白名单 + bind-address 已正确配置。


✅ 五、【备选方案】Docker 快速部署(适合测试/CI/轻量场景)

# 安装 Docker(如未安装)
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER && newgrp docker

# 启动 MySQL 8.4(数据持久化到宿主机)
sudo docker run -d 
  --name mysql-prod 
  -p 3306:3306 
  -e MYSQL_ROOT_PASSWORD=RootPass123! 
  -e MYSQL_DATABASE=myapp 
  -e MYSQL_USER=myuser 
  -e MYSQL_PASSWORD=MyUserPass123! 
  -v /opt/mysql/data:/var/lib/mysql 
  -v /opt/mysql/conf:/etc/mysql/conf.d 
  -v /opt/mysql/logs:/var/log/mysql 
  --restart=unless-stopped 
  -d mysql:8.4

# 查看日志确认启动成功
sudo docker logs mysql-prod

✅ 优势:隔离性强、升级方便、避免污染系统;
⚠️ 注意:生产环境需配置备份策略(mysqldump + 定时任务 或 Percona XtraBackup)。


✅ 六、重要后续操作(生产必备)

项目 操作
🔐 备份策略 编写 crontab 定时 mysqldump + 上传至 OSS/S3/异地服务器
📈 监控 安装 mysqltuner 或 Prometheus + mysqld_exporter
🛡️ 安全加固 禁用 local_infile、定期审计账户、开启错误日志审计
📦 应用连接 在应用配置中使用 myuser 而非 root,连接字符串示例:
jdbc:mysql://ip:3306/myapp?useSSL=false&serverTimezone=UTC

❌ 常见错误排查

现象 解决方案
Can't connect to local MySQL server 检查 systemctl status mysql,确认服务运行;检查 bind-address 和 skip-networking
Access denied for user 检查用户名@host 是否匹配('user'@'%' ≠ 'user'@'localhost');用 SELECT User,Host FROM mysql.user; 查看
Authentication plugin 'caching_sha2_password' cannot be loaded 执行 ALTER USER ... IDENTIFIED WITH mysql_native_password(见上文)
云服务器连不上 ✅ 检查:① 云平台安全组(阿里云/腾讯云/AWS)是否放行 3306;② 服务器防火墙(ufw/firewalld);③ MySQL bind-address;④ 用户 host 是否允许该 IP

需要我为你:

  • ✅ 生成一键部署脚本(含备份+监控)?
  • ✅ 提供 my.cnf 性能优化模板(根据内存自动适配)?
  • ✅ 配置自动备份到腾讯云 COS / 阿里云 OSS?
  • ✅ 演示 Laravel / Django / Spring Boot 的连接配置?

欢迎随时告诉我你的具体环境(OS 版本、云厂商、应用类型),我可以为你定制完整方案 👇

未经允许不得转载:CLOUD技术博 » 新购Linux云服务器后,如何在上面部署MySQL数据库?