美文网首页
shell脚本学习——mysql部署脚本

shell脚本学习——mysql部署脚本

作者: longlong_ | 来源:发表于2018-05-19 18:13 被阅读0次

    前言

    每次重新安装好系统后,总是拼命的装各种环境,有点浪费时间,于是自己便希望通过学习shell脚本来实现自动化安装环境,本次便写了一个MySQL-5.6的安装脚本。本人才疏学浅,最后还抛出了一个问题,有大神路过可以解答下吗?下面脚本有需要的可以拿去用,不过请注明出处,毕竟写起来也不是很轻松。有任何问题也可以留言,鄙人知道的,必会回答。

    代码

    人狠话不多,直接上代码:

    #!/bin/bash
    #变量的定义,这里主要定义了安装的路径
    install_dir="/data"
    mysql_dir="${install_dir}/mysql"
    data_dir="${mysql_dir}/data"
    
    #MySQL数据库的初始密码,只做了两次输入是否相等的判断,其他判断可自行添加
    while :; do
        echo "Please input your dbroot password:"
        #read -s使输入的密码隐藏
        read -s dbrootpwd
        echo "Please confirm your dbroot password:"
        read -s dbrootpwd2
        if [ $dbrootpwd != $dbrootpwd2 ];then
            echo "password are different, try again."
        else
            break
        fi
    done
    #判断安装目录是否存在
    [ ! -d $install_dir ] && mkdir -p $install_dir
    cd $install_dir
    
    #安装包不存在时,去下载
    echo "Current status -------->> Begin download mysql-5.6-33-linux-glibc2.5-x86_64.tar.gz"
    [ ! -f "mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz" ] && echo "Down mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz" && wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
    
    #解压安装包,并移动至mysql_dir目录下
    echo "Current status -------->> Begin untar mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz"
    [ ! -d $mysql_dir ] && tar -zxf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz && mv mysql-5.6.33-linux-glibc2.5-x86_64 $mysql_dir
    
    echo "Current status -------->> Change dir to `pwd`"
    cd $mysql_dir
    
    #判断用户组和用户是否存在,不存在则添加mysql用户组与用户
    echo "Current status -------->> Begin add group and user"
    [ -z "$(grep 'mysql' /etc/group)" ] && groupadd mysql
    id mysql >/dev/null 2>&1
    [ $? -ne 0 ] && useradd -g mysql mysql
    
    chown -R mysql:mysql ./
    
    #检查是否以及安装了mysql
    echo "Current status -------->> Begin check if mysql has installed?"
    [ -f "/etc/init.d/mysql" ] && echo "MySQL has already installed!" && exit 2
    
    #安装一些必要的工具,不安装会报错
    echo "Current status -------->> Begin install perl, libaia-devel, perl-Model-Install.noarch"
    yum -y install perl perl-devel 1>/dev/null 2>&1
    yum -y install libaio-devel 1>/dev/null 2>&1
    yum install -y perl-Module-Install.noarch 1>/dev/null 2>&1
    
    #执行安装
    [ ! -d $data_dir ] && mkdir -p $data_dir
    echo "Current status -------->> Begin insall mysql, execute ${mysql_dir}/scripts/mysql_install_db"
    ./scripts/mysql_install_db --user=mysql --datadir=$data_dir --basedir=$mysql_dir 1>/dev/null 2>&1
    
    #拷贝文件至知道位置
    echo "Current status -------->> Copy support-files/mysql.server, support-files/my-default.cnf"
    cp support-files/mysql.server /etc/init.d/mysql
    chmod 755 /etc/init.d/mysql
    cp support-files/my-default.cnf /etc/my.cnf
    
    #编辑/etc/init.d/mysql中basedir和datadir的参数
    echo "Current status -------->> Edit /etc/init.d/mysql"
    sed -i "s@^basedir=@basedir=${mysql_dir}@g" /etc/init.d/mysql
    sed -i "s@^datadir=@datadir=${data_dir}@g" /etc/init.d/mysql
    
    service mysql start
    
    #编辑环境变量
    echo "Current status -------->> Edit /etc/profile"
    #不存在则在文件末尾添加
    [ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=${mysql_dir}/bin:${PATH}" >> /etc/profile
    #存在的话则替换相关配置
    [ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep ${mysql_dir} /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=${mysql_dir}/bin:\1@" /etc/profile
    
    #立即生效配置
    source /etc/profile
    
    #修改数据库初始密码
    echo "Current status -------->> Mysql init config"
    ${mysql_dir}/bin/mysqladmin -u root -h localhost.localdomain password ${dbrootpwd} 1>/dev/null 2>&1
    #授权远程连接数据库,及其他相关操作
    echo "Current status -------->> grant all privileges on *.* to root@'%'"
    ${mysql_dir}/bin/mysql -uroot -p${dbrootpwd} -e "grant all privileges on *.* to root@'%' identified by \"${dbrootpwd}\" with grant option;" 1>/dev/null 2>&1
    ${mysql_dir}/bin/mysql -uroot -p${dbrootpwd} -e "flush privileges;" 1>/dev/null 2>&1
    ${mysql_dir}/bin/mysql -uroot -p${dbrootpwd} -e "delete from mysql.user where Password='';" 1>/dev/null 2>&1
    ${mysql_dir}/bin/mysql -uroot -p${dbrootpwd} -e "delete from mysql.db where User='';" 1>/dev/null 2>&1
    ${mysql_dir}/bin/mysql -uroot -p${dbrootpwd} -e "delete from mysql.proxies_priv where Host!='localhost';" 1>/dev/null 2>&1
    ${mysql_dir}/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" 1>/dev/null 2>&1
    
    echo 'Current status -------->> finished !'
    

    总结

    可以看出shell脚本语法并不是很难,需要注意的是:

    1. 脚本里面不能使用vim编辑文本,可以使用sed工具、awk工具来代替。
    2. shell脚本的基础语法,包括变量的使用、条件的判断等等。
    3. 需要对linux的命令较为熟悉。

    这里有一个问题:source /etc/profile 命令在脚本里执行后,好像并没有生效,有大神解惑一下吗?

    相关文章

      网友评论

          本文标题:shell脚本学习——mysql部署脚本

          本文链接:https://www.haomeiwen.com/subject/ogdadftx.html