• 搜索
  • 夜间模式
    ©2026  依刻学习 Theme by OneBlog

    依刻学习博客

    搜索
    标签
  • 首页>
  • 学习的一天>
  • 正文
  • mysql一键启动脚本(2)

    2025年01月16日 14 阅读 0 评论 3951 字

    前言

    学习mysql8.0,更新脚本,支持选择安装mysql8.0/5.7
    但是目前碰到了关于引号的问题,暂时无法解决

    脚本

    #/bin/bash
    #version: v2
    #author: YK
    #update: 可以选择版本,安装mysql5.7或8.4,修改了卸载bug
    
    #网络测试
    ping -c2 223.109.81.112 &>/dev/null    #百度IP
    if [ $? -ne 0 ]; then    #$?代表上一个命令执行结果,0为正确 
      echo "网络不通";
      exit 0;
    else 
      ping -c2 www.baidu.com &>/dev/null
      if [ $? -ne 0 ]; then
        echo "DNS有问题";
        exit 0;
      fi
    fi
      
    
    #存放路径
    echo -e "mysql的rpm包存放路径(默认为/usr/local/mysql):\n注意,会清空该目录"
    read rpm_where
    locate=${rpm_locate:-"/usr/local/mysql"}
    if [ ! -d ${locate} ]; then
    #-d 匹配目录是否存在,存在时为true,使用!可以取反
      mkdir -p ${locate} 
    fi
    rm ${locate}/mysql-* -f
    
    groupadd mysql &>/dev/null
    useradd -r -g mysql mysql &>/dev/null
    chown -R mysql:mysql /usr/local/mysql
    chmod -R 755 /usr/local/mysql  
    
    #安装版本
    echo -e "安装mysql5.7?\nyes-->5.7\nno -->8.4 "
    #使用 -e才能解释转义字符,否则类型\n都不会解释
    while true; do
      read -p "请输入 (默认为yes): " version
      version=${version:-"yes"}
      case ${version} in
        [Yy][Ee][Ss])
        #注意选项末尾有个')'
        #此方法无视大小写且简单易实现
          is_mysql57=$(ls ${locate}|grep mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar|wc -l )
          if [ ${is_mysql57} -eq 0 ]; then
            echo "正在下载mysql5.7"
            wget  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar -P ${locate}  &>/devnull
          fi
          echo "已经下载mysql5.7"
          break
          #此break是对于外循环while的,case本身不需要break
          ;;
        [Nn][Oo])
          is_mysql84=$(ls ${locate}|grep mysql-8.4|grep el7.x86_64.rpm-bundle.tar|wc -l )
          if [ ${is_mysql84} -eq 0 ]; then
            echo "正在下载mysql8.4"
            wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.4-1.el7.x86_64.rpm-bundle.tar -P ${locate}  &>/dev/null
          #wget的-P可以指定下载的位置
          fi
          echo "已经下载mysql8.4 "
          break
          ;;
        *)
          echo "请输入yes/no,或使用'ctrl+c'退出"    
          ;;
      esac
    done
    echo "下载完成"
    
    
    
    echo "mysql密码(默认密码为MyStr0ngP@ssw0rd!):"
    read secret_n
    secret_new=${secret_n:-"MyStr0ngP@ssw0rd!"}
    echo "mysql密码:$secret_new"
    
    echo "正在删除旧安装包"
    rpm -qa|grep mysql* |xargs yum remove -y >&/dev/null
    rpm -qa|grep mariadb* |xargs yum remove -y >&/dev/null
    rpm -qa|grep mysql*|xargs rpm -e >&/dev/null
    rm -rf /var/lib/mysql/*
    rm -f /var/log/mysqld.log
    
    
    #安装
    echo "正在安装"
    cd $locate
    yum -y install libaio net-tools openssl-devel perl-Data-Dumper perl-JSON perl-Test-More  >&/dev/null
    tar xf mysql*
    #导入认证密钥
    sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
    #以下安装包严格按顺序安装
    rpm -ivh ${locate}/mysql-community-client-plugins-*.el7.x86_64.rpm >&/dev/null
    rpm -ivh ${locate}/mysql-community-common-*.el7.x86_64.rpm >&/dev/null
    rpm -ivh ${locate}/mysql-community-libs-*.el7.x86_64.rpm >&/dev/null
    rpm -ivh ${locate}/mysql-community-client-*.el7.x86_64.rpm >&/dev/null
    rpm -ivh ${locate}/mysql-community-icu-data-files-8.4*.el7.x86_64.rpm >&/dev/null
    rpm -ivh ${locate}/mysql-community-devel-*.el7.x86_64.rpm >&/dev/null
    ls mysql-community-client-*.el7.x86_64.rpm |head -1|xargs rpm -ivh >&/dev/null
    rpm -ivh ${locate}/mysql-community-server-*.el7.x86_64.rpm >&/dev/null
    #以下包未安装mysql-community-server-debug-8.4.4-1.el7.x86_64.rpm;mysql-community-test-8.4.4-1.el7.x86_64.rpm;mysql-community-debuginfo-8.4.4-1.el7.x86_64.rpm
    
    
    if [ $? -ne 0 ]; then
      echo "安装失败"
      exit 0
    fi
    #5.7和8.4都有一部分组件没有安装
    
    #启动
    mysql_run=0
    echo "正在启动mysql"
    systemctl daemon-reload
    while [ "$mysql_run" -ne 1 ]
    do
       mysql_run=$(systemctl status mysqld|grep running |wc -l)
       systemctl enable --now  mysqld
       #如果没有,可以手动写service或者直接使用命令启动
       #/usr/local/mysql/bin/mysqld --initialize --user=mysql 
       sleep 10
    done
    
    echo "mysql已启动"
    
    rm ${locate}/mysql-* -f
    #改密码
    secret_old=\'$(grep 'temporary password' /var/log/mysqld.log|awk  '{print $NF}'| tr -d ';')\'
    sleep 3
    echo -e "mysqladmin -u root -p$secret_old password 'MyStr0ngP@ssw0rd!'\n该命令可以更换root密码,但是因为直接在命令行内输入新密码,会出现警告,这里仅仅是给个示例"
    echo "mysql -uroot -p'MyStr0ngP@ssw0rd!'"
    本文著作权归作者 [ wymm ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.018 s
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。