只需几十秒即可在linux环境下部署一个完整的mysql服务【自动化部署脚本】

🍁博主简介
        🏅云计算领域优质创作者
        🏅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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/610427.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装jdk

创建安装目录 cd /home mkdir jdk解压压缩包 tar -zxvf jdk-8u211-linux-x64.tar.gz配置环境变量 vim /etc/profileexport JAVA_HOME/DATA/jdk/jdk1.8.0_211 export CLASSPATH$:CLASSPATH:$JAVA_HOME/lib/ export PATH$PATH:$JAVA_HOME/bin刷新环境变量 source /etc/prof…

Java - 赋值运算符

在这个实战中&#xff0c;我们将学习赋值运算符的使用方法。首先&#xff0c;我们将介绍简单赋值运算符的基本概念和语法格式。然后&#xff0c;我们将通过案例演示来加深对赋值运算符的理解。接下来&#xff0c;我们将对比Java和Python这两种不同的编程语言&#xff0c;探讨它…

Watchdog caught collective operation timeout: WorkNCCL...

最近在使用pytorch框架的分布式多卡跑深度学习模型时&#xff0c;遇到了该问题&#xff0c;并且出错位置随机&#xff0c;无任何明确错误提示&#xff1a; 此前&#xff0c;也遇到过类似的问题&#xff0c;排查原因在于使用coco数据集做检测时&#xff0c;coco的训练集和验证集…

Python测试框架之pytest详解

前言 Python测试框架之前一直用的是unittestHTMLTestRunner&#xff0c;听到有人说pytest很好用&#xff0c;所以这段时间就看了看pytest文档&#xff0c;在这里做个记录。 官方文档介绍&#xff1a; Pytest is a framework that makes building simple and scalable tests e…

【网安小白成长之路】6.pkachu、sql-lbas、upload-lbas靶场搭建

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

SAP ABAP 连接外部数据库

前言 SAP 连接外部数据库有多种方法&#xff0c;这里我们介绍DBCO 连接 DBCO 代码 DATA: OREF TYPE REF TO CX_ROOT,TXT TYPE STRING,M_WERKS TYPE WERKS_D,STRCDATE TYPE C LENGTH 10. DATA:BEGIN OF T_ITEM OCCURS 0, CDATE TYPE C LENGTH 10, END OF T_ITEM. M…

基于SpringBoot+Vue的古风生活体验交流网站(源码+文档+部署+讲解)

一.系统概述 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针…

Macbook M1 Pro使用brew安装Docker并安装Nacos【超详细图解】

目录 一、安装 Docker 二、修改 Docker 镜像地址 三、拉取镜像-举例 Nacos 1.拉取镜像 2.查看本地镜像 3.删除镜像 四、启动容器 1.启动 Nacos 容器&#xff1a; I.方式一【推荐】 II.方式二【懒人推荐】 2.访问 Nacos Web 控制台 3.进入容器和退出容器 五、配置…

QT系列教程(4) Qt 信号和槽

信号和槽 当我们需要一个界面通知另一个界面时&#xff0c;可以采用信号和槽机制。通过链接信号和槽&#xff0c;当一个界面发送信号时&#xff0c;链接该信号的槽会被响应&#xff0c;从而达到消息传递的目的。 所以我们先创建一个Qapplication Widgets 应用。Creator会为我们…

基于springboot+vue实现的艺术水平考级报名管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

前端开发攻略---Vue通过自定义指令实现元素平滑上升的动画效果(可以自定义动画时间、动画效果、动画速度等等)。

1、演示 2、介绍 这个指令不是原生自带的&#xff0c;需要手动去书写&#xff0c;但是这辈子只需要编写这一次就好了&#xff0c;后边可以反复利用。 3、关键API IntersectionObserver IntersectionObserver 是一个用于监测元素是否进入或离开视口&#xff08;viewport&#x…

系统开发实训小组作业week7 —— 优化系统开发计划

目录 1. 建立规则&#xff0c;仪式&#xff0c;流程&#xff0c;模式 2. 给好行为正面的反馈 3. 明确指出不合适的行为&#xff0c;必要时调整人员 在 “系统开发实训课程” 中&#xff0c;我们小组的项目是 “电影院会员管理系统” 。在项目的开发过程中&#xff0c;我们遇…