MySQL自动安装脚本分享

这篇具有很好参考价值的文章主要介绍了MySQL自动安装脚本分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里分享一个我写的MySQL自动安装脚本mysql_auto_install.sh,它的功能非常简单,就是自动化安装MySQL单实例,让DBA的工作更简单、轻松一些,不用去手工安装MySQL实例。从简单重复的工作中释放出来。

下面是关于mysql_auto_install.sh脚本的一些说明:

  • 1:这个脚本运行在mysql用户下(注意,root用户下运行会报错,需要修改部分地方),主要原因是因为DBA没有root账号权限,只有mysql用户的权限。另外,我也写了一个mysql_auto_install_root.sh脚本,这个脚本是在root用户下面运行,功能更多一些。暂时还在测试当中。

  • 2:此脚本运行在mysql用户下,因为权限问题,不会禁用透明大页,卸载RPM包,调整内核参数、配置systemctl服务等操作,这些工作交给系统管理员处理。而且我们也假设这些都已经是设定好了的。

  • 3:此脚本只适用于Linux,不适用HP-UX等操作系统。

  • 4:my.cnf的模板中的参数要跟脚本中的参数一致。否则可能有问题。另外模板中参数设置请自己保证正确性与合理性。

  • 5:脚本经过多次测试验证,但是并不保证各种场景都没有bug。发现问题,欢迎反馈,我自己也在不断完善、改进这个脚本。

  • 6: 安装前,要准备好MySQL安装介质、mysql_auto_install.sh、alter_root_passwd.sql,my.cnf的模板(这里命名为mysql8_template.cnf)

其中alter_root_passwd.sql是修改root密码的脚本,如下所示,根据实际情况输入密码,安装完成后,删除此脚本。

ALTER USER 'root'@'localhost' IDENTIFIED BY '********';
flush privileges;

mysql_auto_install.sh脚本的详情如下(格式可能因为代码插件展示问题,有所混乱,请自行调整。原始脚本格式不会有下面乱七八糟的缩进或不对齐问题)

#!/bin/bash

#########################################################################################
#                                                                                       #
# This script is used for auto install mysql 8.0.xx                                     #
#                                                                                       #
#########################################################################################
#                                                                                       #
# ScriptName            :    mysql_auto_install.sh                                      #
# Author                :    潇湘隐者                                                   #
# CreateDate            :    2019-09-06                                                 #
# Blogs                 :    www.cnblogs.com/kerrycode                                  #
# Email                 :    kerry2008code@qq.com                                       #
#***************************************************************************************#
# 参数配置                                                                              #
#---------------------------------------------------------------------------------------#
# MYSQL_BASE_DIR        /opt/mysql                                                      #
# MYSQL_DATA_DIR        /data/mysql                                                     #
# MYSQL_PORT            3306                                                            #
# LOG_OUT_TYPE          log                                                             #
#---------------------------------------------------------------------------------------#
# 注意事项:                                                                            #
#   1:如果维护的MySQL数据库都规范化安装、配置的化,下面很多参数都不需要修改            #
#   2:my.cnf模板很重要,如果配置有问题,可能导致安装失败。脚本里面有些参数设定都是依赖 #
#       my.cnf模板中的设置,请确保你的my.cnf模板中设定跟脚本参数一致                    #
#   3:此脚本在mysql用户下安装,很多操作受限,例如禁用透明大页、卸载rpm包,调整内核参数 #
#      如需处理这些 建议使用另外一个版本的脚本处理。此处设定系统管理员已经处理好这些事情#
#      **注意**:此脚本只能在mysql用户下运行,root用户下需要修改部分地方才能成功        #
#---------------------------------------------------------------------------------------#
#***************************************************************************************#
# Version        Modified Date            Description                                   #
#***************************************************************************************#
# V.1.0          2019-09-06              创建此脚本                                     #
# V.1.1          2019-10-26              按SHELL编程规范,重新命名规范各类对象          #
# V.2.0          2023-06-16              重新改写该脚本,增加验证/优化步骤              #
#########################################################################################

# MySQL的安装路径:basedir的上层目录
MYSQL_BASE_DIR=/opt/mysql
# MySQL数据目录:datadir的上层目录
MYSQL_DATA_DIR=/data/mysql
# MySQL安装日志信息
MYSQL_INSTALL_LOG=/tmp/soft/mysql_install.log
# MySQL压缩包路径
MYSQL_INSTALLER_DIR=/tmp/soft
# MySQL安装介质
# 注意事项,如果安装介质不是tar.xz ,请修改代码中tar.xz
MYSQL_INSTALLER=$MYSQL_INSTALLER_DIR/mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
# MySQL的my.cnf模板
MYSQL_CONFIG_FILE=$MYSQL_INSTALLER_DIR/mysql8_template.cnf
# alter_root_passwd文件
SQL_ALTER_USER_PWD=$MYSQL_INSTALLER_DIR/alter_root_passwd.sql
# Log输出方式:log 或out或all
LOG_OUT_TYPE=all
# MySQL的端口号
MYSQL_PORT=3306

# 记录安装过程的日志信息
function log_info()
{
    #判断参数个数
    if [ $# -eq 1 ];then
        local log_msg=$1
    else
        echo "[error]:`date '+%Y%m%d %H:%M:%S'`> the number of parameters is incorrect!"
    fi
    
:<<EOF
    if [ $LOG_OUT_TYPE = "print" ];then
        echo "[info ]: `date`> $log_msg"
    else
        echo "[info ]: `date`> $log_msg" >> $MYSQL_INSTALL_LOG
    fi
EOF
    case $LOG_OUT_TYPE in
        out)
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
            ;;
        log)
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
            ;;
        all)
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
            ;;
        *)
    esac
        
}

# 记录安装过程的错误信息
function log_error()
{
    #判断参数个数
    if [ $# -eq 1 ];then
        local log_msg=$1
    else
        echo "[error]:`date '+%Y%m%d %H:%M:%S'`> the number of parameters is incorrect!"
    fi
    
:<<EOF
    if [ $LOG_OUT_TYPE = "print" ];then
        echo "[error]:`date`> $log_msg"
    else
        echo "[error]:`date`> $log_msg" >> $MYSQL_INSTALL_LOG
    fi
EOF
    case $LOG_OUT_TYPE in
        out)
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
             ;;
        log)
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
             ;;
        all)
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
             ;;
        *)
    esac
}

# 卸载系统自带的MARIADB
#rpm -qa|grep mariadb |xargs yum remove -y > /dev/null

function check_env_setting()
{
    # 检查操作系统是否Linux(此脚本不适用HP-UX/SunOS/AIX)
    if [ `uname -s`="Linux" ];then
        log_info "The os is linux,mysql auto install continue..."
    else
        log_error "the os is not linux, please check it."
        exit 1
    fi

    # 检查存放安装包目录是否存在
    if [ ! -d "$MYSQL_INSTALLER_DIR" ];then
        log_error "the mysql installer directory $MYSQL_INSTALLER_DIR didn't exists, please check it"
        exit 1
    else
        log_info "the mysql installer directory $MYSQL_INSTALLER_DIR exist, mysql auto install continue...";
    fi
    
    # 检查MySQL安装文件是否存在
    if [ ! -f "$MYSQL_INSTALLER" ];then
        log_error "the mysql installer file $MYSQL_INSTALLER didn't exist, please check it"
        exit 1
    else
        log_info  "the mysql installer file $MYSQL_INSTALLER exist, mysql auto install continue..."
    fi
    
    # 检查MySQL的my.cnf的模板文件是否存在
    if [ ! -f $MYSQL_CONFIG_FILE ];then
        log_error "the mysql configuration template file $MYSQL_CONFIG_FILE did'nt exist, please check it"
        exit 1
    else
        log_info "the mysql configuration  template file $MYSQL_CONFIG_FILE exists,mysql auto install continue..."
    fi
    
    # 检查修改mysql数据库用户root密码的SQL文件是否存在。
    if [ ! -f $SQL_ALTER_USER_PWD ];then
        log_error "the sql file $SQL_ALTER_USER_PWD did'nt exist, please check it"
        exit 1
    else
        log_info "the sql file $SQL_ALTER_USER_PWD exists,mysql auto install continue..."
    fi
    
    
    # 检查MySQL安装目录的上层目录是否存在
    if [ ! -d "$MYSQL_BASE_DIR" ];then
        log_error "the $MYSQL_BASE_DIR didn't exists, please check it"
        exit 1
    else
        log_info "the $MYSQL_BASE_DIR exists, mysql auto install continue..."
    fi
    
    # 检查MYSQL_DATA_DIR对应的目录是否存在,此目录为datadir的上一层目录
    if [ ! -d "$MYSQL_DATA_DIR" ];then
        log_error "the $MYSQL_DATA_DIR didn't exists, please check it"
        exit 1
    else
        log_info "the $MYSQL_DATA_DIR exists, mysql auto install continue..."
    fi
    
    # 检查MYSQL_DATA_DIR目录下是否存在其目录,如果有其它目录,则退出安装(担心已经安装了MySQL实例)
    if [ -d ${MYSQL_DATA_DIR} -a "`ls -A ${MYSQL_DATA_DIR}`" != "" ];then
        log_error "the $MYSQL_DATA_DIR directory have exists files,plese check it"
        exit 1
    else 
        log_info "the $MYSQL_DATA_DIR check is ok ,mysql auto install continue..."
    fi
    
    # 验证MySQL安装介质的MD5
    
    
    # 检查是否存在MySQL实例
    mysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:'${MYSQL_PORT}'/) {print "Yes";exit 0}}'`
    echo $mysql_status
    if [ "$mysql_status" = "Yes" ];then
        log_error "MySQL instance exists. please check it"
        exit 1
    else
        #只能作为一个依据,并不能完全保证。
        log_info "MySQL instance didn't exists,mysql auto install continue..."
    fi
    
    echo "check_env_setting run successful."
    #read ANS
    read -n1 -p "Do you want to continue [Y/N]?" answer
    case $answer in
        Y | y)
            log_info "mysql auto install continue...";;
        N | n)
            log_info "mysql auto install exit.";;
        *)
            log_error "your choice is wrong!";;
    esac

}

# 创建MySQL用户和用户组(此处注释,用户由系统管理员创建)
#echo '[info]: create the mysql user...'
#groupadd mysql
#/usr/sbin/groupadd mysql
#useradd -g mysql mysql
#/usr/sbin/useradd -g mysql mysql


# 创建MySQL的相关目录
function create_mysql_dir()
{
    cd $MYSQL_DATA_DIR
    mkdir conf data  logs  slow_logs  bin_logs  mysql_temp
    chmod 750  $MYSQL_DATA_DIR
    #对目录进行授权
    chmod -R 760  $MYSQL_DATA_DIR/bin_logs
    chmod -R 700  $MYSQL_DATA_DIR/logs
    chmod -R 760  $MYSQL_DATA_DIR/slow_logs
}

function mysql_cnf_setting()
{
    # 拷贝my.cnf的模板配置文件,这里不打算直接写入生成my.cnf文件
    cp $MYSQL_CONFIG_FILE $MYSQL_DATA_DIR/conf/my.cnf
    if [ $? -ne 0 ];then
        log_error 'failed to cp the my.cnf,please check it'
        exit 1
    else
        log_info  "cp the $MYSQL_CONFIG_FILE to my.cnf success!"
    fi
}

function mysql_env_setting()
{
    # 设置环境变量
    local env_exist=`cat ~/.bash_profile |grep -E "MYSQL_HISTFILE|$MYSQL_BASE_DIR/mysql8.0/bin" | wc -l`
    if [ $env_exist -eq 0 ];then
        echo "export PATH=\$PATH:$MYSQL_BASE_DIR/mysql8.0/bin" >> ~/.bash_profile
        echo "export MYSQL_HISTFILE=/dev/null" >> ~/.bash_profile
        source ~/.bash_profile
    else
        log_info "the environment variable exists, please check it!"
    fi
}



# 解压MySQL的二进制安装包
function mysql_install()
{
    echo '[info]:unzip the mysql installation media....'
    tar -xvf $MYSQL_INSTALLER -C $MYSQL_BASE_DIR
    if [ $? -ne 0 ];then
        log_error "mysql media unzip failed,please check the detail."
        exit
    else
        log_info  "mysql media unzip success,mysql auto install continue..."
    fi
    
    # 创建软连接
    local MYSQL_MEDIA_DIR=$(basename ${MYSQL_INSTALLER} '.tar.xz')
    #echo  $MYSQL_MEDIA_DIR
    ln -s $MYSQL_BASE_DIR/$MYSQL_MEDIA_DIR  $MYSQL_BASE_DIR/mysql8.0
    if [ $? -ne 0 ];then
        log_error "create the mysql soft link failed, please check it"
        exit 1
    else
        log_info "create the mysql soft link success,mysql auto install continue..."
    fi
    
    
    #  初始化MySQL
    cd $MYSQL_BASE_DIR/mysql8.0
    $MYSQL_BASE_DIR/mysql8.0/bin/mysqld \
    --defaults-file=$MYSQL_DATA_DIR/conf/my.cnf \
    --initialize \
    --basedir=$MYSQL_BASE_DIR/mysql8.0 \
    --datadir=$MYSQL_DATA_DIR/data  2>&1 | >> $MYSQL_INSTALL_LOG
    
    #
    $MYSQL_BASE_DIR/mysql8.0/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR/data
}


function mysql_startup()
{
    $MYSQL_BASE_DIR/mysql8.0/bin/mysqld_safe --defaults-file=$MYSQL_DATA_DIR/conf/my.cnf &
    
    # 休眠几秒,等待MySQL服务启动
    sleep 15
    
    # 检查MySQL服务是否启动成功
    mysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:'${MYSQL_PORT}'/) {print "Yes";exit 0}}'`
    echo $mysql_status
    if [ "$mysql_status" != "Yes" ];then
        log_error "MySQL did not start. please check it"
        exit 1
    else
        log_info "MySQL start success,mysql auto install continue..."
    fi
}

# 修改MySQL的root用户密码
function change_mysql_root_pwd()
{

    # 获取root初始密码
    mysql_root_init_passd=`grep "temporary password" $MYSQL_DATA_DIR/logs/mysql_error.log |awk '{print $NF}'`
    
    # 修改MySQL的root密码
    mysql -uroot -p"$mysql_root_init_passd" --connect-expired-password < $SQL_ALTER_USER_PWD 2> /dev/null
    
    if [ $? -ne 0 ];then
        log_error 'fail to perform MySQL operation!!!'
        exit 1
    else
        log_info "alter the mysql user root's password succeed!"
    fi
}


# MySQL的安全设置,此脚本在mysql用户下运行,默认这些文件的属主为mysql
function mysql_security_setting
{
    #注意,此处写死mysql_error.log,是因为my.cnf模板中命名统一规范
    chmod 660  $MYSQL_DATA_DIR/logs/mysql_error.log
    #注意,此处写死mysql_binlog.*,是因为my.cnf模板中命名统一规范
    chmod 600 $MYSQL_DATA_DIR/bin_logs/mysql_binlog.*
    chmod 400 $MYSQL_DATA_DIR/data/*.pem
    #注意,此处写死mysql_slow.log,是因为my.cnf模板中命名统一规范
    chmod 660 $MYSQL_DATA_DIR/slow_logs/mysql_slow.log
    #plugin_dir的权限设置
    chmod 550 $MYSQL_BASE_DIR/mysql8.0/lib/plugin/ 

}

function main() {
        check_env_setting
        create_mysql_dir
        mysql_cnf_setting
        mysql_env_setting
        mysql_install
        mysql_startup
        change_mysql_root_pwd
    
        if [ $? -ne 0 ];then
            log_error "change_mysql_root_pwd run failed!"
        else    
            log_info "the mysql auto install was successful!"
        fi
        mysql_security_setting
}
# invoke main function
main 

下面是安装测试过程的截图

MySQL自动安装脚本分享
MySQL自动安装脚本分享

下面是安装日志mysql_install.log的输出信息截图:文章来源地址https://www.toymoban.com/news/detail-516221.html

MySQL自动安装脚本分享

到了这里,关于MySQL自动安装脚本分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL中binlog备份脚本分享

    关于MySQL的二进制日志(binlog),我们都知道二进制日志(binlog)非常重要,尤其当你需要point to point灾难恢复的时侯,所以我们要对其进行备份。关于二进制日志(binlog)的备份,可以基于flush logs方式先切换binlog,然后拷贝压缩到到远程服务器或本地服务器的其他存储上,例如

    2023年04月19日
    浏览(30)
  • 【源码可分享】教你用Python制作自动答题脚本,实现自动答题,100%正确率!

    当今社会,人们的生活越来越依赖于计算机技术,而Python作为一种高级编程语言,已经成为了众多程序员的首选语言。Python具有简单易学、代码简洁、可读性强等特点,因此在各个领域都有广泛的应用。其中,自动化脚本是Python的一个重要应用领域之一。本文将介绍如何使用

    2024年02月16日
    浏览(48)
  • 项目实战-RuoYi后台管理系统-登录功能Postman接口自动化脚本分享

        先来回顾一下之前写过的关于RuoYi后台管理系统项目实战相关的几篇文章: 测试项目实战----RuoYi后台管理系统 项目实战-RuoYi后台管理系统-用户管理测试点设计 项目实战-RuoYi后台管理系统-登录相关接口分析 Docker搭建webdis用于提供api查询redis中的数据 项目实战-RuoYi后台管

    2023年04月20日
    浏览(45)
  • mysql自动备份脚本

    #!/bin/bash #author cheng #mysql数据自动备份 mysql_user=“root” mysql_password=“passwprd” mysql_host=“localhost” mysql_port=“3306” mysql_charset=“utf8mb4” #备份文件存放地址(根据实际情况填写) backup_location=/usr/cheng/msg_manager/sql #是否删除过期数据 expire_backup_delete=“ON” #过期时间设置 expire_da

    2024年02月11日
    浏览(36)
  • 使用Python+selenium实现第一个自动化测试脚本

    这篇文章主要介绍了使用Python+selenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化,记录一下学习过程。 此处我选用python3.6+selenium3.0,均用

    2024年02月03日
    浏览(56)
  • 【运维】mysql与mongo的自动备份脚本

    关于mysql和mongo的自动备份脚本,网上一搜一大堆,都不够简洁,这里写了足够简单的版本。方便拓展和维护。 mysql自动备份脚本 mongo自动备份脚本   使用参考:   0. 确保mysql client 和 mongodump工具存在。 1. 存放至 /data/auto_back/ 2. 修改bak_mongo.sh与bak_sql.sh脚本的信息,比如备份路

    2024年02月08日
    浏览(34)
  • 自动化用例编写思路 (使用pytest编写一个测试脚本)

    目录 一,明确测试对象 二,编写测试用例 构造请求数据 封装测试代码 断言设置 三,执行脚本获取测试结果 四,总结 经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下

    2024年02月16日
    浏览(57)
  • 利用Python编写一个AI脚本自动控制2048网页小游戏

    本文将使用python+selenium自动控制游戏运行。当然采用的是伪随机数进行键盘控制。只作为一个抛砖迎玉的参考,不涉及专业算法。 – pip install win32gui pip install PyUserInput pip install PyKeyboard pip install selenium(注意要配合相应的webdriver驱动使用,webdriver的安装下载请自行到网上搜索学

    2023年04月08日
    浏览(46)
  • 【老师见打系列】:我只是写了一个自动回复讨论的脚本~

    专栏 Python零基础入门篇💥 Python网络蜘蛛💥 Python数据分析 Django基础入门宝典💥 小玩意儿💥 Web前端学习 tkinter学习笔记 Excel自动化处理 写这篇文章只是想证明一下: 本博主还在呼吸😇 📢许久未更,甚是想更呐~ 这段时间生活中充斥着各种事情,感觉每天都在忙忙碌碌,偶

    2024年02月21日
    浏览(32)
  • python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

    经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索 天气查询 ,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测试用例脚本。 针对某个功能做接口测试,首先我们需

    2024年02月04日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包