阿里云服务器上如何正确安装和配置MySQL数据库?

在阿里云服务器上安装和配置 MySQL 数据库,通常有几种主流方式。以下以 CentOS 7/8 或 Ubuntu 20.04+ 为例,提供一套标准、安全、生产可用的安装与配置流程。


✅ 推荐方案:使用官方 YUM/Apt 源安装(稳定 + 易维护)

不推荐使用源码编译或第三方包,除非有特殊需求。


🖥️ 一、前置准备

1. 登录服务器

ssh root@<your-alibaba-cloud-ip>

2. 更新系统

# CentOS/RHEL
sudo yum update -y

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

3. 关闭防火墙干扰(或开放3306端口)

# CentOS (firewalld)
sudo systemctl stop firewalld   # 临时测试用
sudo systemctl disable firewalld
# 或永久开放端口:
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

# Ubuntu (ufw)
sudo ufw allow 3306/tcp
sudo ufw enable

4. 关闭 SELinux(可选,但生产环境建议配置策略而非关闭)

# CentOS
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

📦 二、安装 MySQL

方法一:CentOS 7/8 使用 MySQL 官方 YUM 仓库

1. 添加 MySQL 官方 YUM 仓库

sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

2. 禁用默认 AppStream 中的 MySQL(避免冲突)

sudo yum module disable mysql

3. 安装 MySQL Server

sudo yum install -y mysql-community-server

4. 启动并设置开机自启

sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld

方法二:Ubuntu 20.04+ 使用 APT 安装

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

🔐 三、初始化与安全配置

1. 运行安全脚本(强烈建议)

sudo mysql_secure_installation

按提示操作:

  • 设置 root 密码
  • 移除匿名用户
  • 禁止 root 远程登录
  • 删除 test 数据库
  • 重新加载权限表

⚠️ 注意:MySQL 8.0+ 默认使用 caching_sha2_password 认证插件,部分旧客户端可能不兼容。如需兼容,可修改为 mysql_native_password(见下文)。


2. 创建专用数据库用户(最佳实践)

不要直接用 root 连接应用!

-- 登录 MySQL
sudo mysql -u root -p

-- 创建数据库
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户并授权
CREATE USER 'myapp_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'%';
FLUSH PRIVILEGES;
EXIT;

🔒 若希望限制远程访问,将 '%' 改为具体 IP,如 '192.168.1.100'


⚙️ 四、关键配置文件优化(/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf)

编辑配置文件:

sudo vi /etc/my.cnf          # CentOS
# 或
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf   # Ubuntu

添加或修改以下内容:

[mysqld]
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 绑定所有接口(允许远程连接)
bind-address = 0.0.0.0

# 最大连接数(根据服务器内存调整,一般 500~1000)
max_connections = 500

# 日志文件路径(确保目录存在且有权限)
log_error = /var/log/mysql/error.log

# 慢查询日志(可选)
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /var/log/mysql/slow.log

# InnoDB 缓冲池大小(建议设为物理内存的 50%~70%)
innodb_buffer_pool_size = 1G

# 日志格式(MySQL 8.0 默认 ROW,无需改)
binlog_format = ROW

# 时区设置(可选)
default-time-zone = '+08:00'

💡 修改后重启服务:

sudo systemctl restart mysqld

🌐 五、允许远程连接(重要!)

1. 检查 bind-address 是否为 0.0.0.0

如上所述,在 [mysqld] 段中确保:

bind-address = 0.0.0.0

2. 确认用户主机权限

之前创建的 'myapp_user'@'%' 允许任意 IP 连接。若需限制:

REVOKE ALL PRIVILEGES ON *.* FROM 'myapp_user'@'%';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'192.168.1.100';
FLUSH PRIVILEGES;

3. 阿里云安全组配置

⚠️ 这是最容易忽略的一步!

  1. 登录 阿里云控制台
  2. 进入 ECS 实例 → 点击“安全组”
  3. 找到关联的安全组 → “手动添加规则”
  4. 添加入方向规则:
    • 协议类型:TCP
    • 端口范围:3306/3306
    • 授权对象:你的公网 IP 或 0.0.0.0/0(不推荐生产环境开放全部)
    • 描述:MySQL 远程访问

🧪 六、验证安装

1. 本地测试

mysql -u myapp_user -p -h 127.0.0.1

2. 远程测试(从其他机器)

mysql -u myapp_user -p -h <your-alibaba-cloud-ip>

3. 查看状态

sudo systemctl status mysqld
sudo netstat -tlnp | grep 3306
# 或
ss -tlnp | grep 3306

🛡️ 七、额外安全建议

项目 建议
定期备份 使用 mysqldump 或阿里云 RDS 备份功能
监控性能 启用慢查询日志,使用 Prometheus + Grafana 监控
升级补丁 定期执行 yum update mysql* 或 apt upgrade mysql-server
最小权限原则 应用账户只授予必要表的权限
禁用 localhost root 远程 已在 mysql_secure_installation 中处理

❓常见问题排查

Q1:无法远程连接?

  • 检查安全组是否放行 3306
  • 检查 bind-address 是否为 0.0.0.0
  • 检查用户主机权限('user'@'host')
  • 检查防火墙(firewalld/ufw)

Q2:中文乱码?

  • 确保数据库、表、列字符集均为 utf8mb4
  • 客户端连接时也指定 charset=utf8mb4

Q3:MySQL 启动失败?

  • 查看错误日志:sudo tail -f /var/log/mysql/error.log
  • 常见原因:端口占用、磁盘空间不足、配置文件语法错误

✅ 总结 checklist

  • [ ] 安装 MySQL Server
  • [ ] 运行 mysql_secure_installation
  • [ ] 创建专用数据库和用户
  • [ ] 修改 my.cnf 优化性能与字符集
  • [ ] 设置 bind-address = 0.0.0.0
  • [ ] 配置阿里云安全组开放 3306
  • [ ] 测试本地与远程连接
  • [ ] 设置开机自启 & 定期备份计划

如需自动化部署,可使用 Ansible、Terraform 或 Docker 容器化部署(docker run --name mysql -e MYSQL_ROOT_PASSWORD=xxx -d mysql:8.0),但生产环境建议仍采用原生安装以便深度调优。

如有特定场景(如主从复制、集群、高可用),可进一步扩展配置。

未经允许不得转载:CLOUD技术博 » 阿里云服务器上如何正确安装和配置MySQL数据库?