首页 > 数据库 >MySQL-5.7.38 基于二进制包一键安装脚本

MySQL-5.7.38 基于二进制包一键安装脚本

时间:2024-06-23 12:54:15浏览次数:3  
标签:38 NAME 5.7 color MYSQL mysql SCRIPT dev MySQL

#!/bin/bash
#
#********************************************************************
#Author:			Kevin
#Date: 				2024-06-23
#FileName:			install_mysql.sh
#Description:		The test script
#Copyright (C): 	2024 All rights reserved
#********************************************************************


SCRIPT_NAME=$(basename $0)
COLOR="echo -e \e[1;32m"
END="\e[0m"

SRC_DIR='/usr/local/src'
SYSTEM_FILE="/etc/*-release"
MYSQL_VERSION='5.7'
MYSQL_FILE='mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz'
MYSQL_DOWNLOAD_URL='https://mirrors.huaweicloud.com/mysql/Downloads/MySQL'
MYSQL_ROOT_PASSWORD='magedu'

# 加载函数
source /etc/profile.d/color.sh

# 检查用户
check_user(){
	if [ ! $UID -eq 0 ];then 
		{ color "${SCRIPT_NAME}: 当前用户不是root,安装失败" 1 ; exit ; }
	fi
}

# 检查操作系统
check_os(){
	if grep -Ewqi  "Rocky|CentOS"  /etc/issue  ||  grep -Ewqi  "Rocky|CentOS"  /etc/*-release ;then  
        if ! rpm -q redhat-lsb-core &> /dev/null ;then
			dnf -y install redhat-lsb-core &> /dev/null 
			color "${SCRIPT_NAME}: lsb_release 工具安装完成." 0 
		fi
		OS_ID=$(lsb_release -si)
		OS_VERSION=$(lsb_release -sr | sed -nr 's/(^.*)\..*$/\1/p')
	fi
}

# 二进制文件存在性检查
check_file(){
    cd ${SRC_DIR}
    
	rpm -q wget &> /dev/null || dnf -y install wget &> /dev/null
    if [ ! -e ${MYSQL_FILE} ] ;then
        color "${SCRIPT_NAME}: 开始下载 'MySQL' 二进制安装包." 0
        if wget ${MYSQL_DOWNLOAD_URL}-${MYSQL_VERSION}/${MYSQL_FILE} &>/dev/null ;then
            color "${SCRIPT_NAME}: ${MYSQL_FILE} 文件下载成功." 0
        else
            color "${SCRIPT_NAME}: ${MYSQL_FILE} 文件下载失败" 1 
			exit
        fi
    else
        color "${SCRIPT_NAME}: ${MYSQL_FILE} 文件已存在." 3
		return
	fi
}

# 数据库存在性检查
check_mysql(){
    if [ -e /usr/local/mysql ];then
        color "${SCRIPT_NAME}: MySQL 数据库已存在,安装失败." 1
        exit
    fi
}

# 开始安装mysql数据库
install_mysql(){
    cd ${SRC_DIR}
    
    # 安装依赖包
    ${COLOR}''开始下载 \'MySQL\' 依赖包,请稍等...''${END}
    dnf -y install libaio perl-Data-Dumper ncurses-compat-libs &>/dev/null
    
    # 解包 & 创建软链接
    ${COLOR}''开始安装 \'MySQL\' 数据库,请稍等...''${END}
    tar xf ${MYSQL_FILE} -C /usr/local
    MYSQL_DIR=$(echo ${MYSQL_FILE}|sed -rn 's/(^.*[0-9]+).*/\1/p')
    ln -s  ${MYSQL_DIR}  ../mysql

    # 创建系统用户和组
	if ! id -u mysql &> /dev/null ; then
		groupadd -g 3306 mysql
		useradd -r -g 3306 -s /sbin/nologin mysql
		color "mysql 用户创建成功." 0
	fi
	chown -R mysql.mysql /usr/local/mysql
	
	# 添加PATH变量
	echo "PATH=/usr/local/mysql/bin/:$PATH" > /etc/profile.d/mysql.sh
	. /etc/profile.d/mysql.sh
	
	# 编写配置文件
	cat > /etc/my.cnf <<-EOF
	[mysqld]
	server-id=1
	log-bin
	datadir=/data/mysql
	socket=/data/mysql/mysql.sock
	log-error=/data/mysql/mysql.log
	pid-file=/data/mysql/mysql.pid
	
	[client]
	socket=/data/mysql/mysql.sock
	EOF
    
    # 创建数据目录,设置目录权限
	[ -d /data/mysql ] || mkdir -p /data/mysql &> /dev/null
    chown -R  mysql.mysql /data/mysql

    # 初始化MySQl数据库 生成服务脚本
	mysqld --initialize --user=mysql --datadir=/data/mysql 
    cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
    
    # 添加服务列表
    if [ ${OS_ID} == "Rocky" -o ${OS_ID} == "CentOS" ];then
        chkconfig --add mysqld
    fi
    
    # 编写service文件
    cat > /lib/systemd/system/mysqld.service <<-EOF
	[Unit]
	Description=mysql database server
	After=network.target
	
	[Service]
	Type=notify
	PrivateNetwork=false
	Type=forking
	Restart=no
	TimeoutSec=5min
	IgnoreSIGPIPE=no
	KillMode=process
	GuessMainPID=no
	RemainAfterExit=yes
	SuccessExitStatus=5 6
	ExecStart=/etc/init.d/mysqld start
	ExecStop=/etc/init.d//mysqld stop
	ExecReload=/etc/init.d/mysqld reload
	
	[Install]
	WantedBy=multi-user.target
	Alias=mysqld.service
	EOF

	# 加载mysqld.service配置,使其可以被systemd管理
	systemctl daemon-reload # 重新加载systemd管理器配置
    systemctl enable --now mysqld &> /dev/null
    [ $? -ne 0 ] && { color "${SCRIPT_NAME}: 数据库启动失败,退出." 1 ; exit ; }
    
	# 获取数据库旧密码
	MYSQL_OLDPASSWORD=`grep "password" /data/mysql/mysql.log  | sed -nr 's/^.* (.*)$/\1/p'`
    
    # 设置数据库新密码
    mysqladmin  -uroot -p${MYSQL_OLDPASSWORD} password ${MYSQL_ROOT_PASSWORD} &>/dev/null
    color "${SCRIPT_NAME}: MySQL数据库安装完成.  " 0  
}

main(){
    check_user
    check_os
    check_file
    check_mysql
    install_mysql
}

main

标签:38,NAME,5.7,color,MYSQL,mysql,SCRIPT,dev,MySQL
From: https://www.cnblogs.com/cherish-mi/p/18263098

相关文章

  • MySQL入门学习-连接查询.CROSS JOIN
        CROSSJOIN(交叉连接):返回左表中的所有行,左表中的每一行与右表中的所有行组合,返回的行数等于左表行数乘以右表行数。一、连接查询包括:1.CROSSJOIN(交叉连接):返回左表中的所有行,左表中的每一行与右表中的所有行组合。2.INNERJOIN(内连接):返回左表和右表......
  • MySQL入门学习-连接查询.RIGHT JOIN
        RightsJoin是MySQL中的一种连接查询类型,用于根据右表中的匹配条件,将左表中的数据与右表中的数据进行连接。    一、与其他连接查询相比,RightsJoin具有以下特点:1.连接方向:RightsJoin以右表为主表,左表为从表。连接结果将包含右表中的所有行,而左表......
  • Java学习 - MySQL存储过程、函数和触发器练习实例
    存储过程存储过程是什么存储过程是一组已经编译好的SQL语句存储过程优点有什么安全性能高提高代码复用性创建存储过程的语法DELIMITER$#不能加分号CREATEPROCEDURE存储过程名(IN|OUT|INOUT参数名参数类型)BEGIN存储过程语句块END;$DELIMIT......
  • MySQL 面试突击指南:核心知识点解析2
    事务并发可能引发的问题MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有多个客户端与之连接,每个客户端与服务器连接后,可以称为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是说,服务器可能......
  • 学生读书笔记共享系统-毕业设计-Springboot+mysql+Vue
    介绍学生读书笔记共享系统是一款专为学生设计的平台,旨在通过信息化手段实现读书笔记的共享和交流。系统分为管理端和用户端两个角色,分别为管理员和学生用户提供不同的功能模块,满足各自的需求。该系统不仅促进了学生之间的学习交流,还提升了学习效率和笔记管理的便捷性。技术栈......
  • Springboot计算机毕业设计自动答疑系统小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的快速发展,学生对于知识获取和问题解决的需求日益增加。然而,传统的答疑方式,如面对面咨询或邮件回复,存在效率低下、资源分配不均等问题......
  • 基于SpringBoot的物资申领系统的设计与实现 毕业设计-附源码38604
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势。物资分配当然也不例外。物资申领系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统......
  • 238. 除自身以外数组的乘积
    题目给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题。示例1:输入:nums=......
  • anaconda安装①tensorflow-cpu 1.12.0py3.6②tensorflow-gpu 2.4.0③pytorch 2.4.1 通
    本机环境:Win10、rtx4060tianaconda常用命令condaenvlist#查看已有环境名称condaenvlistcondaactivateenv_name #激活环境condaactivateenv_namecondadeactivateenv_name#退出环境condadeactivateenv_namecondacreate-nenv_namepython=3.x#创建p......
  • 简单整理一下近几年辅导的毕业设计项目Java+SSM+MySQL
    序号项目标题语言框架数据库代码论文PPT1jspm基于SSM的“昭愿”甜品店销售管理系统JavaSSMMySQL√√√2jspm基于SSM的医药管理系统JavaSSMMySQL√√√3jspm1x3v1基于JSP的校园宿舍电费缴纳系统JavaSSMMySQL√√√4jspm“众优”大学生家教平台的设计与实现JavaSSMMySQL√√√5......