当前位置: 首页 > news >正文

shell脚本自动安装MySQL8

  • 环境:centos7
  • 版本:8.0.28
  • 安装包:mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 二进制包
  • 要求:安装包和shell脚本在同一目录下
  • 执行方式:sudo ./install_mysql8.sh
#!/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

相关文章:

  • 使用Redis实现分布式锁,基于原本单体系统进行业务改造
  • python-leetcode 31.K个一组翻转链表
  • Selenium常用自动化函数
  • Jenkins 通过 Execute Shell 执行 shell 脚本 七
  • 读取本地excel并生成map,key为第一列,value为第二列
  • leetcode:171. Excel 表列序号(python3解法)
  • 深入解析 STM32 GPIO:结构、配置与应用实践
  • DeepSeek 助力 Vue 开发:打造丝滑的通知栏(Notification Bar)
  • 网络模型分层与对比
  • PostgreSQL 备库的延迟问题
  • 哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测
  • 6.appender
  • MySQL、MariaDB 和 TDSQL 的区别
  • 10 FastAPI 的自动文档
  • Golang的图形编程应用案例
  • github不翻墙就可以访问
  • 数据结构——【二叉树模版】
  • vue项目使用vite和vue-router实现history路由模式空白页以及404问题
  • fetch() 与 XMLHttpRequest 的差异
  • AI知识库和全文检索的区别
  • 美将解除对叙利亚制裁,外交部:中方一贯反对非法单边制裁
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • 杭勇已任常州市政协党组成员,此前任常州市委常委、秘书长
  • 多家外资看好中国市场!野村建议“战术超配”,花旗上调恒指目标价
  • 耗资10亿潮汕豪宅“英之园”将强拆?区政府:非法占用集体土地
  • 一海南救护车在西藏无任务拉警笛开道,墨脱警方:已处罚教育