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

2018-05-19  本文已影响0人  longlong_

前言

每次重新安装好系统后,总是拼命的装各种环境,有点浪费时间,于是自己便希望通过学习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 命令在脚本里执行后,好像并没有生效,有大神解惑一下吗?

上一篇下一篇

猜你喜欢

热点阅读