- 环境:centos7
- 版本:8.0.28
- 安装包:mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 二进制包
- 要求:安装包和shell脚本在同一目录下
- 执行方式:
sudo ./install_mysql8.sh
#!/bin/bashMYSQL_DIR="/usr/local/mysql-8.0.28-linux-glibc2.12-x86_64"MYSQL_TAR="mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz"if [ ! -d "$MYSQL_DIR" ]; thenecho "正在解压MySQL安装包..."tar -xvf "$MYSQL_TAR" -C /usr/local/ln -s "$MYSQL_DIR" /usr/local/mysqlelseecho "MySQL安装包已存在,跳过解压。"fiif ! id -u mysql >/dev/null 2>&1; thenecho "正在创建MySQL用户和组..."groupadd mysqluseradd -r -g mysql -s /bin/false mysqlelseecho "MySQL用户已存在,跳过创建。"fiif [ ! -f /etc/mysql/my.cnf ]; thenecho "正在创建MySQL配置文件..."mkdir -p /etc/mysqlcat > /etc/mysql/my.cnf <<EOF[client]socket=/var/lib/mysql/mysql.sock[mysql]prompt=(\\u@\\h) [\\d]>\\_ # 更改MySQL客户端命令>前面显示内容[mysqld]port=3306user=mysqlsocket=/var/lib/mysql/mysql.sockdatadir=/usr/local/mysql/datalog_error=error.logEOFelseecho "MySQL配置文件已存在,跳过创建。"fiif [ ! -d /usr/local/mysql/data ]; thenecho "正在初始化MySQL数据库..."cd /usr/local/mysqlmkdir -p mysql-fileschown mysql:mysql mysql-fileschmod 750 mysql-filesbin/mysqld --initialize --user=mysqlecho "等待MySQL生成临时密码..."for i in {1..30}; doif [ -f /usr/local/mysql/data/error.log ]; thentemp_password=$(grep 'temporary password' /usr/local/mysql/data/error.log | awk '{print $NF}')if [ -n "$temp_password" ]; thenecho "MySQL临时密码: $temp_password"breakfifisleep 1doneif [ -z "$temp_password" ]; thenecho "无法获取MySQL临时密码,请检查/usr/local/mysql/data/error.log"exit 1fielseecho "MySQL数据目录已存在,跳过初始化。"fiif [ ! -f /etc/systemd/system/mysqld.service ]; thenecho "正在创建systemd服务文件..."cat > /etc/systemd/system/mysqld.service <<EOF[Unit]Description=MySQL ServerAfter=network.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnfExecStop=/usr/local/mysql/bin/mysqladmin shutdownRestart=on-failure[Install]WantedBy=multi-user.targetEOFelseecho "systemd服务文件已存在,跳过创建。"fiif [ ! -d /var/lib/mysql/ ]; thenmkdir /var/lib/mysql/chown -R mysql:mysql /var/lib/mysqlchmod 750 /var/lib/mysqlelseecho "/var/lib/mysql目录已存在,跳过创建。"fisystemctl daemon-reloadsystemctl start mysqldsystemctl enable mysqldif ! grep -q '/usr/local/mysql/bin' /etc/profile; thenecho 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profileexport PATH=$PATH:/usr/local/mysql/binecho "环境变量已添加到 /etc/profile 并立即生效。"echo "如需全局生效,请手动执行以下命令:"echo "source /etc/profile"elseecho "环境变量已配置,跳过。"fiif mysql --version >/dev/null 2>&1; thenecho "MySQL 8 安装成功!"elseecho "MySQL 安装失败,请检查日志。"exit 1fi