🍁博主简介:
🏅云计算领域优质创作者
🏅2022年CSDN新星计划python赛道第一名🏅2022年CSDN原力计划优质作者
🏅阿里云ACE认证高级工程师
🏅阿里云开发者社区专家博主💊交流社区:CSDN云计算交流社区欢迎您的加入!
目录
1、脚本执行过程展示
2、自动化部署脚本说明
2.1 auto_install.sh文件说明
2.2 install.ini文件说明
2.2 config_example目录说明
2.3 logs目录说明
2.4 packages目录说明
3、自动化部署脚本全部代码
1、脚本执行过程展示
2、自动化部署脚本说明
因为此脚本功能比较全面,完全做到了自动化部署且可以随意自定义任何参数,所以由五个部分组成:
2.1 auto_install.sh文件说明
auto_install.sh为自动化部署脚本,只需要./auto_install.sh执行脚本,然后等待几十秒mysql服务就部署成功并启动了
2.2 install.ini文件说明
install.ini为脚本的一个配置文件,脚本中所有需要的变量值都是通过此文件来调用
文件内容如下:
cat install.ini
[mysql]
#mysql服务安装路径,默认为/opt
base_dir = /opt
#mysql数据存放路径,默认为/fydata/mysql/data
datadir_mysql = /xpdata/mysql/data
#mysql日志文件存放路径,默认为/fydata/mysql/logs
logsdir_mysql = /xpdata/mysql/logs
#mysql服务root用户的新密码
root_newpwd = root_test
#数据库的普通用户和密码
user = xiaopeng
user_pwd = xiaopeng_passwd
由此可以看出,执行脚本之前我们可以先修改此文件里的参数,所有参数都可以自定义为自己所需的值,脚本执行过程中的变量值都是读取此文件内容
2.2 config_example目录说明
config_example为mysql的配置文件模板,我已写好放入此目录,无需更改
mysql部署完成后会字段将此模板引入到配置文件路径,并且进行内容替换,替换的内容为install.ini文件中自定义好的值
cat config_example/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
port=3306
user=mysql
datadir=Datadir_Mysql
log_error=Logsdir_Mysql/error.log
socket = /tmp/mysql.sock
pid_file = Logsdir_Mysql/mysql.pid
slow-query-log = ON
slow_query_log_file = Logsdir_Mysql/slow_query.log
innodb_buffer_pool_size = 4G
server-id = 59173
log-bin = Logsdir_Mysql/mysql-bin
relay-log = Logsdir_Mysql/mysql-relay-bin
lower_case_table_names=1
2.3 logs目录说明
此文件存放的是脚本安装过程的日志
脚本执行过程中每一步操作都会打印日志到此路径下的文件中,脚本执行过程报错了可以在此目录下的日志文件中查看
此目录下默认是没有任何文件的,也不需要手动创建,脚本执行过程中会自动生成日志文件
2.4 packages目录说明
此目录下存放的是mysql服务的安装包,本来是想写成智能化的直接wget下载安装包然后直接部署的脚本,但是想了想服务部署环境大部分为离线环境,还是手动把安装包传上来吧。
此目录下存放的mysql安装包可以是任何版本的,也可使是多种压缩方式的,脚本会自动进行识别并解压安装,目前支持的压缩格式如下:
3、自动化部署脚本全部代码
#!/bin/bash
Script_Path=`pwd`
function readINI(){
FILENAME=$1; SECTION=$2; KEY=$3
RESULT=`awk -F '=' '/\['$SECTION'\]/{a=1}a==1&&$1~/'$KEY'/{print $2;exit}' $FILENAME`
echo $RESULT
}
function install_mysql() {
echo > $Script_Path/logs/install_mysql.log
echo "===============================================================mysql=============================================================="
Base_Dir=$(readINI $Script_Path/install.ini mysql base_dir)
if [ ! -d "$Base_Dir" ];then
mkdir -p $Base_Dir
fi
echo "
┌────────────────────────────────────────────────────────────────??????????????????????????──────┐
│ │
│ ? Linux环境下一键部署MySQL服务 ? │
│ (One-click deployment of MySQL services in Linux) │
│ │
│ ? Description : 基于Linux环境,实现MySQL一键式部署 │
│ ? Author : 小鹏linux │
│ ? E-Mail : axp_007@126.com │
│ ? Script Version : v1.0 │
│ │
└──────────────────────────────────────────────────────────────────────??????????????????????????┘
"
echo
echo "--------------------------------------------------------------------------------------"
echo "1、正在建立mysql用户和mysql用户组..."
id mysql
if [ `echo $?` -eq 0 ];then
userdel mysql
groupadd mysql
useradd -r -g mysql mysql
echo "已删除mysql用户和用户组并重新建立组!"
else
groupadd mysql
useradd -r -g mysql mysql
echo "mysql用户和组创建完成!"
fi
echo "--------------------------------------------------------------------------------------"
sleep 1
echo "--------------------------------------------------------------------------------------"
echo "2、正在解压并安装mysql服务..."
cd $Script_Path/packages/
Mysql_Pag=`ls | grep mysql`
case $Mysql_Pag in
*.tar) tar xvf $Mysql_Pag -C $Base_Dir ;;
*.tgz) tar xvf $Mysql_Pag -C $Base_Dir ;;
*.tar.bz2) tar xvf $Mysql_Pag -C $Base_Dir ;;
*.tar.gz) tar zxf $Mysql_Pag -C $Base_Dir ;;
*.rar) rar x $Mysql_Pag -C $Base_Dir ;;
*.zip) unzip $Mysql_Pag -C $Base_Dir ;;
*.xz) xz -d $Mysql_Pag -C $Base_Dir ;;
*.lzo) lzo -dv $Mysql_Pag -C $Base_Dir ;;
*.7z) 7z x $Mysql_Pag -C $Base_Dir ;;
*) echo "请上传正确的mysql安装包到$Script_Path/packages目录下!"
esac
cd $Base_Dir && rm -rf mysql && mv `ls | grep mysql` mysql
if [ `echo $?` -eq 0 ];then
echo "mysql服务已解压并安装完成!"
else
echo "mysql服务安装失败!"
exit 0
fi
echo "--------------------------------------------------------------------------------------"
sleep 1
echo "--------------------------------------------------------------------------------------"
echo "3、正在创建mysql数据和日志目录及配置文件..."
Datadir_Mysql=$(readINI $Script_Path/install.ini mysql datadir_mysql)
Logsdir_Mysql=$(readINI $Script_Path/install.ini mysql logsdir_mysql)
if [ ! -d $Datadir_Mysql ];then
mkdir -p $Datadir_Mysql
fi
if [ ! -d $Logsdir_Mysql ];then
mkdir -p $Logsdir_Mysql
fi
touch $Logsdir_Mysql/error.log
#给目录递归赋予mysql所有者和所属组
chown -R mysql:mysql $Datadir_Mysql/../
if [ ! -d $Base_Dir/mysql/conf ];then
mkdir -p $Base_Dir/mysql/conf
fi
\cp $Script_Path/config_example/my.cnf $Base_Dir/mysql/conf/
sed -i "s!Datadir_Mysql!$Datadir_Mysql!g" $Base_Dir/mysql/conf/my.cnf
sed -i "s!Logsdir_Mysql!$Logsdir_Mysql!g" $Base_Dir/mysql/conf/my.cnf
echo "mysql数据和日志目录及配置文件已创建完成!"
echo "--------------------------------------------------------------------------------------"
sleep 1
echo "--------------------------------------------------------------------------------------"
echo "4、正在初始化mysql..."
cd $Base_Dir/mysql/bin/
echo >$Logsdir_Mysql/error.log
./mysqld --defaults-file=$Base_Dir/mysql/conf/my.cnf --initialize --basedir=$Base_Dir/mysql
cat $Logsdir_Mysql/error.log
Root_Oldpwd=`cat $Logsdir_Mysql/error.log | grep "A temporary password is generated for root@localhost" | awk '{print $NF}'`
if [ -z "$Root_Oldpwd" ];then
echo "mysql初始化失败!"
exit 0
else
echo "mysql初始化完成!"
fi
echo "--------------------------------------------------------------------------------------"
sleep 1
echo "--------------------------------------------------------------------------------------"
echo "5、正在启动mysql服务..."
#配置环境变量:
sed -i '/MYSQL_HOME/d' /etc/profile
cat >>/etc/profile <<EOF
export MYSQL_HOME=$Base_Dir/mysql
export PATH=\$MYSQL_HOME/bin:\$PATH
EOF
source /etc/profile
#创建软连接
if [ -z `ls /etc/init.d | grep -w "mysql"` ];then
ln -s $Base_Dir/mysql/support-files/mysql.server /etc/init.d/mysql
else
\rm /etc/init.d/mysql && ln -s $Base_Dir/mysql/support-files/mysql.server /etc/init.d/mysql
fi
if [ -z `ls /usr/bin | grep -w "mysql"` ];then
ln -s $Base_Dir/mysql/bin/mysql /usr/bin/mysql
else
\rm /usr/bin/mysql && ln -s $Base_Dir/mysql/bin/mysql /usr/bin/mysql
fi
cd $Base_Dir/mysql/bin/
if [ `ps axu | grep mysql | grep -v "grep" | grep -v "tee" | wc -l` -eq 0 ];then
nohup ./mysqld_safe --defaults-file=$Base_Dir/mysql/conf/my.cnf >> $Logsdir_Mysql/error.log 2>&1 &
sleep 3
if [ `ps axu | grep mysql | grep -v "grep" | grep -v "tee" | wc -l` -eq 0 ];then
echo "mysql服务启动失败!详情请查看$Logsdir_Mysql/error.log日志内容"
exit 0
else
ps axu | grep mysql | grep -v "grep" | grep -v "tee"
echo "mysql服务已启动!"
fi
else
echo "已经有mysql进程存在..."
echo "正在杀死已有的mysql进程..."
ps axu | grep mysql | grep -v "grep" | grep -v "tee" | awk '{print $2}' | xargs kill -9
echo "已杀死旧的mysql进程,正在启动新的mysql进程..."
nohup ./mysqld_safe --defaults-file=$Base_Dir/mysql/conf/my.cnf >> $Logsdir_Mysql/error.log 2>&1 &
sleep 3
if [ `ps axu | grep mysql | grep -v "grep" | wc -l` -eq 0 ];then
echo "新的mysql服务启动失败!详情请查看$Logsdir_Mysql/error.log日志内容"
exit 0
else
echo "新的mysql服务已启动!"
fi
fi
echo "--------------------------------------------------------------------------------------"
sleep 1
echo "--------------------------------------------------------------------------------------"
echo "6、正在登录mysql修改密码..."
Root_Newpwd=$(readINI $Script_Path/install.ini mysql root_newpwd)
User=$(readINI $Script_Path/install.ini mysql user)
User_Pwd=$(readINI $Script_Path/install.ini mysql user_pwd)
mysql -uroot -p"$Root_Oldpwd" --connect-expired-password -e "
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$Root_Newpwd');
create user $User@'%' identified by '$User_Pwd';
grant all privileges on *.* to '$User'@'%' identified by '$User_Pwd';
flush privileges;
exit"
echo "mysql密码已修改,新密码可通过$Script_Path/$Script_Path/install.ini文件内容查看!"
echo "root用户新密码为:$Root_Newpwd"
echo "$User 普通用户密码为:$User_Pwd"
echo "--------------------------------------------------------------------------------------"
sleep 1
echo "--------------------------------------------------------------------------------------"
echo "7、正在创建测试数据库..."
mysql -u$User -p"$User_Pwd" --connect-expired-password -e "
create database xiaopeng001;
create database xiaopeng002;
create database xiaopeng003;
exit"
echo "已创建测试数据库"
echo "--------------------------------------------------------------------------------------"
sleep 1
}
install_mysql | tee -a $Script_Path/logs/install_mysql.log 2>&1
脚本和调用的文件目录全部都打包成了一个压缩包,有需要的自提
对此脚本有疑惑或者优化建议的小伙伴欢迎交流
压缩包下载地址: https://download.csdn.net/download/qq_62294245/89119618