- A+
所属分类:Shell
执行完脚本后需要手动修改密码
#!/bin/bash
# MySQL安装脚本 - 适用于 CentOS 系统
# 脚本功能:自动安装MySQL 5.7.32并完成基础配置
# 定义颜色变量,用于输出提示信息
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 重置颜色
echo -e "${YELLOW}开始安装MySQL数据库,请稍候...${NC}"
# 检查是否为root用户,非root用户无法执行安装
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}错误:请使用root用户执行此脚本!${NC}"
exit 1
fi
# 安装依赖包
echo -e "${YELLOW}安装MySQL依赖包...${NC}"
yum -y install libaio || {
echo -e "${RED}依赖包安装失败,请检查网络连接或系统环境!${NC}"
exit 1
}
# 下载MySQL安装包
echo -e "${YELLOW}下载MySQL安装包...${NC}"
DOWNLOAD_URL="https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-el7-x86_64.tar.gz"
INSTALL_PACKAGE="mysql-5.7.32-el7-x86_64.tar.gz"
# 检查安装包是否已存在,不存在则下载
if [ ! -f "$INSTALL_PACKAGE" ]; then
wget $DOWNLOAD_URL || {
echo -e "${RED}下载MySQL安装包失败,请手动下载后放置于当前目录!${NC}"
exit 1
}
else
echo -e "${GREEN}安装包已存在,跳过下载...${NC}"
fi
# 解压安装包并移动到指定目录
echo -e "${YELLOW}解压并安装MySQL...${NC}"
tar xvf $INSTALL_PACKAGE || {
echo -e "${RED}解压安装包失败!${NC}"
exit 1
}
MYSQL_DIR="mysql-5.7.32-el7-x86_64"
TARGET_DIR="/usr/local/mysql-5.7.32"
if [ -d "$TARGET_DIR" ]; then
echo -e "${YELLOW}目标目录已存在,将其备份...${NC}"
mv "$TARGET_DIR" "${TARGET_DIR}_$(date +%Y%m%d%H%M%S)"
fi
mv "$MYSQL_DIR" "$TARGET_DIR" || {
echo -e "${RED}移动安装目录失败!${NC}"
exit 1
}
# 创建软链接
ln -sf "$TARGET_DIR" "/usr/local/mysql" || {
echo -e "${RED}创建软链接失败!${NC}"
exit 1
}
# 配置my.cnf文件
echo -e "${YELLOW}配置MySQL参数文件...${NC}"
MY_CNF="/etc/my.cnf"
# 备份原有配置文件(如果存在)
if [ -f "$MY_CNF" ]; then
echo -e "${YELLOW}备份原有配置文件...${NC}"
cp "$MY_CNF" "${MY_CNF}.bak_$(date +%Y%m%d%H%M%S)"
fi
# 写入新的配置内容
cat > "$MY_CNF" << 'EOF'
[client]
socket = /usr/local/mysql/tmp/mysql.sock
port = 3306
default-character-set = utf8mb4
[mysqld]
user = mysql
pid-file = /usr/local/mysql/tmp/mysqld.pid
socket = /usr/local/mysql/tmp/mysql.sock
datadir = /data/mysql
log-error = /usr/local/mysql/logs/mysqld.log
bind-address = 0.0.0.0
port = 3306
log-bin = mysql-bin
server_id = 1
binlog_format = mixed
skip_symbolic_links = 1
max_connections = 500
connect_timeout = 10
wait_timeout = 600
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
explicit_defaults_for_timestamp = 1
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE
[mysqldump]
quick
quote-names
max_allowed_packet = 64M
EOF
# 创建数据目录和日志目录
echo -e "${YELLOW}创建数据和日志目录...${NC}"
mkdir -p /data/mysql /usr/local/mysql/{logs,tmp} || {
echo -e "${RED}创建目录失败!${NC}"
exit 1
}
# 创建MySQL用户
echo -e "${YELLOW}创建MySQL用户和授权...${NC}"
useradd -s /sbin/nologin -M mysql || {
echo -e "${YELLOW}MySQL用户已存在,跳过创建...${NC}"
}
chown -R mysql:mysql /usr/local/mysql* || {
echo -e "${RED}目录权限设置失败!${NC}"
exit 1
}
# 初始化MySQL
echo -e "${YELLOW}初始化MySQL数据库...${NC}"
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize || {
echo -e "${RED}MySQL初始化失败!${NC}"
exit 1
}
# 设置开机自启
echo -e "${YELLOW}设置MySQL开机自启...${NC}"
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld || {
echo -e "${RED}复制启动脚本失败!${NC}"
exit 1
}
chmod +x /etc/init.d/mysqld || {
echo -e "${RED}设置启动脚本权限失败!${NC}"
exit 1
}
systemctl daemon-reload || {
echo -e "${YELLOW}系统服务重载失败,继续尝试启动...${NC}"
}
systemctl start mysqld.service || {
echo -e "${RED}启动MySQL服务失败!${NC}"
exit 1
}
systemctl enable mysqld.service || {
echo -e "${YELLOW}设置开机自启失败,但MySQL已正常启动${NC}"
}
# 配置环境变量
echo -e "${YELLOW}配置MySQL环境变量...${NC}"
ENV_SCRIPT="/etc/profile.d/mysqld.sh"
echo "export PATH=/usr/local/mysql/bin:\$PATH" > "$ENV_SCRIPT" || {
echo -e "${RED}环境变量配置失败!${NC}"
exit 1
}
source /etc/profile || {
echo -e "${YELLOW}环境变量刷新失败,请手动执行 source /etc/profile${NC}"
}
# 查找临时密码并提示用户
echo -e "${YELLOW}查找MySQL临时密码...${NC}"
TEMP_PASSWORD=$(grep 'temporary password' /usr/local/mysql/logs/mysqld.log | awk '{print $11}')
if [ -n "$TEMP_PASSWORD" ]; then
echo -e "${GREEN}MySQL安装完成!${NC}"
echo -e "${YELLOW}临时登录密码:$TEMP_PASSWORD${NC}"
echo -e "${YELLOW}请使用以下命令登录并修改密码:${NC}"
echo -e "mysql -uroot -p"
echo -e "${YELLOW}然后执行:${NC}"
echo -e "ALTER USER root@localhost IDENTIFIED BY '新密码';"
else
echo -e "${YELLOW}未找到临时密码,请手动查看日志文件:${NC}"
echo -e "cat /usr/local/mysql/logs/mysqld.log"
fi
echo -e "${GREEN}MySQL安装脚本执行完毕!${NC}"
