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

在新购的 Linux 云服务器(如 CentOS/RHEL 8/9、Ubuntu 20.04/22.04 等)上部署 MySQL 数据库,推荐使用 官方 MySQL APT/YUM 仓库安装(而非系统默认的 mariadb),以获得最新稳定版(如 MySQL 8.0+)、完整功能和官方支持。以下是详细、安全、生产就绪的部署步骤:


✅ 前提准备

  1. 登录服务器

    ssh root@your_server_ip
  2. 更新系统

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
    
    # CentOS/RHEL 8/9(启用 EPEL 可选,但 MySQL 官方源已足够)
    sudo dnf update -y  # 或 yum update -y(RHEL/CentOS 7)
  3. 关闭或配置防火墙(按需)

    # Ubuntu(UFW)
    sudo ufw allow OpenSSH
    sudo ufw allow 3306  # 仅限内网/安全组放行时开启
    sudo ufw enable
    
    # CentOS/RHEL(firewalld)
    sudo firewall-cmd --permanent --add-service=mysql
    sudo firewall-cmd --reload

    ⚠️ 重要安全提示切勿直接对公网开放 3306 端口!
    → 推荐方案:

    • 通过云平台「安全组」仅允许可信 IP(如公司办公 IP、跳板机 IP)访问 3306;
    • 或使用 SSH 隧道连接(ssh -L 3307:127.0.0.1:3306 user@server);
    • 生产环境建议禁用远程 root 登录,仅用应用专用账户 + 内网访问。

📦 步骤一:安装 MySQL(官方源,推荐)

▶ Ubuntu/Debian(以 22.04 为例)

# 1. 下载并安装 MySQL APT 配置工具(自动配置官方源)
cd /tmp
wget 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 → 按 Tab 切换,回车确认
#   [✓] MySQL 8.0 → 回车确认(不选 5.7)
#   [✓] Apply → 回车完成配置

# 2. 更新源并安装
sudo apt update
sudo apt install mysql-server -y

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

▶ CentOS/RHEL 8/9

# 1. 下载并安装 MySQL YUM 仓库
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{?rhel}%{!?rhel:%{?fedora}}')-1.noarch.rpm

# 2. 确认启用 MySQL 8.0(禁用 5.7/其他版本)
sudo dnf module reset mysql
sudo dnf module enable mysql:8.0

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

# 4. 启动并开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld

✅ 验证安装:

mysql --version  # 应输出类似:mysql  Ver 8.0.33 for Linux...
sudo systemctl status mysqld  # 状态应为 active (running)

🔐 步骤二:运行安全初始化(关键!)

MySQL 8.0+ 安装后会生成临时 root 密码,并启动 mysqld 服务。首次必须运行安全脚本:

sudo mysql_secure_installation

按提示操作(强烈建议全部选 Y):

  • Enter password for user root: → 输入临时密码(查看方式见下文)
  • 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

🔍 如何查找临时 root 密码?(若忘记)

sudo grep 'temporary password' /var/log/mysqld.log  # RHEL/CentOS
sudo grep 'temporary password' /var/log/mysql/error.log  # Ubuntu/Debian

🛠 步骤三:基础配置优化(/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf  # Ubuntu
# 或
sudo nano /etc/my.cnf  # RHEL/CentOS(在 [mysqld] 段下添加)

推荐最小安全配置

[mysqld]
# 1. 绑定地址(仅监听本地,禁止网络暴露)
bind-address = 127.0.0.1
# 若需内网其他机器访问(如应用服务器),改为:bind-address = 0.0.0.0,再配合防火墙限制IP!

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

# 3. 默认加密(MySQL 8.0+ 推荐)
default_authentication_plugin = mysql_native_password  # 兼容旧客户端(可选)
# 或更安全的:caching_sha2_password(推荐,但需客户端支持)

# 4. 日志(可选,便于排错)
log-error = /var/log/mysql/error.log

⚠️ 修改后重启:

sudo systemctl restart mysql

🧩 步骤四:创建应用数据库与用户(非 root!)

mysql -u root -p
-- 1. 创建数据库(指定字符集)
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 创建专用用户(替换 'myapp_user' 和 'StrongPass123!')
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';

-- 3. 授予最小必要权限(不给 DROP/GRANT 等高危权限)
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp_user'@'localhost';

-- 4. 如果应用服务器在另一台机器(如 10.0.1.100),则授权:
-- CREATE USER 'myapp_user'@'10.0.1.100' IDENTIFIED BY 'StrongPass123!';
-- GRANT ... ON myapp_db.* TO 'myapp_user'@'10.0.1.100';

-- 5. 刷新权限
FLUSH PRIVILEGES;

-- 6. 退出
EXIT;

✅ 测试连接(本地):

mysql -u myapp_user -p myapp_db

📌 补充建议(生产必备)

项目 建议
备份策略 使用 mysqldump + cron 定时备份到对象存储(如 COS/OSS/S3)
0 2 * * * /usr/bin/mysqldump -u myapp_user -p'xxx' myapp_db | gzip > /backup/myapp_$(date +%F).sql.gz
监控 部署 mysql-exporter + Prometheus + Grafana,或使用云厂商监控(如阿里云云监控)
SSL 加密 对外提供服务时,务必配置 SSL(生成证书并启用 require_secure_transport=ON
主从复制 高可用场景,配置异步/半同步复制(CHANGE REPLICATION SOURCE TO ...
参数调优 根据内存调整 innodb_buffer_pool_size(建议 RAM 的 50%-75%)

❌ 常见错误速查

现象 解决方案
Can't connect to local MySQL server 检查 systemctl status mysql;确认 bind-address 未被注释;检查 socket 路径是否正确
远程连接被拒 检查:① bind-address = 0.0.0.0;② 防火墙/安全组;③ 用户 host 是否为 'user'@'%';④ skip-networking 是否被启用
中文乱码 确保 my.cnfcharacter-set-server=utf8mb4 + 创建库/表时指定 CHARSET=utf8mb4 + 连接时加 ?charset=utf8mb4

至此,MySQL 已安全部署完成!
你已拥有:
✔ 官方最新稳定版(MySQL 8.0+)
✔ 强密码策略与最小权限原则
✔ 本地绑定 + 防火墙保护
✔ 应用专用账户与数据库
✔ 可扩展的备份与监控基础

如需进一步自动化(Ansible 脚本)、Docker 部署、或高可用架构(MHA/InnoDB Cluster),欢迎继续提问 👇

需要我为你生成一键部署脚本(Shell/Ansible)或配置备份/SSL 教程吗?

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