加油
努力

在阿里云服务器上如何搭建MySQL数据库?

在阿里云服务器(ECS)上搭建 MySQL 数据库,需根据操作系统(推荐 CentOS 7/8 或 Ubuntu 20.04+/22.04)选择合适方式。以下是安全、稳定、生产可用的完整指南(以 Ubuntu 22.04 LTS + MySQL 8.0 为例,兼顾通用性与最佳实践):


✅ 一、前提准备

  1. 已开通阿里云 ECS 实例

    • 操作系统:Ubuntu 22.04(64位)或 CentOS 7/8(推荐 Ubuntu,MySQL 官方支持更及时)
    • 网络:确保安全组已放行 3306 端口(仅限必要 IP,切勿全网开放!

      🔒 安全建议:生产环境应通过内网访问(如应用服务器与数据库同属 VPC),或使用白名单限制来源 IP(如 192.168.1.100/32

  2. 登录服务器

    ssh -i your-key.pem ubuntu@<ECS公网IP>

✅ 二、安装 MySQL(推荐官方 APT 仓库,版本可控)

⚠️ 避免 apt install mysql-server(Ubuntu 自带版本较旧且含 MariaDB 替代包)

▶ 方法 1:使用 MySQL 官方 APT 仓库(推荐 ✅)

# 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" → 回车 → 选择 "mysql-8.0" → OK → Apply

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

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

▶ 方法 2:快速安装(Ubuntu 22.04 默认源含 MySQL 8.0+)

sudo apt update
sudo apt install mysql-server -y
sudo systemctl enable mysql && sudo systemctl start mysql

✅ 验证安装:

mysql --version  # 应显示 MySQL 8.0.x
sudo systemctl status mysql  # 确保 active (running)

✅ 三、初始化安全配置(关键!)

运行安全脚本,禁用不安全默认项:

sudo mysql_secure_installation

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

  • Set password for root user? → ✅ 设置强密码(如 MyPass@2024!
  • Remove anonymous users? → Y
  • Disallow root login remotely? → Y禁止 root 远程登录,后续用普通用户授权
  • Remove test database? → Y
  • Reload privilege tables? → Y

💡 注意:此步骤后 root 用户仅可通过 localhost 登录(Unix socket),无法远程连接。


✅ 四、配置远程访问(按需开启,务必限制 IP!)

1. 修改 MySQL 绑定地址(允许外部连接)

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

找到 bind-address 行,修改为:

bind-address = 0.0.0.0  # 允许所有 IPv4 连接(⚠️ 必须配合安全组/IP 白名单!)
# 或更安全:bind-address = 172.16.0.10  # 仅绑定内网 IP(推荐)

保存后重启:

sudo systemctl restart mysql

2. 创建专用数据库用户(替代 root 远程登录)

sudo mysql -u root -p

在 MySQL 内执行:

-- 创建新用户(替换 'myapp' 和 'StrongPass123!')
CREATE USER 'myapp'@'%' IDENTIFIED BY 'StrongPass123!';
-- 或更安全:只允许特定 IP(如应用服务器内网 IP)
-- CREATE USER 'myapp'@'172.16.0.5' IDENTIFIED BY 'StrongPass123!';

-- 授权(按最小权限原则,此处授予指定数据库)
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp'@'%';
-- 或仅授权必要权限:
-- GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp'@'%';

FLUSH PRIVILEGES;
EXIT;

✅ 验证远程连接(从另一台机器测试):

mysql -h <ECS公网IP> -u myapp -p

✅ 五、优化基础配置(/etc/mysql/mysql.conf.d/mysqld.cnf

添加以下配置提升稳定性与兼容性:

[mysqld]
# 字符集(重要!避免中文乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 连接与超时
max_connections = 200
wait_timeout = 28800
interactive_timeout = 28800

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

# InnoDB 优化(根据内存调整,例如 2GB 内存可设 512M)
innodb_buffer_pool_size = 512M

重启生效:

sudo systemctl restart mysql

✅ 六、防火墙配置(Ubuntu UFW)

sudo ufw allow OpenSSH
sudo ufw allow from <应用服务器IP> to any port 3306  # ✅ 仅放行可信 IP
# 或(若必须公网访问,仅限测试):
# sudo ufw allow 3306
sudo ufw enable

✅ 七、备份与监控(生产必备)

  • 自动备份脚本示例(每日备份到 /backup):

    # /home/ubuntu/backup-mysql.sh
    mysqldump -u myapp -p'StrongPass123!' --databases myapp_db | gzip > /backup/myapp_db_$(date +%F).sql.gz
    find /backup -name "*.sql.gz" -mtime +7 -delete

    添加定时任务:crontab -e0 2 * * * /home/ubuntu/backup-mysql.sh

  • 监控建议

    • 使用阿里云 云监控(安装 CloudMonitor Agent)
    • 或开源方案:Prometheus + MySQL Exporter

❌ 常见错误与解决

现象 原因 解决
Access denied for user 'root'@'xxx' root 禁止远程登录 改用创建的普通用户,或临时授权:GRANT ... ON *.* TO 'root'@'%'(不推荐)
连接超时/拒绝 安全组未放行 3306 或 UFW 阻挡 检查阿里云控制台「安全组」规则 + sudo ufw status
中文乱码 字符集未设 utf8mb4 确认 my.cnfcharacter-set-server=utf8mb4 + 数据库/表也用该字符集
启动失败 配置语法错误 sudo mysqld --validate-config 或查看错误日志:sudo tail -f /var/log/mysql/error.log

🌐 进阶建议(生产环境)

  • 高可用:部署 MySQL 主从复制(Master-Slave)或使用阿里云 RDS MySQL(免运维、自动备份、读写分离)
  • 安全加固:启用 SSL 连接、定期轮换密码、审计日志(mysql-audit 插件)
  • 性能调优:根据业务负载分析慢查询(EXPLAIN)、优化索引、调整 innodb_buffer_pool_size

需要我为你提供:

  • 🐧 CentOS 7/8 的详细安装步骤?
  • 📦 Docker 方式一键部署 MySQL?
  • 🔐 SSL 加密连接配置教程?
  • 📊 阿里云 RDS 与自建 MySQL 对比选型建议?

欢迎随时告诉我,我会为你定制化补充! 🚀

云服务器