Linux环境下一键部署MySQL脚本,支持多种类型

  • 前言
  • 一、使用前须知
  • 二、使用方法
  • 三、shell脚本内容
  • 总结

前言

  MySQL是目前最流行的关系型数据库管理系统之一,属于 Oracle 旗下产品,由于它是开源软件,因此很多企业在 WEB 应用搭建时,常常选择MySQL做为数据存储的软件。
  做为运维交付人员,在应用的搭建、迁移时往往需要手动安装部署MySQL软件,对于有一定Linux和MySQL基础的人来说,安装部署仅仅需要瞧瞧指令,但也得花费大量的时间,而对于初级运维人员,甚至是新手小白来说,安装部署MySQL可能会走很多弯路,还可能会遇到中途频频报错。
  鉴于此,本人通过编写shell脚本,实现MySQL一键式安装部署,并且支持多版本,多类型,全过程只需3分钟左右,可以帮助运维交付人员实现MySQL的快速部署,提高工作效率。


一、使用前须知

  1. 目前仅支持rhel或者centos7.0以上版本部署,MySQL安装类型可以是rpm包或者tar包编译安装。
  2. 此脚本与MySQL的安装包(名称必须是:rpm-bundle.tar或者.rpm或者*.tar.gz或者*.tar文件)放在同一个目录下,比如/opt目录下。

  Tips:目录下允许存放多种类型的MySQL安装包,但是版本只能有一个。

二、使用方法

  1. 将MySQL安装包和脚本放至同一目录下;
  2. 给脚本赋予可执行权限;
chmod +x mysql_install.sh
  1. 运行脚本,开始部署MySQL;
./mysql_install.sh

三、shell脚本内容

  复制脚本内容,粘贴进mysql_install.sh文件。

#!/bin/bash
# -------------------------------------------------------------------------------
# ScriptName: mysql_install.sh
# Author: wenhui.Cheng
# Description: 一键部署MySQL
# Version: v1.3
# Date: 2022-07-24
# -------------------------------------------------------------------------------echo  "┌──────────────────────────────────────────────────────────────────────┐│                                                                      ││                ∙ Linux环境下一键部署MySQL v1.3 ∙                     ││        (One-click Mysql installation based on Linux environment)     ││                                                                      ││   ∙ Description :  基于Linux环境,实现MySQL一键式部署                ││   ∙ Author      :  wenhui.Cheng                                      ││   ∙ E-Mail      :  756942988@qq.com                                  ││   ∙ Version     :  v1.3                                              ││                                                                      │└──────────────────────────────────────────────────────────────────────┘
"echo -e "\033[31m注意事项:1.目前仅支持rhel或者centos7.0以上版本部署,MySQL安装类型可以是rpm包或者tar包编译安装.2.此脚本与MySQL的安装包(名称必须是:*rpm-bundle.tar或者*.rpm或者*.tar.gz或者*.tar文件)放在同一个目录下,比如/opt目录下.3.目录下允许存放多种类型的MySQL安装包,版本只能有一个.4.赋予脚本可执行权限,运行脚本即可开始部署MySQL.
\033[0m"curdir=$(cd `dirname $0`; pwd) # 是否开始
function isStart(){read -p "是否开始一键部署MySQL?(Y/N):" choose_isStartif [ "$choose_isStart" == 'Y' ] || [ "$choose_isStart" == 'y' ] ;thenreturn 0  # 退出函数elseexit 0  # 退出程序fi
}# 检查用户
function use_check(){curuser=$USERif [ $curuser != 'root' ];thenecho "当前用户非root,请切换至root后再操作!" exit 0elsereturn 0fi
}# ******************************** rpmType ********************************# 检查mariadb
function mariadb_check(){mariadb_rpm_list=`rpm -qa |grep mariadb`if [ -n "$mariadb_rpm_list" ];thenecho "mariadb检查结果:系统已安装mariadb,需先卸载"read -p "是否卸载mariadb?(Y/N):" choose_Unmariadbif [ "$choose_Unmariadb" == 'Y' ] || [ "$choose_Unmariadb" == 'y' ] ;thenecho "开始卸载mariadb..."rpm -qa |grep mariadb |xargs rpm -e --nodepssleep 2echo "mariadb卸载完成!"elseexit 0fielseecho "mariadb检查结果:系统未安装mariadb."return 0fi
}# 检查MySQL
function mysql_check(){mysql_rpm_list=`rpm -qa |grep mysql`if [ -n "$mysql_rpm_list" ]; thenecho "mysql检查结果:系统已安装mysql,需先卸载,已安装的MySQL如下:"rpm -qa | grep mysql | teeread -p "是否卸载已安装的MySQL?(Y/N):" choose_UnMySQLif [ "$choose_UnMySQL" == 'Y' ] || [ "$choose_UnMySQL" == 'y' ];thenecho "开始卸载MySQL..."rpm -qa |grep mysql | xargs rpm -e --nodeps  > /dev/null 2>&1sleep 2echo "MySQL卸载完成!"elseexit 0fielseecho "mysql检查结果:系统未安装MySQL."fi
}# 检查可能的MySQL残留文件
function mysqlFile_check(){mysqlFile=`find / -name mysql`if [ -n "$mysqlFile" ]; thenecho "检测到服务器可能存在MySQL残留文件,文件列表如下:"find / -name mysql |xargs du --max-depth=0 -h   # 打印可能的MySQL残留文件及大小read -p "您要对这些文件怎么处理?(0:正常文件,不处理;1:我要手动删除;del:全部删除):" choose_delmysqlFileif [ "$choose_delmysqlFile" == 0 ] ;thenreturn 0elif [ "$choose_delmysqlFile" == 1 ] ;thenexit 0elif [ "$choose_delmysqlFile" == 'del' ] ;thenecho "开始清理MySQL残留文件..."#清理冗余文件find / -name mysql |xargs rm -rfsleep 3rm -f /var/log/mysqld.logecho "MySQL残留文件清理成功!"elseecho "输入错误,请选择0、1、del."exit 0fielserm -f /var/log/mysqld.logecho "mysql残留文件检查结果:不存在MySQL残留文件"fi
}# 安装MySQL
function mysql_install_rpmType(){echo "关闭SELinux..."  setenforce 0   > /dev/null echo "关闭防火墙..."systemctl stop firewalld.service  echo "开始安装MySQL..."rpm -ivh mysql-community-*.rpm --nodeps --forcesleep 5echo "MySQL安装成功,开始启动MySQL..."systemctl start mysqld.serviceif [ $? -eq 0 ] ;thenecho "MySQL启动成功!"elseecho "MySQL启动失败,请检查日志/var/log/mysqld.log"exit 0fi
}# 修改MySQL密码
function change_passwd_rpmType(){initpasswd=`cat /var/log/mysqld.log |grep root@localhost |awk '{print $NF}'`   # 初始密码echo "MySQL的初始密码是:$initpasswd"read -p "请输入您要设置MySQL的root用户密码:" passwdexport MYSQL_PWD=$initpasswd  #解决mysql>5.6会提示密码安全问题mysqladmin -uroot password $passwd   > /dev/nullecho $?echo "MySQL密码修改成功!"
}# 修改MySQL权限
function change_access_rpmType(){export MYSQL_PWD=$passwdmysql -uroot  <<EOFuse mysql;update user set Host="%" where User="root";FLUSH PRIVILEGES;quit
EOFecho "MySQL权限修改成功!"
}# MySQL安装包类型检查(rpm或者rpm-bundle.tar) + 调取mysql_install
function mysql_PackageName_chech_rpmType(){PackageName_tar=`ls -l | grep rpm-bundle.tar | awk '{print $9}'`PackageName_rpm=`ls -l | grep mysql-community | awk '{print $9}'`if [ -n "$PackageName_tar" ];thenecho "解压安装包$PackageName_tar ..."tar xf $PackageName_tarecho "解压成功!"mysql_install_rpmTypereturn 0elif [ -n "$PackageName_rpm" ];thenmysql_install_rpmTypereturn 0elseecho -e "\033[31m未找到安装包,请检查${curdir}路径下是否存在*rpm-bundle.tar或者*.rpm文件 \033[0m"exit 0fi
}# 迁移目录
function Migration_dir(){read -p "是否需要迁移MySQL数据目录?(Y/N):" choose_isMigrationif [ "$choose_isMigration" == 'Y' ] || [ "$choose_isMigration" == 'y' ] ;then read -p "请输入您要迁移至的路径(如:/opt/data):" newPathecho "开始准备迁移目录..."systemctl stop mysqld.servicemkdir -p $newPath   # 新建目录cp -r /var/lib/mysql $newPathchmod -R 755 $newPathchown -R mysql:mysql $newPath# 修改my.cnf# 将迁移的路径进行转义处理,方便使用sed进行替换修改newPathe=`echo $newPath |sed 's#\/#\\\/#g'`sed -i "s/\/var\/lib/$newPathe/g" /etc/my.cnf# 插入配置sed -i "1i\socket=$newPath/mysql/mysql.sock" /etc/my.cnfsed -i "1i\[client]" /etc/my.cnfsystemctl start mysqld.serviceecho "MySQL目录迁移成功!"elsereturn 0fi
}# 检查安装结果
function mysql_successful_rpmType(){netstat -ntl | grep 3306if [ $? -eq 0 ] ;thenecho "MySQL安装成功,现在可以开始正式使用啦!"elseecho "MySQL安装或启动失败,请查看日志:/var/log/mysqld.log"fi
}# ******************************** tarType ********************************# MySQL端口设置
function mysql_port_check(){while truedoread -p "请输入您要设置的MySQL端口(如:3306):" mysql_portnetstat -ntlp |grep :$mysql_portif [ $? -eq 0 ] ; thenecho "端口${mysql_port}已被占用,请更换端口!"elsereturn 0fidone
}# 检查mysql用户
function mysql_user_check(){if [ `grep "mysql" /etc/passwd | wc -l` -eq 0 ] ;thenecho "创建MySQL用户和组"/usr/sbin/groupadd mysql/usr/sbin/useradd -g mysql mysqlelseecho "MySQL用户已经存在!"return 0fi
}# 安装MySQL
function mysql_install_tarType(){read -p "您要将MySQL的程序和数据文件存放在哪个路径下?(如:/opt/data):" mysql_pathmkdir -p $mysql_pathmv $unzip_dir mysql_tarmv mysql_tar $mysql_path# 创建目录mkdir -p $mysql_path/mysql_tar/data   # 存放数据mkdir -p $mysql_path/mysql_tar/logs   # 存放日志echo "正在创建my.cnf文件..."
cat > $mysql_path/mysql_tar/my.cnf << EOF
[client]
socket=$mysql_path/mysql_tar/data/mysql.sock
[mysql]
default-character-set=utf8
socket=$mysql_path/mysql_tar/data/mysql.sock[mysqld]
port=$mysql_port
socket=$mysql_path/mysql_tar/data/mysql.sock# 多实例需要配置mysqlx
mysqlx_port=3${mysql_port}
mysqlx_socket=$mysql_path/mysql_tar/data/mysqlx.sock
basedir=$mysql_path/mysql_tar
datadir=$mysql_path/mysql_tar/data
max_connections=10000
max_connect_errors=10
character-set-server=UTF8MB4
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
log-error=$mysql_path/mysql_tar/logs/mysqld.log
EOFsleep 3cat $mysql_path/mysql_tar/my.cnfecho "开始初始化MySQL(设置表名不区分大小写)..."$mysql_path/mysql_tar/bin/mysqld --defaults-file=$mysql_path/mysql_tar/my.cnf --initialize --basedir=$mysql_path/mysql_tar --datadir=$mysql_path/mysql_tar/data --lower_case_table_names=1sleep 5cat $mysql_path/mysql_tar/logs/mysqld.log# 赋权限chown mysql:mysql -R $mysql_path/mysql_tarchmod 755 -R $mysql_path/mysql_tar/datachmod 644 $mysql_path/mysql_tar/my.cnf# 启动MySQL数据库实例echo "开始启动MySQL..."nohup $mysql_path/mysql_tar/bin/mysqld --defaults-file=$mysql_path/mysql_tar/my.cnf  --user=mysql & > /dev/null 2>&1sleep 5echo "MySQL启动成功!"
}# 检查MySQL安装包类型是tar还是tar.gz
function mysql_PackageName_chech_tarType(){# 先判断安装包是否为tar.gzls -l mysql-[0-9]*tar.gz > /dev/null 2>&1  # 表示stderr标准错误的输出重定向等同于标准输出1if [ $? -eq 0 ] ;thenmysqlfile_targz=$(ls -l mysql-[0-9]*tar.gz | awk '{print $9}')echo "开始解压安装包$mysqlfile_targz ..."tar xf $mysqlfile_targz# 获取解压后的目录名称unzip_dir=`ls -l mysql-[0-9]*tar.gz|awk '{print $9}'|cut -d. -f-3`# 安装MySQLmysql_install_tarTypeelif [ $? -ne 0 ] ;thenls -l mysql-*.tar > /dev/null 2>&1 if [ $? -eq 0 ] ;thenmysqlfile_tar=$(ls -l mysql-*.tar | awk '{print $9}')echo "开始解压安装包$mysqlfile_tar ..."tar xf $mysqlfile_tar# 获取解压后的tar.gz文件名称,使用正则匹配文件名mysqlfile_targz=$(ls -l mysql-[0-9]*tar.gz |awk '{print $9}')echo "开始解压安装包$mysqlfile_targz ..."tar xf $mysqlfile_targz# 获取解压后的目录名称unzip_dir=$(ls -l mysql-[0-9]*tar.gz |awk '{print $9}'|cut -d. -f-3)# 安装MySQLmysql_install_tarTypeelseecho -e "\033[31m未找到安装包,请检查${curdir}路径下是否存在*.tar.gz或者*.tar文件 \033[0m"exit 0fielse exit 0fi
}# 修改MySQL密码
function change_passwd_tarType(){initpasswd=`cat $mysql_path/mysql_tar/logs/mysqld.log |grep root@localhost |awk '{print $NF}'`  # 初始密码echo "初始密码是:"$initpasswdread -p "请输入您要设置MySQL的root用户密码:" passwdexport MYSQL_PWD=$initpasswd# MySQL多实例登录时需要指定sock路径(-S选项)$mysql_path/mysql_tar/bin/mysqladmin -uroot -S $mysql_path/mysql_tar/data/mysql.sock password $passwd > /dev/null 2>&1echo "MySQL密码修改成功!"
}# 修改MySQL访问权限
function change_access_tarType(){echo "开始修改MySQL访问权限..."export MYSQL_PWD=$passwd$mysql_path/mysql_tar/bin/mysql -uroot -h127.0.0.1 -P$mysql_port -S $mysql_path/mysql_tar/data/mysql.sock  <<EOFuse mysql;update user set Host="%" where User="root";FLUSH PRIVILEGES;quit
EOFecho "MySQL权限修改成功!"
}# 检查安装结果
function mysql_successful_tarType(){netstat -ntl | grep $mysql_portif [ $? -eq 0 ];thenecho "MySQL安装成功,现在可以开始正式使用啦!"elseecho "MySQL安装或启动失败,请查看日志:$mysql_path/mysql_tar/logs/mysqld.log"fi
}# 停止MySQL
function mysqld_stop(){ps -ef | grep $mysql_path/mysql_tar | grep -v grep |awk '{print $2}' |xargs kill -9  > /dev/null 2>&1sleep 2
}# 启动MySQL
function mysqld_start(){echo "启动MySQL"nohup $mysql_path/mysql_tar/bin/mysqld --defaults-file=$mysql_path/mysql_tar/my.cnf  --user=mysql & > /dev/null 2>&1sleep 5
}# 重启MySQL
function mysqld_restart(){mysqld_stopmysqld_startsleep 5
}# ******************************** 函数调用 ********************************# rpm类型安装
function rpmType(){isStart  # 是否开始use_check  # 检查用户mariadb_check  # 检查mariadb  mysql_check  # 检查MySQLmysqlFile_check  # 检查残留文件mysql_PackageName_chech_rpmType  # 检查安装包名称 + 安装MySQLchange_passwd_rpmType  # 修改密码change_access_rpmType  # 修改权限Migration_dir  # 迁移目录mysql_successful_rpmType  # 安装结果检查
}# tar类型安装
function tarType(){isStart  # 是否开始use_check  # 检查用户mysql_port_check  # 设置端口mysql_user_check  # 检查mysql用户mysql_PackageName_chech_tarType  # 检查安装包名称 + 安装MySQLchange_passwd_tarType  # 修改MySQL密码change_access_tarType  # 修改MySQL访问权限mysqld_restart  # 重启MySQLmysql_successful_tarType  # 成功
}echo "
MySQL安装类型:
(1)rpm类型:rpm包自动安装
(2)tar类型:tar包编译安装
"
read -p "请选择你要安装MySQL的类型(输入1或者2):" chooseType
if [ "$chooseType" == 1 ] ;thenrpmType
elif [ "$chooseType" == 2 ] ;thentarType
elseecho "输入编号错误!"
fi

总结

  以上就是通过shell脚本一键部署MySQL的全部内容,欢迎各位读者给予建议,后续本人还会在该版本的基础上进一步优化,增加新的方法,尽可能的覆盖更多的使用场景。

  

如果对你有帮助,还请记得收藏点赞加关注,谢谢!

Linux环境下,通过shell脚本实现一键部署MySQL,并支持多种类型相关推荐

  1. 【Rhapsody学习笔记(二)】Linux环境下的Rhapsody集成引擎安装部署

    Rhapsody的安装部署包括Rhapsody引擎的部署(服务端),以及Rhapsody IDE(客户端)的安装部署,其中,IDE可以安装在多台不同的windows客户机上,本文仅介绍CentOS7环 ...

  2. 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)

    Shell脚本备份数据的博文不少,这个应该算是比较简单的,没有复杂逻辑,分享一下. 1.备份脚本 Shell脚本的每行命令一定要在测试环境进行测试,否则会有意想不到的惊吓

  3. RHEL环境下调试Shell脚本时遇到字符串转换整数的问题

    字符串转整型!这种需求应该在编程语言里很常见,Shell里就太麻烦了.有人问为什么要转换?我遇到的问题是参数数量$#需要进行整型运算,而$#取出来的却是字符串,以下为证: if [ $# != 1 ] ...

  4. shell脚本:一键部署网站含内容管理器

    真正的小白可操作,让搭建网站一部成功! 环境: 系统:CentOS Linux release 7.9.2009 (Core) 网络:外网通讯良好 安装包下载链接(不用wget,防止版本问题) htt ...

  5. Linux环境下(CentOS操作系统)如何修改MySQL数据库及Redis的密码?

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...

  6. Linux环境下搭建区块链私有链+部署智能合约

    文章目录 一.前期准备 二.安装goland环境 三.安装go版本的以太坊源码,并编译 四.私有链搭建 五.私有链节点加入 六.部署智能合约 七.参考链接 一.前期准备 安装更新相关组件 sudo y ...

  7. linux监控php脚本执行时间,在LINUX环境下定时执行php脚本

    1. 使用Crontab定时执行linux环境下的php脚本文件 Cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 c ...

  8. Linux环境下JDK/Eclipse一键安装脚本

    -------------------------------------------------------------------- author:jiangxin Email:jiangxinn ...

  9. Linux环境下脚本加密软件SHC的解密方法

    Linux环境下脚本加密软件SHC的解密方法 2016/08/06:更新一个新的解密脚本 https://github.com/yanncam/UnSHc 自从我在博客里面发布了一些免流相关的东西之后 ...

最新文章

  1. 【Linux】Linux简单操作之压缩解压
  2. Spring定时器的使用-多实例下定时重建索引
  3. ++实现 kill_如何设计并实现一个秒杀系统?(含完整代码)
  4. 高级语言中的关键字:const用法分析
  5. 从0开始学习 GitHub 系列之「07.GitHub 常见的几种操作」
  6. 两招轻松恢复误Ghost的硬盘
  7. 计算机硬件主板各部分内部结构,电脑主板各个模块介绍与原理解读
  8. Wireshark 在MacOS10.15.3 系统无法显示网卡的解决方法
  9. 引用 中国计算机学术权威期刊
  10. 2021年的学习Flag:只争朝夕,不负韶华
  11. 米兔机器人终于拼完了_米兔机器人上手组装如果你不会拼装或拆卸建议收藏
  12. 宝山区企业技术中心、区级工程技术研究中心给予奖励20万元
  13. Archlinux arm的国内镜像源(for Banana Pi / Raspberry Pi , etc)
  14. Kotlin高仿微信-第20篇-个人信息
  15. HTML5 小练习1—仿MPG游戏商城
  16. win10网络邻居看到linux,win10网络邻居找不到其他电脑怎么办
  17. java面试题----选择题02
  18. 如何用计算机弹出专业团队音序,高手必知的计算机专业术语(下)
  19. 计算机网络流量监控设计方案,计算机网络流量监控的设计.pdf
  20. 通过python实现乘法口诀

热门文章

  1. 软件架构师 第一部分 基础篇 第二章 模块化
  2. 《奇点艺术》, 颠覆性的科技艺术著作!
  3. 四川交投智慧高速新基建科研基地正式落成
  4. 变频器内部有C语言吗,总结变频器的常用算法,看看你是不是都知道
  5. 视频教程-PHP快速入门视频课程(通俗易懂)【2019版】-PHP
  6. 【Python】OS 模块简介
  7. golang 关于%!(EXTRA xxx=xxx)的异常
  8. 系统流程图,程序流程图和数据流图
  9. Linux命令模式下打开摄像头,Linux下利用Opencv打开笔记本摄像头问题
  10. 刚发布一个开源的UMD电子书构建工具