加油
努力

如何在阿里云Linux服务器上安装配置MariaDB?

在阿里云 Linux 服务器(推荐 CentOS 7/8、Alibaba Cloud Linux 2/3 或 Ubuntu 20.04/22.04)上安装和配置 MariaDB,需结合安全性、生产环境最佳实践及阿里云特有注意事项(如安全组、SELinux、防火墙)。以下是详细、安全、可落地的完整指南


✅ 一、前提准备

  1. 登录服务器

    ssh -i your-key.pem root@<公网IP>
  2. 更新系统(推荐)

    # CentOS/Alibaba Cloud Linux
    sudo yum update -y
    
    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
  3. 确认系统版本(关键!不同版本源不同)

    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]Y
  • Disallow root login remotely? [Y/n]Y(禁止远程 root 登录,更安全)
  • Remove test database and access to it? [Y/n]Y
  • Reload 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 STATUSSHOW 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            # 重装数据目录(最后手段)

总结:关键四步不能少

  1. 用阿里云镜像源安装新版 MariaDB(避免老旧版漏洞)
  2. 运行 mysql_secure_installation 严控 root 权限
  3. 创建专用用户 + 最小权限授权(禁用 root 远程)
  4. 阿里云安全组 + 系统防火墙 + bind-address 三重放行

需要我为你生成 一键安装脚本备份脚本Docker 部署方案,欢迎随时告知! 🌟

云服务器