MySQL 全版本一键安装

#!/bin/bash
#################Download mysql service
#定义目录
MYSQL_HOME="/mysql/$1app"           # 软件安装目录
MYSQL_DATA="/mysql/$1data"          # 数据目录
mysql_prot="$1"
mysql_prot="${mysql_prot//./}"
MYSQL_LOG="/mysql/$1log"            # 日志目录
MYSQL_USER="mysql"                  # 运行用户
CONF_FILE="$MYSQL_HOME/my.cnf"      # 配置文件路径
MYSQL_GROUP="mysql"                 # MySQL 用户组
# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'if [ $# -ne 1 ]; then
    echo -e "${RED}ERROR${NC}:Please enter the corresponding mysql version number"
    exit 1
fi
version=$1
base_url='https://downloads.mysql.com/archives/get/p/23/file/mysql-'
if [[ $version == 5.7.* ]]; then
    pkg_name="mysql-${version}-linux-glibc2.12-x86_64.tar.gz"
    full_url="${base_url}${version}-linux-glibc2.12-x86_64.tar.gz"
elif [[ $version == 8.0.* ]]; then
    pkg_name="mysql-${version}-linux-glibc2.28-x86_64.tar.xz"
    full_url="${base_url}${version}-linux-glibc2.28-x86_64.tar.xz"
else
    echo "Unsupported version. Only 5.7.x and 8.0.x are supported."
    exit 1
fi
echo -e "${GREEN}Downloading MySQL version $version from: $full_url${NC}"

# 使用wget静默下载,仅显示进度条
if wget -q --show-progress -c $full_url; then
    echo -e "${GREEN}Download completed successfully.${NC}"
else
    echo -e "${RED}Download failed.${NC}"
    exit 1
fi
#################环境部署
# 检查目录是否存在,不存在则创建
mkdir -p $MYSQL_HOME $MYSQL_DATA
# 解压到安装目录
echo -e "${GREEN}正在解压到 ${MYSQL_HOME}...${NC}"
if [[ $version == 5.7.* ]]; then
    tar -xzf $pkg_name -C $MYSQL_HOME --strip-components=1
elif [[ $version == 8.0.* ]]; then
    tar -xJf $pkg_name -C $MYSQL_HOME --strip-components=1
fi
# 创建 MySQL 用户和组
if ! id -u $MYSQL_USER >/dev/null 2>&1; then
    groupadd $MYSQL_GROUP
    useradd -r -g $MYSQL_GROUP -s /bin/false $MYSQL_USER
    echo -e "${GREEN}已创建用户 ${MYSQL_USER} 和组 ${MYSQL_GROUP}${NC}"
fi
# 设置目录权限
chown -R $MYSQL_USER:$MYSQL_GROUP $MYSQL_HOME $MYSQL_DATA
chmod -R 750 $MYSQL_HOME $MYSQL_DATA
# 输出成功信息
echo -e "${GREEN}MySQL ${version} 安装完成!${NC}"
echo -e "软件安装目录: ${MYSQL_HOME}"
echo -e "数据目录: ${MYSQL_DATA}"
echo -e "MySQL 用户: ${MYSQL_USER}"
echo -e "MySQL 组: ${MYSQL_GROUP}"
echo -e "MySQL_LOG:${MYSQL_LOG}"
# 清理安装包
rm -f $pkg_name
# 1. 清理并重建目录结构
echo -e "\033[34m[1/6] 准备目录...\033[0m"
rm -rf "$MYSQL_DATA"/* 2>/dev/null
mkdir -p "$MYSQL_DATA" "$MYSQL_LOG"
touch "$MYSQL_LOG/error.log" "$MYSQL_LOG/mysqld_safe.log"

# 2. 设置权限
echo -e "\033[34m[2/6] 设置权限...\033[0m"
chown -R "$MYSQL_USER":"$MYSQL_USER" "$MYSQL_HOME" "$MYSQL_DATA" "$MYSQL_LOG"
chmod 750 "$MYSQL_DATA" "$MYSQL_LOG"

# 3. 生成配置文件
echo -e "\033[34m[3/6] 生成配置文件...\033[0m"
cat > "$CONF_FILE" << EOF
[mysqld]
explicit_defaults_for_timestamp=ON
user=$MYSQL_USER
basedir=$MYSQL_HOME
datadir=$MYSQL_DATA
socket=$MYSQL_HOME/mysql.sock
server_id=666
port=$mysql_prot
character_set_server=utf8mb4
lower_case_table_names=1
default-time-zone='+8:00'
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format=ROW
log_slave_updates=ON
expire_logs_days=7
log_bin=mysql-bin
log_bin=/date/mysql-bin
expire_logs_days=3
server-id=1
log-error=$MYSQL_LOG/error.log
general_log=1
general_log_file=/date/audit.log
max_allowed_packet=16777216
log_timestamps='SYSTEM'
skip-name-resolve
#sql_mode=
[mysqld_safe]
log-error=$MYSQL_LOG/mysqld_safe.log
[mysql]
socket=$MYSQL_HOME/mysql.sock
EOF
# 4. 初始化数据库
echo -e "\033[34m[4/6] 初始化MySQL...\033[0m"
if ! "$MYSQL_HOME"/bin/mysqld \
    --defaults-file="$CONF_FILE" \
    --initialize \
    --user="$MYSQL_USER" \
    --console 2>"$MYSQL_LOG/init.log"; then
    echo -e "\033[31m初始化失败!查看日志:$MYSQL_LOG/init.log\033[0m"
    exit 1
fi
# 5. 获取临时密码
temp_password=$(grep 'temporary password' "$MYSQL_LOG/error.log" | awk '{print $NF}')
echo -e "\033[34m[5/6] 临时密码:\033[35m$temp_password\033[0m"

# 6. 启动MySQL服务
echo -e "\033[34m[6/6] 启动MySQL服务...\033[0m"
sudo -u "$MYSQL_USER" "$MYSQL_HOME"/bin/mysqld_safe \
    --defaults-file="$CONF_FILE" \
    --user="$MYSQL_USER" \
    --ledir="$MYSQL_HOME/bin" \
    --datadir="$MYSQL_DATA" \
    >/dev/null 2>&1 &
# 等待启动完成
sleep 5
if ! pgrep -f "mysqld" >/dev/null; then
    echo -e "\033[31m启动失败!查看日志:$MYSQL_LOG/error.log\033[0m"
    exit 1
fi
# 输出结果
cat << EOF
[SUCCESS]:MySQL已就绪~_~
----------------------------------
软件目录: $MYSQL_HOME
数据目录: $MYSQL_DATA
日志目录: $MYSQL_LOG
运行用户: $MYSQL_USER
进程PID: $(pgrep -ft "mysqld")
临时密码: \033[31m$temp_password\033[0m
登录命令: $MYSQL_HOME/bin/mysql -uroot -p'$temp_password' --socket=$MYSQL_HOME/mysql.sock
设置密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';flush privileges;
启动命令:$MYSQL_HOME/bin/mysqld_safe --defaults-file=$CONF_FILE --user=$MYSQL_USER
停止命令: kill $(pgrep -f "mysqld")
EOF

 

posted @ 2022-11-06 17:24  鄧萌  阅读(44)  评论(0)    收藏  举报