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

在新购的 Linux 云服务器(如 Ubuntu/CentOS)上部署 MySQL 数据库,需兼顾安全性、稳定性与生产可用性。以下是清晰、分步、推荐的部署指南(以 Ubuntu 22.04/24.04 或 CentOS 9/RHEL 9 为主,兼容主流云平台如阿里云、腾讯云、AWS):


✅ 一、前期准备(务必执行)

  1. 更新系统

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
    
    # CentOS/RHEL/Rocky/AlmaLinux
    sudo dnf update -y  # 或 yum update -y(旧版)
  2. 配置防火墙(开放 MySQL 端口)

    # Ubuntu(ufw)
    sudo ufw allow OpenSSH
    sudo ufw allow 3306  # 仅限内网或加IP限制更安全(见下文)
    sudo ufw enable
    
    # CentOS(firewalld)
    sudo firewall-cmd --permanent --add-service=mysql
    # 或更安全:仅允许特定IP(如你的办公IP)
    # sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="3306" protocol="tcp" accept'
    sudo firewall-cmd --reload
  3. (强烈建议)禁用 root 远程登录 & 使用非默认端口(可选但推荐)
    → 后续在 MySQL 配置中设置 bind-address = 127.0.0.1(仅本地访问),通过 SSH 隧道或应用服务器同VPC内网连接,避免公网暴露 3306 端口


✅ 二、安装 MySQL(推荐官方 APT/YUM 源,非系统默认 mariadb)

▶ 方式1:安装 Oracle 官方 MySQL(推荐,功能完整、更新及时)

✅ 支持 MySQL 8.0+(含角色管理、组件化、更强安全策略)

  • Ubuntu/Debian

    # 下载并安装 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 8.0
    sudo apt update
    sudo apt install mysql-server -y
  • CentOS/RHEL 9+

    # 启用 MySQL 8.0 模块(RHEL/CentOS 9+ 默认提供)
    sudo dnf module reset mysql
    sudo dnf module enable mysql:8.0
    sudo dnf install mysql-server -y

    ⚠️ 若需最新版(如 8.3),可添加官方 YUM 仓库:https://dev.mysql.com/downloads/repo/

▶ 方式2:使用系统默认包(快速但版本较旧)

# Ubuntu(通常为 8.0.x,可接受)
sudo apt install mysql-server -y

# CentOS 9+(同上,已含 8.0)
sudo dnf install mysql-server -y

✅ 安装完成后,MySQL 服务会自动启动并启用开机自启。


✅ 三、首次安全加固(关键!)

运行官方安全脚本(自动禁用危险默认项):

sudo mysql_secure_installation

按提示操作(强烈建议):

  • 设置 root 密码(选择 strong 策略,或自定义复杂密码)
  • 移除匿名用户 → Y
  • 禁止 root 远程登录 → Y(保持 localhost 可用)
  • 删除 test 数据库 → Y
  • 重载权限表 → Y

🔐 此后 root@localhost 仅可通过 sudo mysqlmysql -u root -p 本地登录。


✅ 四、配置 MySQL(重要:编辑 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf

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

修改关键项(根据云服务器配置调整):

[mysqld]
# 1. 绑定地址:禁止公网暴露(生产必备!)
bind-address = 127.0.0.1        # 仅本地;如需内网其他机器访问,改为内网IP(如 172.16.0.5)

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

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

# 4. 性能调优(示例:4GB内存云服务器)
innodb_buffer_pool_size = 1G     # 推荐设为物理内存50%~75%
max_connections = 200

✅ 保存后重启服务:

sudo systemctl restart mysql
sudo systemctl enable mysql  # 开机自启

验证状态:

sudo systemctl status mysql  # 应显示 active (running)
sudo ss -tlnp | grep :3306   # 确认监听地址

✅ 五、创建业务用户与数据库(替代 root 操作)

# 登录 MySQL(仅限本地)
sudo mysql -u root -p

# 在 MySQL 中执行:
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myuser'@'localhost';
-- 如需从内网其他服务器连接(如应用服务器),替换 localhost:
-- CREATE USER 'myuser'@'172.16.0.10' IDENTIFIED BY 'StrongPass123!';
FLUSH PRIVILEGES;
EXIT;

✅ 测试连接:

mysql -u myuser -p -D myapp

✅ 六、(可选但推荐)启用远程访问(仅当必要且安全可控)

❗不建议直接开放 3306 到公网!优先使用:

  • SSH 隧道(开发/管理):ssh -L 3307:127.0.0.1:3306 user@your-server-ip
  • 云平台安全组:仅放行可信内网 IP 或跳板机 IP
  • MySQL Router / ProxySQL:生产级X_X方案

若确需配置:

  1. 修改 bind-address = 0.0.0.0(⚠️风险!)
  2. 创建用户时指定 'myuser'@'%' 或具体 IP
  3. 云服务器控制台 安全组/防火墙 仅放行指定 IP 的 3306 端口
  4. 启用 MySQL SSL(官方文档)

✅ 七、备份策略(生产环境必须)

# 示例:每日凌晨2点全量备份(保留7天)
sudo crontab -e
# 添加:
0 2 * * * /usr/bin/mysqldump -u myuser -p'YourPass' --all-databases | gzip > /backup/mysql-$(date +%F).sql.gz && find /backup -name "mysql-*.sql.gz" -mtime +7 -delete

✅ 更推荐:mydumper(多线程)、Percona XtraBackup(热备 InnoDB)


✅ 八、验证与后续

  • ✅ 应用连接测试(使用 myuser 账号)
  • ✅ 查看错误日志:sudo tail -f /var/log/mysql/error.log
  • ✅ 监控:安装 mysqltunerwget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl && perl mysqltuner.pl
  • ✅ 生产建议:
    • 使用 systemd 管理服务
    • 配置 logrotate 管理慢日志/错误日志
    • 定期 mysqlcheck 检查表健康

🚫 常见错误规避

问题 解决方案
Can't connect to local MySQL server 检查 systemctl status mysqlbind-address/var/run/mysqld/mysqld.sock 权限
中文乱码 确保 utf8mb4[client][mysqld]、建库建表时三处统一
远程拒绝连接 检查:MySQL 用户 host、防火墙、云平台安全组、skip-networking 是否被启用

需要我为你:

  • ✅ 生成完整的 my.cnf 优化模板(按 2C4G/4C8G 云服务器)?
  • ✅ 提供 Docker 部署 MySQL 8.0 的 docker-compose.yml
  • ✅ 编写自动化部署 Shell 脚本(一键安装+安全加固)?
  • ✅ 配置主从复制或高可用(MHA/InnoDB Cluster)?

欢迎随时告诉我你的具体环境(OS 版本、云厂商、用途:开发/生产/学习),我会为你定制方案 👇

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