在现代服务器运维和DevOps实践中,自动化部署是提升效率、保障环境一致性和减少人为错误的核心环节,对于CentOS系统而言,MySQL作为最流行的关系型数据库之一,其安装配置过程如果完全手动操作,不仅耗时,而且容易因细微差异导致后续应用问题,掌握一套在CentOS上自动安装MySQL的方法,对于系统管理员和开发人员至关重要,本文将提供一个完整、可靠的自动化安装方案,通过编写并执行一个Shell脚本,实现一键式部署MySQL数据库,并对整个过程进行详细解析。

环境准备与前置条件
在开始自动化部署之前,确保您的系统满足以下基本条件,这是脚本能够顺利执行的基础。
- 操作系统:一台全新的或已清理过旧MySQL环境的CentOS 7或CentOS 8服务器,本脚本将自动检测并适配这两个主流版本。
- 用户权限:一个具有
sudo权限的非root用户,或直接使用root用户执行,安装系统级服务需要管理员权限。 - 网络连接:服务器必须能够访问互联网,以便从MySQL官方仓库下载所需的软件包。
- 基础工具:确保系统已安装
wget工具,如果未安装,脚本会尝试自动安装。
# 对于CentOS 7 sudo yum install -y wget # 对于CentOS 8 sudo dnf install -y wget
构建自动化安装 Shell 脚本
我们将创建一个名为install_mysql.sh的脚本文件,该脚本将完成从添加官方Yum仓库、安装MySQL服务、启动服务到修改root密码等一系列操作。
#!/bin/bash
# =================================================================
# CentOS MySQL 8.0 自动化安装脚本
# 功能:自动检测CentOS版本,配置官方Yum源,安装并启动MySQL服务,并设置root密码。
# 作者:AI Assistant
# 版本:1.1
# =================================================================
# --- 用户可配置区域 ---
# 在此处设置您希望的MySQL root用户密码
MYSQL_ROOT_PASSWORD="YourStrongPassword!123"
# --- 配置结束 ---
# 检查是否以root权限运行
if [ "$(id -u)" != "0" ]; then
echo "此脚本必须以root权限运行,请使用 'sudo'。" 1>&2
exit 1
fi
# 定义颜色输出,方便查看
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}开始自动安装 MySQL...${NC}"
# 1. 检测并安装wget
if ! command -v wget &> /dev/null; then
echo -e "${YELLOW}wget 未安装,正在安装...${NC}"
if grep -q "CentOS Linux release 7" /etc/os-release; then
yum install -y wget
elif grep -q "CentOS Linux release 8" /etc/os-release; then
dnf install -y wget
else
echo -e "${RED}不支持的操作系统版本,脚本终止。${NC}"
exit 1
fi
fi
# 2. 获取操作系统版本并安装MySQL官方Yum仓库
if grep -q "CentOS Linux release 7" /etc/os-release; then
echo -e "${YELLOW}检测到系统为 CentOS 7,正在配置MySQL 8.0 Yum仓库...${NC}"
yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
elif grep -q "CentOS Linux release 8" /etc/os-release; then
echo -e "${YELLOW}检测到系统为 CentOS 8,正在配置MySQL 8.0 Yum仓库...${NC}"
dnf localinstall -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
else
echo -e "${RED}不支持的操作系统版本,脚本终止。${NC}"
exit 1
fi
# 3. 安装MySQL Community Server
echo -e "${YELLOW}正在安装 MySQL Community Server...${NC}"
if grep -q "CentOS Linux release 7" /etc/os-release; then
yum install -y mysql-community-server
elif grep -q "CentOS Linux release 8" /etc/os-release; then
dnf install -y mysql-community-server
fi
# 4. 启动MySQL服务并设置开机自启
echo -e "${YELLOW}正在启动 MySQL 服务并设置开机自启...${NC}"
systemctl start mysqld
systemctl enable mysqld
# 等待服务完全启动
sleep 5
# 5. 获取临时root密码
TEMP_PASSWORD=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
if [ -z "$TEMP_PASSWORD" ]; then
echo -e "${RED}无法获取MySQL临时密码,请检查日志 /var/log/mysqld.log${NC}"
exit 1
fi
echo -e "${GREEN}获取到临时密码: $TEMP_PASSWORD${NC}"
# 6. 修改root密码
echo -e "${YELLOW}正在修改 root 用户密码...${NC}"
# 使用mysqladmin安全地修改密码
mysqladmin -u root -p"$TEMP_PASSWORD" password "$MYSQL_ROOT_PASSWORD"
if [ $? -eq 0 ]; then
echo -e "${GREEN}MySQL root 密码修改成功!新密码为: $MYSQL_ROOT_PASSWORD${NC}"
else
echo -e "${RED}MySQL root 密码修改失败,请检查密码强度是否符合策略要求(大小写字母、数字、特殊符号)。${NC}"
exit 1
fi
# 7. (可选) 基础安全设置,允许远程连接
# 注意:此操作会降低安全性,仅建议在开发或受信任的网络环境中使用。
# echo -e "${YELLOW}正在配置允许root用户远程连接...${NC}"
# SQL_COMMAND="ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
# SQL_COMMAND+="CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
# SQL_COMMAND+="GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;"
# SQL_COMMAND+="FLUSH PRIVILEGES;"
# mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "$SQL_COMMAND"
# echo -e "${GREEN}已允许root用户从任何主机远程连接。${NC}"
echo -e "${GREEN}==================================================================${NC}"
echo -e "${GREEN} MySQL 安装成功!${NC}"
echo -e "${GREEN}==================================================================${NC}"
echo -e "服务状态: $(systemctl is-active mysqld)"
echo -e "开机自启: $(systemctl is-enabled mysqld)"
echo -e "Root密码: ${MYSQL_ROOT_PASSWORD}"
echo -e "连接命令: mysql -u root -p'${MYSQL_ROOT_PASSWORD}'"
echo -e "${GREEN}==================================================================${NC}"
脚本核心逻辑解析
为了让读者更好地理解脚本的工作原理,下表对其中的关键代码段进行了功能说明。
| 代码片段 | 功能说明 |
|---|---|
if [ "$(id -u)" != "0" ]; then ... fi |
权限检查,确保脚本以root或sudo权限运行,否则直接退出,避免因权限不足导致安装失败。 |
grep -q "CentOS Linux release 7" /etc/os-release |
操作系统版本检测,通过读取/etc/os-release来判断当前系统是CentOS 7还是8,从而执行对应版本的安装命令。 |
yum localinstall -y ... / dnf localinstall -y ... |
安装MySQL官方Yum仓库配置包,这个包会向系统中添加MySQL的软件源,使得后续可以通过yum或dnf直接安装MySQL。 |
yum install -y mysql-community-server / dnf install -y mysql-community-server |
从已配置的Yum仓库中安装MySQL社区版服务器软件包。-y参数表示自动回答“是”,避免交互式中断。 |
systemctl start mysqld and systemctl enable mysqld |
start命令立即启动MySQL服务,enable命令将MySQL服务设置为开机自启动,确保服务器重启后数据库能自动运行。 |
TEMP_PASSWORD=$(grep ...) |
从MySQL的初始日志文件/var/log/mysqld.log中,使用grep和awk命令提取出首次安装后系统生成的临时root密码。 |
mysqladmin -u root -p"$TEMP_PASSWORD" password "$MYSQL_ROOT_PASSWORD" |
使用mysqladmin客户端工具,以临时密码登录,并将root用户的密码修改为我们脚本中预设的新密码,这是自动化中最关键的一步。 |
执行脚本与验证安装
脚本编写并保存后,执行过程非常简单。
-
保存脚本:将上述代码内容保存到服务器上,文件名为
install_mysql.sh。 -
赋予执行权限:
chmod +x install_mysql.sh
-
执行脚本:
sudo ./install_mysql.sh
脚本运行时,会打印出详细的步骤信息,您只需等待几分钟,直到看到“MySQL 安装成功!”的提示。

验证安装:
安装完成后,可以通过以下方式验证MySQL是否正常运行:
-
检查服务状态:
systemctl status mysqld
输出中应包含
active (running)字样。 -
登录MySQL: 使用脚本中设置的密码尝试登录。
mysql -u root -p
输入密码后,如果能成功进入MySQL命令行界面(
mysql>),则证明安装和配置完全成功。
通过以上步骤,您便拥有了一套标准化的、可重复的MySQL自动部署流程,极大地简化了在CentOS环境下的数据库初始化工作。
相关问答 (FAQs)
问题1:如何指定安装特定版本的 MySQL,MySQL 5.7 而不是默认的最新版?

解答:MySQL的官方Yum仓库默认启用最新的稳定版(如8.0),要安装5.7版本,您需要在安装服务器软件包之前,手动禁用默认的子仓库并启用5.7的子仓库,可以在脚本的yum install步骤前加入以下命令(以CentOS 7为例):
# 安装yum-config-manager工具 yum install -y yum-utils # 禁用8.0仓库 yum-config-manager --disable mysql80-community # 启用5.7仓库 yum-config-manager --enable mysql57-community # 然后再执行安装命令 yum install -y mysql-community-server
这样,yum就会从5.7的仓库中获取软件包进行安装,MySQL 5.7的初始密码策略和部分配置与8.0略有不同,可能需要相应调整脚本中的密码修改逻辑。
问题2:如果脚本执行中途失败,我该怎么办?
解答:脚本执行失败通常有特定原因,应仔细查看终端输出的错误信息,它是最直接的诊断依据。
- 网络问题:检查服务器的网络连接是否正常,能否访问
dev.mysql.com。 - 权限问题:确认是否已使用
sudo执行脚本。 - 依赖冲突:如果系统之前安装过其他数据库(如MariaDB),可能会导致冲突,需先卸载旧版本:
yum remove mariadb-libs。 - 部分安装状态:如果脚本在安装MySQL服务包后失败,再次运行前最好进行一次清理,以避免残留文件影响下一次安装,可以手动执行以下命令:
systemctl stop mysqld yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs rm -rf /var/lib/mysql rm -rf /var/log/mysqld.log
清理完毕后,再重新运行脚本即可。