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
学海无涯,不进则退,日积跬步,以至千里。本博客所写内容仅为个人在学习和研究过程中的一些心得体会及总结笔记,仅代表个人观点。一切以官方为准,版本差异请自行甄别

浙公网安备 33010602011771号