🍁博主简介:
🏅云计算领域优质创作者
🏅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/bashScript_Path=`pwd`function readINI(){FILENAME=$1; SECTION=$2; KEY=$3RESULT=`awk -F '=' '/\['$SECTION'\]/{a=1}a==1&&$1~/'$KEY'/{print $2;exit}' $FILENAME`echo $RESULT
}function install_mysql() {echo > $Script_Path/logs/install_mysql.logecho "===============================================================mysql=============================================================="Base_Dir=$(readINI $Script_Path/install.ini mysql base_dir)if [ ! -d "$Base_Dir" ];thenmkdir -p $Base_Dirfiecho "┌────────────────────────────────────────────────────────────────??????????????????????????──────┐│ ││ ? 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 ││ │└──────────────────────────────────────────────────────────────────────??????????????????????????┘"echoecho "--------------------------------------------------------------------------------------"echo "1、正在建立mysql用户和mysql用户组..."id mysqlif [ `echo $?` -eq 0 ];thenuserdel mysqlgroupadd mysqluseradd -r -g mysql mysqlecho "已删除mysql用户和用户组并重新建立组!"elsegroupadd mysqluseradd -r -g mysql mysqlecho "mysql用户和组创建完成!"fiecho "--------------------------------------------------------------------------------------"sleep 1echo "--------------------------------------------------------------------------------------"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目录下!"esaccd $Base_Dir && rm -rf mysql && mv `ls | grep mysql` mysqlif [ `echo $?` -eq 0 ];thenecho "mysql服务已解压并安装完成!"elseecho "mysql服务安装失败!"exit 0fiecho "--------------------------------------------------------------------------------------"sleep 1echo "--------------------------------------------------------------------------------------"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 ];thenmkdir -p $Datadir_Mysqlfiif [ ! -d $Logsdir_Mysql ];thenmkdir -p $Logsdir_Mysqlfitouch $Logsdir_Mysql/error.log#给目录递归赋予mysql所有者和所属组chown -R mysql:mysql $Datadir_Mysql/../if [ ! -d $Base_Dir/mysql/conf ];thenmkdir -p $Base_Dir/mysql/conffi\cp $Script_Path/config_example/my.cnf $Base_Dir/mysql/conf/sed -i "s!Datadir_Mysql!$Datadir_Mysql!g" $Base_Dir/mysql/conf/my.cnfsed -i "s!Logsdir_Mysql!$Logsdir_Mysql!g" $Base_Dir/mysql/conf/my.cnfecho "mysql数据和日志目录及配置文件已创建完成!"echo "--------------------------------------------------------------------------------------"sleep 1echo "--------------------------------------------------------------------------------------"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/mysqlcat $Logsdir_Mysql/error.logRoot_Oldpwd=`cat $Logsdir_Mysql/error.log | grep "A temporary password is generated for root@localhost" | awk '{print $NF}'`if [ -z "$Root_Oldpwd" ];thenecho "mysql初始化失败!"exit 0elseecho "mysql初始化完成!"fiecho "--------------------------------------------------------------------------------------"sleep 1echo "--------------------------------------------------------------------------------------"echo "5、正在启动mysql服务..."#配置环境变量:sed -i '/MYSQL_HOME/d' /etc/profilecat >>/etc/profile <<EOFexport MYSQL_HOME=$Base_Dir/mysqlexport PATH=\$MYSQL_HOME/bin:\$PATH
EOFsource /etc/profile#创建软连接if [ -z `ls /etc/init.d | grep -w "mysql"` ];thenln -s $Base_Dir/mysql/support-files/mysql.server /etc/init.d/mysqlelse\rm /etc/init.d/mysql && ln -s $Base_Dir/mysql/support-files/mysql.server /etc/init.d/mysqlfiif [ -z `ls /usr/bin | grep -w "mysql"` ];thenln -s $Base_Dir/mysql/bin/mysql /usr/bin/mysqlelse\rm /usr/bin/mysql && ln -s $Base_Dir/mysql/bin/mysql /usr/bin/mysqlficd $Base_Dir/mysql/bin/if [ `ps axu | grep mysql | grep -v "grep" | grep -v "tee" | wc -l` -eq 0 ];thennohup ./mysqld_safe --defaults-file=$Base_Dir/mysql/conf/my.cnf >> $Logsdir_Mysql/error.log 2>&1 &sleep 3if [ `ps axu | grep mysql | grep -v "grep" | grep -v "tee" | wc -l` -eq 0 ];thenecho "mysql服务启动失败!详情请查看$Logsdir_Mysql/error.log日志内容"exit 0elseps axu | grep mysql | grep -v "grep" | grep -v "tee"echo "mysql服务已启动!"fielseecho "已经有mysql进程存在..."echo "正在杀死已有的mysql进程..."ps axu | grep mysql | grep -v "grep" | grep -v "tee" | awk '{print $2}' | xargs kill -9echo "已杀死旧的mysql进程,正在启动新的mysql进程..."nohup ./mysqld_safe --defaults-file=$Base_Dir/mysql/conf/my.cnf >> $Logsdir_Mysql/error.log 2>&1 &sleep 3if [ `ps axu | grep mysql | grep -v "grep" | wc -l` -eq 0 ];thenecho "新的mysql服务启动失败!详情请查看$Logsdir_Mysql/error.log日志内容"exit 0elseecho "新的mysql服务已启动!"fifiecho "--------------------------------------------------------------------------------------"sleep 1echo "--------------------------------------------------------------------------------------"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 1echo "--------------------------------------------------------------------------------------"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