走啊走
加油

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

服务器价格表

在新购的 Linux 云服务器上部署 MySQL 数据库,需兼顾安全性、稳定性与可维护性。以下是基于主流发行版(如 Ubuntu 22.04/24.04 或 CentOS/RHEL 8/9)的生产推荐流程(以 MySQL 官方社区版为例),包含关键安全加固步骤:


✅ 一、前期准备(登录服务器后必做)

# 1. 更新系统(Ubuntu/Debian)
sudo apt update && sudo apt upgrade -y

# 或 CentOS/RHEL(启用 EPEL + dnf)
sudo dnf update -y
sudo dnf install epel-release -y  # RHEL/CentOS 8+

⚠️ 注意:云服务器请先配置好安全组/防火墙规则(开放 3306 端口仅限可信 IP,或默认关闭,后续通过 SSH 隧道访问更安全)


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

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

# 下载并安装 MySQL APT 配置工具(获取最新稳定版,如 8.0/8.4)
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(或 8.4)
sudo apt update
sudo apt install mysql-server -y

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

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

✅ 优势:获得官方支持、及时安全更新、完整功能(如 caching_sha2_password 认证插件)


✅ 三、启动并启用服务

sudo systemctl start mysqld      # RHEL/CentOS
# 或
sudo systemctl start mysql       # Ubuntu/Debian

sudo systemctl enable mysqld     # 开机自启
sudo systemctl status mysql      # 检查状态(应为 active (running))

✅ 四、运行安全初始化(关键!)

sudo mysql_secure_installation

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

  • ✅ 设置 root 密码(强密码,记录保存)
  • ✅ 移除匿名用户(Remove anonymous users? [Y]Y
  • ✅ 禁止 root 远程登录(Disallow root login remotely? [Y]Y
  • ✅ 删除 test 数据库(Remove test database and access to it? [Y]Y
  • ✅ 重载权限表(Reload privilege tables now? [Y]Y

🔒 此步极大降低被爆破/未授权访问风险!


✅ 五、配置 MySQL(关键安全与性能设置)

编辑主配置文件(路径因发行版略有不同):

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

[mysqld] 段添加/修改以下内容:

[mysqld]
# —— 安全加固 ——
bind-address = 127.0.0.1          # ❗仅监听本地(禁止公网暴露!)
# skip-networking = ON           # (可选)完全禁用TCP,仅Socket通信
default-authentication-plugin = caching_sha2_password
require_secure_transport = ON    # 强制SSL连接(需后续配置证书)

# —— 基础优化 ——
max_connections = 200
innodb_buffer_pool_size = 512M   # 根据内存调整(建议总内存50%-70%)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

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

✅ 保存后重启:

sudo systemctl restart mysql

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

sudo mysql -u root -p

在 MySQL 内执行:

-- 创建数据库(指定字符集)
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建专用用户(限制来源IP,如仅允许内网或特定IP)
CREATE USER 'myapp_user'@'127.0.0.1' IDENTIFIED BY 'StrongPass!2024';

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

-- 刷新权限
FLUSH PRIVILEGES;

-- (可选)若需远程访问(不推荐),改为:
-- CREATE USER 'myapp_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass!2024';
-- GRANT ... ON myapp_db.* TO 'myapp_user'@'192.168.1.%';

🛡️ 原则:

  • 永远不用 root@'%'
  • 用户只授 localhost 或内网 IP;
  • 权限按需授予(避免 GRANT ALL)。

✅ 七、验证连接与基础测试

# 本地测试(使用新用户)
mysql -u myapp_user -p -h 127.0.0.1 myapp_db

# 查看字符集是否生效
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

✅ 八、(进阶)启用 SSL(生产环境强烈推荐)

-- 在 MySQL 中检查 SSL 状态
SHOW VARIABLES LIKE '%ssl%';
-- 若 ssl_mode=DISABLED,则需生成证书并配置(参考 MySQL 官方文档)

✨ 提示:云厂商(如阿里云RDS、腾讯云CDB)已内置 SSL,自建需额外配置。


✅ 九、备份策略(上线前必须规划!)

# 示例:每日自动备份(加入 crontab)
0 2 * * * /usr/bin/mysqldump -u myapp_user -p'YourPass' --databases myapp_db | gzip > /backup/myapp_db_$(date +%F).sql.gz

# 安全建议:备份文件权限设为 600,目录 700,并异地存储

⚠️ 重要提醒(避坑指南)

风险点 正确做法
❌ 直接开放 3306 到公网 ✅ 用 SSH 隧道或云内网/VPC 连接;或通过 Nginx 反向X_X + 认证(不推荐)
❌ 使用弱密码或空密码 ✅ 用 openssl rand -base64 16 生成强密码
❌ 不改 bind-address ✅ 必须设为 127.0.0.1 或内网 IP,禁用 0.0.0.0
❌ 忽略防火墙 ufw allow OpenSSH + ufw deny 3306(Ubuntu)或 firewall-cmd --permanent --remove-port=3306/tcp(RHEL)
❌ 用 root 连接业务程序 ✅ 应用配置中使用专用低权限账号

✅ 十、后续运维建议

  • ✅ 定期 sudo apt update && sudo apt upgrade mysql-server(保持安全更新)
  • ✅ 监控磁盘空间(/var/lib/mysql)、慢查询日志、错误日志
  • ✅ 使用 mysqltuner.pl 分析性能瓶颈
  • ✅ 考虑高可用:主从复制、ProxySQL、或直接选用云厂商托管数据库(RDS)

需要我为你:

  • ✅ 生成完整的 my.cnf 配置模板(适配 2G/4G/8G 内存)?
  • ✅ 编写一键部署脚本(含安全加固)?
  • ✅ 演示如何配置主从复制?
  • ✅ 教你用 Docker 部署 MySQL(隔离更优)?

欢迎随时告诉我你的具体场景(如:服务器配置、业务类型、是否需网络访问等),我会为你定制化方案 👇