下面展示一些 内联代码片
。
一、实现自动化之前应该先看看具体的实际安装操作步骤。
1.软件需要有专用的用户和相应的用户组
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql
2.解压相应的二进制包
tar -xf xxx.tar.gz
3.安装相应的编译环境和依赖关系包
yum install xxxx
4.编译二进制包并安装
数据库用cmake编译,其他软件通常用./configre编译
5.数据目录创建和权限赋予
6.初始化数据库
mysql_install_db命令,在安装的目录下的scripts目录下
7.启动开机自启和相应的service启动或者是systemd启动
8.配置配置文件,启动数据库。
#! /bin/bash
sprint () { #安装相关的数据包的调度的打印函数
if [ $1 -eq 0 ];then
echo -e "\e[1;32minstall ${2} successful \e[0m"
else
echo -e "\e[1;31minstall ${2} fail \e[0m"
exit 1
fi
}
mysql_tar_file=`ls mariadb*.tar*` #获取脚本目录下的mariadb安装包的全名
user='mysql' #设置变量用于后面创建数据库用户和组
group='mysql'
#用数据的形式存储需要安装的yum包
install_rpm_list=(autoconf automake binutils bison flex gcc gcc-c++ gettext libtool make patch pkgconfig redhat-rpm-config rpm-build rpm-sign ncurses-devel openssl-devel libevent-devel cmake byacc cscope ctags diffstat doxygen elfutils gcc-gfortran git indent intltool patchutils rcs subversion swig systemtap ElectricFence ant babel bzr chrpath cmake compat-gcc-44 compat-gcc-44-c++ cvs dejagnu expect gcc-gnat gcc-objc gcc-objc++ imake javapackages-tools ksc libstdc++-docs mercurial mod_dav_svn nasm perltidy python-docs rpmdevtools rpmlint systemtap-sdt-devel systemtap-server)
#查询进程是否启动,-v是排查grep本身的进程,如果不排除,每次必能找到一个grep的进程
ps aux |grep mysqld_safe | grep -v grep > /dev/null
if [ $? -eq 0 ]
then
echo -e "\e[1;32mexist mysql,break install\e[0m"
exit 0
fi
#上面用命令获取到的文件是否存在,不存在直接退出
if [ ! -f ${mysql_tar_file} ];then
echo -e "\e[1;31mno exsit ${mysql_tar_file}\e[0m"
exit 1
fi
if [ -d ${mysql_tar_file%%\.tar\.gz} ];then #是否存在解压收的目录,存在打印存在并跳过。
echo -e "\e[1;32malready exsit file zabbix-3.0.28.tar.gz\e[0m"
else
tar xf ${mysql_tar_file} &> /dev/null #不存在就解压
if [ $? -eq 0 ];then #判断解压是否正常,如果不正常,需要抛出异常
echo -e "\e[1;32mutar ${mysql_tar_file} seccussful\e[0m"
else
echo -e "\e[1;31mutar ${mysql_tar_file} fail\e[0m"
exit 1 #不正常退出,退出码为1
fi
fi
#判断是否存在组,如果存在直接跳过
groups ${group} &> /dev/null
if [ $? -eq 0 ];then
echo -e "\e[1;32mexsit group ${group}\e[0m"
else
echo -e "\e[1;32mcreate group ${group} successful\e[0m"
groupadd -r ${group}
fi
#判断是否存在用户,如果存在直接跳过
id ${user} &> /dev/null
if [ $? -eq 0 ];then
echo -e "\e[1;32mexsit user ${user}\e[0m"
else
echo -e "\e[1;32mcreate user ${user} successful\e[0m"
useradd -r -g ${group} -s /sbin/nologin ${user}
fi
#使用for循环,循环数组的,或者相应的安装包的名称进行安装
for rpm_name in ${install_rpm_list[@]};do
rpm -q ${rpm_name} &> /dev/null #查询是否已经安装,如果已经安装就不在安装。
if [ $? -eq 0 ]
then
echo -e "\e[1;32mexist rpm ${rpm_name}\e[0m"
else
yum install ${rpm_name} -y &> /dev/null
sprint $? ${rpm_name} #调度第一行的打印函数
fi
done
cp /usr/lib64/libldap* /usr/lib/
cd ${mysql_tar_file%%\.tar\.gz} #切换到解压目录
#查看是否存在目录/usr/local/mariadb,如果存在就不进行编译安装
if [ ! -d /usr/local/mariadb ];then
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/mydata/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
if [ $? -ne 0 ];then
exit 1
fi
make && make install || exit 2
fi
#切换到编译后的软件目录
cd /usr/local/mariadb
chown -R mysql.mysql
#执行初始化.
scripts/mysql_install_db --datadir=/mydata/data --user=mysql --group=mysql &> /dev/null
if [ $? -ne 0 ];then
echo -e "\e[1;31minit mysql fail,test /usr/local/mariadb/scripts/mysql_install_db --datadir=/mydata/data --user=mysql --group=mysql\e[0m"
fi
chown -R root .
#修改数据目录权限
chown -R mysql:mysql /mydata/data/
#把启动脚本放到自启目录下,开启service管理
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig mysqld on
chkconfig --add mysqld
#复制配置文件到配置中
cp support-files/my-large.cnf /etc/my.cnf
#如果之前已经存在备份,就不做修改。如果未有备份就进行数据目录的修改。
if [ ! -f /etc/my.cnf.back ];then
cp /etc/my.cnf /etc/my.cnf.back
sed -i '/\[mysqld\]/a\datadir = \/mydata\/data' /etc/my.cnf
fi
#配置环境变量
echo 'export PATH=/usr/local/mariadb/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
#启动服务
systemctl start mysqld.service