在阿里云 Linux 服务器(推荐 CentOS 7/8、Alibaba Cloud Linux 2/3 或 Ubuntu 20.04/22.04)上安装和配置 MariaDB,需结合安全性、生产环境最佳实践及阿里云特有注意事项(如安全组、SELinux、防火墙)。以下是详细、安全、可落地的完整指南:
✅ 一、前提准备
-
登录服务器
ssh -i your-key.pem root@<公网IP> -
更新系统(推荐)
# CentOS/Alibaba Cloud Linux sudo yum update -y # Ubuntu/Debian sudo apt update && sudo apt upgrade -y -
确认系统版本(关键!不同版本源不同)
cat /etc/os-release | grep -E "PRETTY_NAME|VERSION_ID"
✅ 二、安装 MariaDB(推荐使用官方仓库,非系统默认旧版)
▶️ 方案 A:CentOS 7 / Alibaba Cloud Linux 2(推荐)
# 1. 下载并配置 MariaDB 官方 YUM 源(以最新稳定版 10.11 为例)
sudo tee /etc/yum.repos.d/mariadb.repo << 'EOF'
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.11/centos7-amd64
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled = 1
EOF
# 2. 清理缓存并安装
sudo yum clean all
sudo yum makecache
sudo yum install MariaDB-server MariaDB-client -y
▶️ 方案 B:Alibaba Cloud Linux 3 / CentOS 8+ / Rocky/AlmaLinux(使用 dnf)
sudo tee /etc/yum.repos.d/mariadb.repo << 'EOF'
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.11/centos8-amd64
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled = 1
EOF
sudo dnf clean all && sudo dnf makecache
sudo dnf install MariaDB-server MariaDB-client -y
▶️ 方案 C:Ubuntu 20.04/22.04(使用官方 APT 源)
# 导入 GPG 密钥
sudo apt-get install -y wget gnupg2
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
sudo bash mariadb_repo_setup --mariadb-version="10.11"
sudo apt update
# 安装(自动处理依赖)
sudo apt install mariadb-server -y
✅ 为什么用官方源?
阿里云镜像站(mirrors.aliyun.com/mariadb)提速国内下载,且提供较新稳定版(如 10.11 LTS),避免系统自带的老旧版本(如 CentOS 7 自带 5.5)。
✅ 三、首次启动与基础安全加固(必须执行!)
# 启动服务并设为开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb
# 运行安全初始化脚本(交互式,强烈建议执行!)
sudo mysql_secure_installation
按提示操作(关键选项):
Enter current password for root (enter for none):→ 直接回车(首次无密码)Set root password? [Y/n]→ Y → 设置强密码(如MyPass@2024!)Remove anonymous users? [Y/n]→ YDisallow root login remotely? [Y/n]→ Y(禁止远程 root 登录,更安全)Remove test database and access to it? [Y/n]→ YReload privilege tables now? [Y/n]→ Y
⚠️ 注意:此步骤后,root 只能本地登录(
mysql -u root -p),远程访问需创建专用用户。
✅ 四、配置远程访问(如需从本地或应用服务器连接)
1️⃣ 修改 MariaDB 绑定地址(允许外部连接)
sudo vim /etc/my.cnf.d/server.cnf # CentOS/Alibaba Cloud Linux
# 或
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf # Ubuntu
找到 [mysqld] 段,修改或添加:
[mysqld]
bind-address = 0.0.0.0 # 允许所有 IP 访问(生产环境建议指定内网IP)
# 或 bind-address = 172.16.0.10 # 推荐:仅绑定内网IP(如阿里云VPC内网)
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
2️⃣ 创建远程专用用户(绝不直接开放 root 远程!)
mysql -u root -p
-- 创建用户(替换 'myapp' 和 'StrongPass123!')
CREATE USER 'myapp'@'%' IDENTIFIED BY 'StrongPass123!';
-- 或限制仅内网访问(更安全):
-- CREATE USER 'myapp'@'172.16.%.%' 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 ON myapp_db.* TO 'myapp'@'%';
FLUSH PRIVILEGES;
EXIT;
3️⃣ 配置系统防火墙(阿里云安全组 + 系统防火墙双保险)
# CentOS/Alibaba Cloud Linux(firewalld)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
# Ubuntu(ufw)
sudo ufw allow 3306
sudo ufw reload
🔒 阿里云关键一步:配置安全组!
登录 阿里云控制台 → ECS → 安全组 → 配置规则
添加入方向规则:
- 协议类型:
MySQL(3306)或自定义 TCP- 端口范围:
3306- 授权对象:
- ❌
0.0.0.0/0(不推荐,暴露全网)- ✅
您的办公IP/32(如203.208.60.1/32)- ✅ 或
ECS内网网段/16(如172.16.0.0/16,用于应用服务器同VPC访问)
✅ 五、验证安装与连接
# 1. 本地测试
mysql -u root -p # 输入密码,进入后执行:
SELECT VERSION(), CURRENT_USER();
# 2. 远程测试(从本地电脑或另一台服务器)
mysql -h <你的阿里云ECS公网IP> -u myapp -p
# 输入密码,成功即 OK
# 3. 检查监听状态
sudo ss -tlnp | grep :3306
# 应看到 0.0.0.0:3306 或指定IP:3306
✅ 六、生产环境增强建议(重要!)
| 项目 | 推荐配置 | 说明 |
|---|---|---|
| 字符集 | utf8mb4 |
支持 emoji 和生僻字,在 /etc/my.cnf.d/server.cnf 中全局设置 |
| 日志 | 启用慢查询日志 | 在 [mysqld] 加 slow_query_log = ON slow_query_log_file = /var/log/mariadb/slow.log |
| 备份 | 使用 mysqldump + 定时任务 |
0 2 * * * /usr/bin/mysqldump -u backup -p'pass' --all-databases > /backup/full_$(date +%F).sql |
| 监控 | 配合阿里云云监控或 Prometheus | 采集 SHOW STATUS、SHOW GLOBAL VARIABLES 指标 |
| SELinux | 若启用,放行端口 | sudo setsebool -P mysqld_connect_any on(Alibaba Cloud Linux 默认关闭) |
❌ 常见问题排查
-
无法远程连接?
✅ 检查bind-address是否为0.0.0.0或内网IP
✅ 检查firewall-cmd/ufw是否放行 3306
✅ ✅ 最关键的:阿里云安全组是否放行?
✅ 用户是否授权@'%'或对应 IP 段 -
中文乱码?
确保my.cnf中[client]、[mysqld]、[mysql]三处均设置default-character-set = utf8mb4 -
服务启动失败?
sudo journalctl -u mariadb -n 50 --no-pager # 查看最近50行错误日志 sudo rm -f /var/lib/mysql/ib_logfile* # (谨慎!仅当提示 InnoDB 日志损坏时尝试) sudo mysql_install_db --user=mysql # 重装数据目录(最后手段)
✅ 总结:关键四步不能少
- 用阿里云镜像源安装新版 MariaDB(避免老旧版漏洞)
- 运行
mysql_secure_installation严控 root 权限 - 创建专用用户 + 最小权限授权(禁用 root 远程)
- 阿里云安全组 + 系统防火墙 + bind-address 三重放行
需要我为你生成 一键安装脚本、备份脚本 或 Docker 部署方案,欢迎随时告知! 🌟
云小栈