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

在新购的 Linux 云服务器(如 CentOS/RHEL 8/9、Ubuntu 22.04/24.04 等)上部署 MySQL 数据库,需兼顾安全性、稳定性与生产可用性。以下是清晰、分步、推荐的部署流程(以主流发行版为例,重点说明关键注意事项):


✅ 一、前期准备(重要!)

  1. 确认系统环境

    # 查看系统信息(决定安装方式)
    cat /etc/os-release
    uname -r

    ⚠️ 注意:

    • 避免使用 mysql(Oracle 官方 MySQL)和 mariadb 混淆;生产推荐 MySQL Community Server(官方版)Percona Server(增强版)
    • Ubuntu/Debian 默认仓库的 mysql-server 包实为 MariaDB(兼容但非 MySQL),需手动添加 Oracle 官方源。
  2. 更新系统 & 安装基础工具

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y curl wget gnupg2 lsb-release
    
    # CentOS/RHEL 8+
    sudo dnf update -y
    sudo dnf install -y curl wget gnupg2
  3. 配置防火墙(开放 MySQL 端口)

    # Ubuntu (UFW)
    sudo ufw allow OpenSSH
    sudo ufw allow 3306  # 生产环境建议限制 IP:sudo ufw allow from 192.168.1.100 to any port 3306
    sudo ufw enable
    
    # CentOS/RHEL (firewalld)
    sudo firewall-cmd --permanent --add-service=mysql
    # 或更安全:仅允许特定IP
    # sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept'
    sudo firewall-cmd --reload

✅ 二、安装 MySQL(推荐官方 APT/YUM 源 —— 安全 + 最新版)

▶ 方式1:Ubuntu/Debian(Oracle 官方 MySQL)

# 1. 下载并安装 MySQL APT 配置包(自动配置源)
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 → 选择版本(如 8.0)→ OK

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

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

▶ 方式2:CentOS/RHEL 8+(MySQL YUM Repository)

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

# 2. 可选:禁用其他 MySQL 模块(避免冲突)
sudo dnf module reset mysql
sudo dnf module enable mysql:8.0

# 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+ 安装后会生成临时密码,首次登录需重置:

# 1. 查看临时 root 密码(RHEL/CentOS 在 /var/log/mysqld.log;Ubuntu 在 /var/log/mysql/error.log)
sudo grep 'temporary password' /var/log/mysqld.log  # RHEL
# 或
sudo grep 'temporary password' /var/log/mysql/error.log  # Ubuntu

# 2. 登录 MySQL(输入临时密码)
mysql -u root -p

# 3. 【强烈推荐】立即运行安全向导(交互式加固):
mysql> EXIT;
sudo mysql_secure_installation

✅ 向导中务必选择:

  • Y 设置强 root 密码(符合策略:8位+大小写字母+数字+特殊字符)
  • Y 移除匿名用户
  • Y 禁止 root 远程登录(生产环境默认只允许 localhost)
  • Y 删除 test 数据库及访问权限
  • Y 重载权限表

💡 若需远程管理(不推荐直接开 root 远程):后续创建专用账号并授权(见第五步)


✅ 四、配置 MySQL(优化 & 安全)

编辑主配置文件(路径因系统而异):

# Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
# RHEL/CentOS: /etc/my.cnf 或 /etc/my.cnf.d/mysql-server.cnf
sudo nano /etc/my.cnf

📌 关键配置项(追加到 [mysqld] 段)

[mysqld]
# 基础
bind-address = 127.0.0.1        # 🔒 仅监听本地(生产必须!如需远程,改为 0.0.0.0 并配合防火墙/IP白名单)
port = 3306
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 安全强化(MySQL 8.0+)
default_authentication_plugin = caching_sha2_password
require_secure_transport = ON    # 强制 SSL 连接(需配置证书,进阶可选)

# 日志(便于排错)
log-error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# InnoDB 优化(根据内存调整)
innodb_buffer_pool_size = 1G    # 推荐:物理内存的 50%~75%

✅ 保存后重启服务:

sudo systemctl restart mysqld
# Ubuntu 用户注意:可能需先创建日志目录
sudo mkdir -p /var/log/mysql && sudo chown mysql:mysql /var/log/mysql

✅ 五、创建应用数据库与用户(生产最佳实践)

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

-- 2. 创建专用用户(❌ 不用 root 连接应用!)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';

-- 3. 授予最小必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp_user'@'localhost';

-- 4. 【如需远程连接】(仅限可信内网或跳板机,且需防火墙限制)
-- CREATE USER 'myapp_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
-- GRANT ... ON myapp_db.* TO 'myapp_user'@'192.168.1.%';

-- 5. 刷新权限
FLUSH PRIVILEGES;

-- 6. 退出
EXIT;

✅ 六、验证连接(本地测试)

# 使用新用户登录
mysql -u myapp_user -p -D myapp_db

# 测试建表
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'Hello MySQL');
SELECT * FROM test_table;

✅ 七、【可选】启用远程访问(谨慎!)

若应用服务器与 DB 不在同一机器:

  1. 修改 bind-address = 0.0.0.0(⚠️ 配合防火墙严格限制源 IP!)
  2. 创建带 % 或具体 IP 的用户(如 'user'@'10.0.1.5'
  3. 开放防火墙端口(仅允许可信 IP):
    # Ubuntu UFW
    sudo ufw allow from 10.0.1.5 to any port 3306
    # RHEL firewalld
    sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.1.5" port port="3306" protocol="tcp" accept'
    sudo firewall-cmd --reload
  4. 强烈建议:应用连接使用 SSL 加密(配置 require_secure_transport=ON + 证书)

🚫 常见错误规避指南

问题 解决方案
Can't connect to local MySQL server 检查 systemctl status mysqldbind-address、SELinux(RHEL:sudo setsebool -P mysqld_connect_any on
Access denied for user 'root'@'localhost' 用临时密码登录,或重置密码(MySQL 官方重置指南)
Authentication plugin 'caching_sha2_password' cannot be loaded 客户端不支持?升级客户端,或创建用户时指定 IDENTIFIED WITH mysql_native_password(不推荐降级安全)

✅ 后续建议(生产就绪)

  • 备份策略:配置 mysqldump 定时备份 + mysqlbinlog 增量备份
  • 监控:部署 Prometheus + mysqld_exporterPercona Monitoring and Management (PMM)
  • 高可用:单机够用?未来考虑 MySQL Group Replication / InnoDB Cluster
  • SSL 加密:生成证书并启用(require_secure_transport=ON
  • 定期更新sudo apt update && sudo apt upgrade mysql-server(注意大版本升级需迁移)

需要我为你:

  • ✍️ 生成完整的自动化部署脚本(Bash)?
  • 📄 提供 my.cnf 完整配置模板(按 2G/4G 内存优化)?
  • 🔐 指导如何配置 MySQL SSL 加密连接?
  • 🐳 演示 Docker 方式部署(轻量测试场景)?

欢迎随时告诉我你的具体环境(系统版本、内存、用途),我会为你定制方案! 🌟

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