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
相关推荐
星恒随风6 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
爱码少年8 小时前
Springboot下如何将CSV文件数据导入H2、Mysql数据库表
数据库·mysql·csv
2603_969694859 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
唐墨12310 小时前
linux kernel 比较数据大小的宏定义
linux·算法
程序开发阿元10 小时前
密码不进工具:一个独立开发者的服务器凭据管理办法
linux·ssh
AR-26710-13 小时前
Linux Day33——定时任务+lvm
linux·运维
墨痕诉清风14 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
byte轻骑兵14 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙
瓦瓦gogo15 小时前
从一个 TypeScript 函数开始理解 MCP 协议
linux·ubuntu·typescript
鱼听禅16 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu