在阿里云服务器上安装和配置 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. 阿里云安全组配置
⚠️ 这是最容易忽略的一步!
- 登录 阿里云控制台
- 进入 ECS 实例 → 点击“安全组”
- 找到关联的安全组 → “手动添加规则”
- 添加入方向规则:
- 协议类型: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技术博