速卖通素材
努力

新购的Linux云服务器如何部署MySQL数据库?

服务器

在新购的 Linux 云服务器(如 CentOS/RHEL 8/9、Ubuntu 22.04/24.04 等)上安全、规范地部署 MySQL 数据库,建议按以下步骤操作(以 MySQL 官方社区版(推荐)或 Percona Server(生产增强版) 为主,不推荐使用系统默认的 MariaDB(除非明确需求))。以下以 Ubuntu 22.04 LTSCentOS Stream 9 为例,提供通用、安全、可复现的部署指南:


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

  1. 更新系统 & 安装基础工具

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y curl wget gnupg2 lsb-release software-properties-common
    
    # CentOS/RHEL/AlmaLinux/Rocky 9
    sudo dnf update -y
    sudo dnf install -y curl wget gnupg2 dnf-plugins-core
  2. 配置防火墙(启用并放行 MySQL 端口)

    # Ubuntu (UFW)
    sudo ufw allow OpenSSH
    sudo ufw allow 3306    # 仅限内网/跳板机访问时才开放!生产环境强烈建议限制IP
    sudo ufw enable
    
    # CentOS/RHEL (firewalld)
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --permanent --add-port=3306/tcp --source=192.168.1.0/24  # ✅ 推荐:仅允许可信网段(如VPC内网)
    # 或更安全:不开放3306公网,通过SSH隧道访问
    sudo firewall-cmd --reload

⚠️ 安全提醒:切勿将 3306 端口暴露在公网上! 生产环境应:

  • 使用 VPC 内网部署应用与数据库;
  • 通过 SSH 隧道(ssh -L 3307:127.0.0.1:3306 user@db-server)或跳板机访问;
  • 后期配合云厂商安全组(Security Group)严格限制源 IP。

✅ 二、安装 MySQL(推荐官方 APT/YUM 仓库,非系统包)

▶ 方式 1:Ubuntu/Debian(使用 MySQL 官方 APT 仓库)

# 1. 下载并安装 MySQL APT 配置包(自动配置最新稳定版)
curl -OL https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
# ➤ 安装时选择:MySQL Server & Cluster → 选择 `mysql-8.0` → OK → Apply

sudo apt update
sudo apt install -y mysql-server

# 2. 启动并设为开机自启
sudo systemctl enable mysql
sudo systemctl start mysql

▶ 方式 2:CentOS/RHEL 9(使用 MySQL 官方 YUM 仓库)

# 1. 添加 MySQL 官方 YUM 仓库
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

# 2. 确保启用 mysql80-community(禁用其他版本如57)
sudo dnf config-manager --disable mysql57-community
sudo dnf config-manager --enable mysql80-community

# 3. 安装
sudo dnf install -y mysql-community-server

# 4. 启动
sudo systemctl enable mysqld
sudo systemctl start mysqld

✅ 验证安装:

mysql --version  # 应显示 MySQL 8.0.x
sudo systemctl status mysqld  # 状态应为 active (running)

✅ 三、首次安全初始化(关键!)

MySQL 8.0+ 安装后会生成临时 root 密码,需运行 mysql_secure_installation 强化安全:

sudo mysql_secure_installation

按提示操作(推荐选项):

  • Enter password for user root: 🔑 粘贴临时密码(查看日志:sudo grep 'temporary password' /var/log/mysqld.logsudo grep 'A temporary password' /var/log/mysqld.log
  • New password for root: ✅ 设置强密码(至少8位,含大小写字母+数字+符号)
  • Remove anonymous users? → Y
  • Disallow root login remotely? → Y(禁止远程 root 登录)
  • Remove test database and access to it? → Y
  • Reload privilege tables now? → Y

💡 补充:若执行报错 Can't connect to local MySQL server,先检查服务状态并尝试:

sudo systemctl restart mysqld
sudo grep 'temporary password' /var/log/mysqld.log

✅ 四、基础配置优化(/etc/mysql/my.cnf/etc/my.cnf

编辑主配置文件(备份后修改):

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
sudo nano /etc/mysql/my.cnf

添加/修改以下关键项(适配你的服务器内存,例如 2GB RAM):

[mysqld]
# 基础安全
bind-address = 127.0.0.1          # ✅ 仅监听本地(应用同机部署时);如需内网访问,改为私有IP(如 192.168.1.100)
skip-networking = OFF             # 确保启用网络(默认ON)

# 字符集(避免乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# InnoDB 优化(重要)
innodb_buffer_pool_size = 512M    # ≈ 总内存的 50%~75%(2GB机器建议512M~1G)
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 1  # 保证ACID,生产环境勿改0/2

# 其他实用设置
max_connections = 200
wait_timeout = 300
interactive_timeout = 300
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

# ✅ 开启慢查询日志(调试/优化用,生产可选)
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# ✅ 创建错误日志目录(如不存在)
# sudo mkdir -p /var/log/mysql && sudo chown mysql:mysql /var/log/mysql

✅ 重启生效:

sudo systemctl restart mysql   # Ubuntu
# 或
sudo systemctl restart mysqld  # RHEL/CentOS

✅ 五、创建业务用户与数据库(禁止直接用 root 连接应用!)

# 登录 MySQL(使用刚设的 root 密码)
sudo mysql -u root -p

# 在 MySQL 中执行:
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';  -- 同机应用
-- 或(内网其他服务器访问):
-- CREATE USER 'myapp_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';

GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;

EXIT;

✅ 验证连接:

mysql -u myapp_user -p -D myapp

✅ 六、(可选但强烈推荐)启用远程备份与监控

  • 自动备份脚本示例(每日凌晨2点备份到本地 + 上传至对象存储):

    # /root/backup-mysql.sh
    #!/bin/bash
    DATE=$(date +%Y%m%d)
    mysqldump -u myapp_user -p'StrongPass123!' --single-transaction myapp | gzip > /backup/myapp_$DATE.sql.gz
    find /backup -name "myapp_*.sql.gz" -mtime +7 -delete

    加入 crontab:0 2 * * * /root/backup-mysql.sh

  • 监控建议:部署 mytoppt-query-digest(Percona Toolkit),或接入 Prometheus + mysqld_exporter。


🚫 常见错误规避清单

问题 原因 解决
Access denied for user 'root'@'localhost' 临时密码未正确输入,或已过期 查日志重置:sudo mysqld_safe --skip-grant-tables & → 登录后 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
Can't connect to local MySQL server 服务未启动 / bind-address 错误 / SELinux 阻断(RHEL) sudo systemctl status mysqld, sudo setsebool -P mysqld_connect_any on(如启用SELinux)
中文乱码 字符集未统一 确保 my.cnf + 创建库/表时均指定 utf8mb4,连接时加 ?charset=utf8mb4
远程无法连接 防火墙/安全组未放行、bind-address 为 127.0.0.1、用户 host 不匹配 bind-address = 0.0.0.0(⚠️仅限可信内网)+ CREATE USER 'u'@'%' + 开放对应端口

✅ 最终验证清单(部署完成前逐项确认)

  • [ ] mysql --version 输出 MySQL 8.x
  • [ ] sudo systemctl is-active mysqlactive
  • [ ] sudo netstat -tlnp | grep :3306 → 显示监听(且地址非 127.0.0.1 时确认安全策略)
  • [ ] mysql -u myapp_user -p -e "SELECT VERSION();" 可成功执行
  • [ ] 新建表插入中文数据无乱码
  • [ ] 慢查询日志、错误日志路径可写且有内容

需要我为你:

  • ✅ 生成完整自动化部署脚本(Bash + 参数化)?
  • ✅ 提供 Docker 方式部署(轻量测试场景)?
  • ✅ 配置主从复制/高可用(MHA / Orchestrator / MySQL Router)?
  • ✅ 适配特定云平台(阿里云RDS兼容模式 / AWS EC2 / 腾讯云CVM)?

欢迎随时提出,我可以按需定制 👇

未经允许不得转载:轻量云Cloud » 新购的Linux云服务器如何部署MySQL数据库?