shell脚本自动安装MySQL8

  • 环境:centos7
  • 版本:8.0.28
  • 安装包:mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 二进制包
  • 要求:安装包和shell脚本在同一目录下
  • 执行方式:sudo ./install_mysql8.sh
shell 复制代码
#!/bin/bash


# 定义MySQL安装目录和压缩包名称

MYSQL_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"

  

# 检查MySQL目录是否存在,不存在则解压并创建符号链接

if [ ! -d "$MYSQL_DIR" ]; then

    echo "正在解压MySQL安装包..."

    tar -xvf "$MYSQL_TAR" -C /usr/local/

    ln -s "$MYSQL_DIR" /usr/local/mysql

else

    echo "MySQL安装包已存在,跳过解压。"

fi

  

# 检查MySQL用户是否存在,不存在则创建

if ! id -u mysql >/dev/null 2>&1; then

    echo "正在创建MySQL用户和组..."

    groupadd mysql

    useradd -r -g mysql -s /bin/false mysql

else

    echo "MySQL用户已存在,跳过创建。"

fi

  

# 检查MySQL配置文件是否存在,不存在则创建

if [ ! -f /etc/mysql/my.cnf ]; then

    echo "正在创建MySQL配置文件..."

    mkdir -p /etc/mysql

    cat > /etc/mysql/my.cnf <<EOF

[client]

socket=/var/lib/mysql/mysql.sock

  

[mysql]

prompt=(\\u@\\h) [\\d]>\\_    # 更改MySQL客户端命令>前面显示内容

  

[mysqld]

port=3306

user=mysql

socket=/var/lib/mysql/mysql.sock

datadir=/usr/local/mysql/data

log_error=error.log

EOF

else

    echo "MySQL配置文件已存在,跳过创建。"

fi

  

# 检查MySQL数据目录是否存在,不存在则初始化数据库

if [ ! -d /usr/local/mysql/data ]; then

    echo "正在初始化MySQL数据库..."

    cd /usr/local/mysql

    mkdir -p mysql-files

    chown mysql:mysql mysql-files

    chmod 750 mysql-files

    bin/mysqld --initialize --user=mysql

  

    # 获取临时root密码

    echo "等待MySQL生成临时密码..."

    for i in {1..30}; do

        if [ -f /usr/local/mysql/data/error.log ]; then

            temp_password=$(grep 'temporary password' /usr/local/mysql/data/error.log | awk '{print $NF}')

            if [ -n "$temp_password" ]; then

                echo "MySQL临时密码: $temp_password"

                break

            fi

        fi

        sleep 1

    done

  

    if [ -z "$temp_password" ]; then

        echo "无法获取MySQL临时密码,请检查/usr/local/mysql/data/error.log"

        exit 1

    fi

else

    echo "MySQL数据目录已存在,跳过初始化。"

fi

  

# 检查systemd服务文件是否存在,不存在则创建

if [ ! -f /etc/systemd/system/mysqld.service ]; then

    echo "正在创建systemd服务文件..."

    cat > /etc/systemd/system/mysqld.service <<EOF

[Unit]

Description=MySQL Server

After=network.target

  

[Service]

User=mysql

Group=mysql

ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf

ExecStop=/usr/local/mysql/bin/mysqladmin shutdown

Restart=on-failure

  

[Install]

WantedBy=multi-user.target

EOF

else

    echo "systemd服务文件已存在,跳过创建。"

fi

  

if [ ! -d /var/lib/mysql/ ]; then

    mkdir /var/lib/mysql/

    chown -R mysql:mysql /var/lib/mysql

    chmod 750 /var/lib/mysql

else

    echo "/var/lib/mysql目录已存在,跳过创建。"

fi

  

# 启动并启用MySQL服务

systemctl daemon-reload

systemctl start mysqld

systemctl enable mysqld

  

# 配置环境变量

if ! grep -q '/usr/local/mysql/bin' /etc/profile; then

    echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile

    # 直接修改当前 Shell 的环境变量

    export PATH=$PATH:/usr/local/mysql/bin

    echo "环境变量已添加到 /etc/profile 并立即生效。"

    echo "如需全局生效,请手动执行以下命令:"

    echo "source /etc/profile"

else

    echo "环境变量已配置,跳过。"

fi

  

# 检查MySQL是否安装成功

if mysql --version >/dev/null 2>&1; then

    echo "MySQL 8 安装成功!"

else

    echo "MySQL 安装失败,请检查日志。"

    exit 1

fi
相关推荐
想躺在地上晒成地瓜干7 分钟前
树莓派超全系列文档--(12)如何使用raspi-config工具其一
linux·树莓派·raspberrypi·raspi-config
s_little_monster22 分钟前
【Linux】进程信号的产生
linux·运维·服务器·经验分享·笔记·学习·学习方法
贺椿椿24 分钟前
简单易懂易操作的liunx安装es集群
linux·运维·服务器
戏神24 分钟前
Jenkins在Rocky Linux 8上的安装与部署全流程指南
java·linux·运维·jenkins·maven·持续集成·rockylinux
Allen Bright1 小时前
【MySQL基础-16】MySQL DELETE语句:深入理解与应用实践
数据库·mysql
程序员yt1 小时前
双非一本毕业测试工作一年想转C++开发,嵌入式Linux与音视频方向哪个方向更合适?
linux·c++·音视频
手打猪大屁1 小时前
Ubuntu和Windows实现文件互传
linux·windows·ubuntu
Hey! Hey!1 小时前
Ubuntu与CentOS操作指令的主要区别详解
linux·ubuntu·centos
小度爱学习2 小时前
MySQL数据库和表的操作之SQL语句
数据库·sql·mysql
壮Sir不壮2 小时前
Unix/Linux 系统下的文件权限
linux·服务器·unix·极限编程