AWS CentOS7实例中MariaDB无法安装问题求助
排查CentOS7实例中MariaDB未成功安装的问题
核心排查步骤
查看用户数据执行日志
登录实例后,查看cloud-init的执行日志,这是定位安装失败原因的关键:cat /var/log/cloud-init-output.log重点关注
yum install mariadb-server -y的输出,确认是否存在依赖缺失、网络超时、仓库无对应包等错误。验证MariaDB包是否安装
执行以下命令确认mariadb-server包是否成功安装:rpm -qa | grep mariadb-server若无输出,说明包未安装成功,需优先解决yum安装环节的问题。
检查yum仓库配置
CentOS7默认Base仓库包含mariadb-server,若AWS镜像的仓库配置异常,可手动检查仓库可用性:yum repolist enabled yum info mariadb-server若提示
No matching Packages to list,则需添加MariaDB官方仓库:curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
修复后的用户数据脚本
原脚本未添加错误检查,且冗余使用sudo(AWS用户数据默认以root身份执行),以下是优化后的脚本,确保命令执行失败时立即终止,便于定位问题:
#!/bin/bash set -e # 命令执行失败时立即终止脚本 DATABASE_PASS='admin123' # 更新系统并安装依赖 yum update -y yum install epel-release -y yum install git zip unzip -y yum install mariadb-server -y # 启动并设置开机自启 systemctl start mariadb systemctl enable mariadb cd /tmp/ git clone -b vp-rem https://github.com/devopshydclub/vprofile-repo.git # 初始化数据库 mysqladmin -u root password "$DATABASE_PASS" mysql -u root -p"$DATABASE_PASS" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_PASS') WHERE User='root'" mysql -u root -p"$DATABASE_PASS" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" mysql -u root -p"$DATABASE_PASS" -e "DELETE FROM mysql.user WHERE User=''" mysql -u root -p"$DATABASE_PASS" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" mysql -u root -p"$DATABASE_PASS" -e "FLUSH PRIVILEGES" mysql -u root -p"$DATABASE_PASS" -e "create database accounts" mysql -u root -p"$DATABASE_PASS" -e "grant all privileges on accounts.* TO 'admin'@'localhost' identified by 'admin123'" mysql -u root -p"$DATABASE_PASS" -e "grant all privileges on accounts.* TO 'admin'@'%' identified by 'admin123'" mysql -u root -p"$DATABASE_PASS" accounts < /tmp/vprofile-repo/src/main/resources/db_backup.sql mysql -u root -p"$DATABASE_PASS" -e "FLUSH PRIVILEGES" # 重启服务 systemctl restart mariadb # 配置防火墙 systemctl start firewalld systemctl enable firewalld firewall-cmd --get-active-zones firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload systemctl restart mariadb
常见问题说明
- 为什么
systemctl status mariadb提示找不到单元?
本质原因是mariadb-server包未成功安装,包安装完成后系统会自动生成对应的service文件。 - 用户数据中
sudo是否必要?
AWS EC2的用户数据默认以root用户身份执行,因此无需添加sudo,冗余使用不会报错,但会增加不必要的命令层级。
内容的提问来源于stack exchange,提问作者Muhammad Hussain
相关产品推荐
相关产品推荐

