目 录CONTENT

文章目录

Linux一键安装Jdk和MySQL和Redis脚本

筱晶哥哥
2023-02-14 / 0 评论 / 0 点赞 / 93 阅读 / 38868 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-03-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

为了减少部署环境的繁琐度,本人写了一个Linux环境下一键部署安装Jdk、MySQL和Redis的脚本,可以单独部署某个组件,有需要的可以自己拓展。

脚本内容

install.sh

#!/bin/bash
# author lijing
# qq 2427259171
# 此脚本可以根据自己的需要拓展
#-------------------------------------------------------------------------------------------------------------------#
#|          Some people die at the age of 25 and don't bury themselves in the earth until they are 75              |#
#|------------------------------------------------------------------------------------------------------------------#
#|				                                                                                   |#
#|				 __     ______       _____  ______   __  __  ____                                  |#
#|				/\ \   /\__  _\     /\___ \/\__  _\ /\ \/\ \/\  _`\                                |#
#|				\ \ \  \/_/\ \/     \/__/\ \/_/\ \/ \ \ `\\ \ \ \L\_\                              |#
#|				 \ \ \  __\ \ \        _\ \ \ \ \ \  \ \ , ` \ \ \L_L                              |#
#|				  \ \ \L\ \\_\ \__    /\ \_\ \ \_\ \__\ \ \`\ \ \ \/, \                            |#
#|				   \ \____//\_____\   \ \____/ /\_____\\ \_\ \_\ \____/                            |#
#|				    \/___/ \/_____/    \/___/  \/_____/ \/_/\/_/\/___/                             |#
#|				                                                                                   |#
#-------------------------------------------------------------------------------------------------------------------#

# 当前目录
CURRENT_DIR=$(cd `dirname $0`; pwd)
# 二进制安装包所在目录,请将执行脚本与此目录放在同一级
INSTALL_PACKAGE_DIR=$CURRENT_DIR/packages


######################JDK相关变量######################
# jdk安装包名称
JDK_PACKAGE_NAME=jdk-8u161-linux-x64.tar.gz
# jdk解压后目录名称
JDK_DIR_NAME=jdk1.8.0_161
######################JDK相关变量######################


######################MYSQL相关变量######################
# mysql的rpm安装包名称
MYSQL_PACKAGE_NAME=mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar
# mysql的rpm文件解压目录
MYSQL_UNPACK_DIR=$INSTALL_PACKAGE_DIR/mysql_rpm-files
# mysql版本
MYSQL_VERSION=8.0.32-1
# libaio的rpm文件名称
LIBAIO_PACKAGE_NAME=libaio-0.3.109-13.el7.x86_64.rpm
# net-tools的rpm文件名称
NET_TOOLS_PACKAGE_NAME=net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
# 数据库密码
MYSQL_NEW_PWD=lijing123456
######################MYSQL相关变量######################


######################REDIS相关变量######################
GCC_RPM_DIR=$INSTALL_PACKAGE_DIR/g++
REDIS_PACKAGE_NAME=redis-6.2.3.tar.gz
REDIS_INSTALL_HOME=/usr/local/redis
REDIS_VERSION=redis-6.2.3
######################REDIS相关变量######################

# 使用说明,用来提示输入参数,可以自己拓展
usage() {
    echo -e "\033[31mUsage: $0 [jdk|mysql|redis]\033[0m"
    echo -e "\033[31mjdk:安装jdk\033[0m"
    echo -e "\033[31mmysql:安装mysql\033[0m"
    echo -e "\033[31redis:安装redis\033[0m"
    exit 1
}

# 检查用户
function user_check(){
    current_user=$USER
    # 如果当前用户不是root用户,那么退出程序
    if [ $current_user != 'root' ];then
        echo "当前用户非root,请切换至root后再操作!" 
        exit 0
    else
        return 0
    fi
}

# 安装jdk
function install_jdk(){
    # 是否安装jdk
    read -p "是否开始安装jdk?(Y/N):" choose_if_install_jdk
    if [ "$choose_if_install_jdk" == 'Y' ] || [ "$choose_if_install_jdk" == 'y' ] ;then
       echo "开始安装jdk...."
       tar -zxvf $INSTALL_PACKAGE_DIR/$JDK_PACKAGE_NAME -C $INSTALL_PACKAGE_DIR
cat >> /etc/profile << EOF
export JAVA_HOME=$INSTALL_PACKAGE_DIR/$JDK_DIR_NAME
export CLASSPATH=.:\$JAVA_HOME/lib/rt.jar:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib/dt.jar
export PATH=\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$PATH
EOF
    else
        exit 0  # 退出程序
    fi
}

# 安装mysql
function install_mysql(){
    # 是否安装mysql
    read -p "是否开始安装MySQL?(Y/N):" choose_if_install_mysql
    if [ "$choose_if_install_mysql" == 'Y' ] || [ "$choose_if_install_mysql" == 'y' ] ;then
       echo "开始安装mysql...."
       # 检查mariadb
       check_mariadb
       # 检查libaio
       check_libaio
       # 检查net-tools
       check_net_tools
       # 检查MySQL
       check_mysql
       # 检查可能的MySQL残留文件
       check_mysql_file
       # 安装mysql服务
       install_mysql_server
       # 修改数据库密码
       change_mysql_password
       # 修改数据库权限
       change_mysql_access
       # 迁移目录
       migration_mysql_dir
       # mysql是否安装成功
       if_mysql_success
    else
        exit 0  # 退出程序
    fi
}

# 安装Redis
function install_redis(){
    # 是否安装redis
    read -p "是否开始安装redis?(Y/N):" choose_if_install_redis
    if [ "$choose_if_install_redis" == 'Y' ] || [ "$choose_if_install_redis" == 'y' ] ;then
       echo "开始安装redis...."
       # 创建Redis安装目录
       create_redis_install_dir
       # 检查是否安装了gcc-c++
       check_gcc
       # 安装Redis服务
       install_redis_server
    else
        exit 0  # 退出程序
    fi
}

# 检查是否安装gcc-c++
function check_gcc(){
    gcc_rpm_list=`rpm -qa | grep gcc-c++`
    if [ -n "$gcc_rpm_list" ];then
        gcc -v
        echo "gcc-c++检查结果:系统已安装gcc-c++,跳过安装gcc-c++!"
    else
        echo "gcc-c++检查结果:系统未安装gcc-c++,开始安装gcc-c++..."
        rpm -Uvh $GCC_RPM_DIR/mpfr-3.1.1-4.el7.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/libmpc-1.0.1-3.el7.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/cpp-4.8.5-44.el7.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/kernel-headers-3.10.0-1160.71.1.el7.x86_64.rpm
        rpm -Uvh --nodeps $GCC_RPM_DIR/glibc-2.17-326.el7_9.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/glibc-common-2.17-326.el7_9.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/glibc-headers-2.17-326.el7_9.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/glibc-devel-2.17-326.el7_9.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/libgomp-4.8.5-44.el7.x86_64.rpm 
        rpm -Uvh $GCC_RPM_DIR/libgcc-4.8.5-44.el7.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/gcc-4.8.5-44.el7.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/libstdc++-4.8.5-44.el7.x86_64.rpm 
        rpm -Uvh $GCC_RPM_DIR/libstdc++-devel-4.8.5-44.el7.x86_64.rpm
        rpm -Uvh $GCC_RPM_DIR/gcc-c++-4.8.5-44.el7.x86_64.rpm
        gcc -v
        echo "gcc-c++安装成功!"
    fi
}

# 创建Redis安装目录
function create_redis_install_dir(){
    # 判断安装目录是否已经存在,存在提示是否删除,是则删除,否则结束脚本
    if [ -d $REDIS_INSTALL_HOME ] ;then
        read -t 60 -p "目录$REDIS_INSTALL_HOME已经存在,是否删除?(Y/N):" delete_confirm
        case $delete_confirm in
        y | Y)
            if rm -rf "$REDIS_INSTALL_HOME"
            then
                echo "删除$redis_home目录成功"
            fi;;
        n | N)
            echo "安装目录$REDIS_INSTALL_HOME存在,脚本运行结束!"
            exit;;
        *)
            echo "输入错误或60s未确认,脚本运行结束!"
            exit;;
        esac
    fi
    # 如果安装脚本目录不存在,则创建安装脚本目录
    if [ ! -d $REDIS_INSTALL_HOME ] ;then
        echo "安装目录$REDIS_INSTALL_HOME不存在,开始创建$REDIS_INSTALL_HOME"
        mkdir -p $REDIS_INSTALL_HOME
    fi
}

# 安装Redis服务
function install_redis_server(){
    # 解压压缩包REDIS_INSTALL_HOME
    tar -zxvf $INSTALL_PACKAGE_DIR/$REDIS_PACKAGE_NAME -C $REDIS_INSTALL_HOME
    # 进入解压目录,进行编译
    if cd "$REDIS_INSTALL_HOME/$REDIS_VERSION"
    then
        if make
        then 
            if make install PREFIX=$REDIS_INSTALL_HOME
            then
                cp redis.conf ../bin/redis.conf
                echo ""
                echo ""
                echo ""
                echo "========================================================================="
                echo "========================================================================="
                echo "Redis安装完成,启动脚本目录$REDIS_INSTALL_HOME/bin"
                echo "配置文件已复制到$REDIS_INSTALL_HOME/bin目录下"
                echo "自行修改redis.conf配置文件配置,开放对应端口"
                echo "若外部需要连接 redis ,在 redis.conf 里面将 bind 127.0.0.1 注释掉,否则连不上"
                echo "启动命令:$REDIS_INSTALL_HOME/bin/redis-server $REDIS_INSTALL_HOME/bin/redis.conf"
                echo "如果想要指定redis后台启动,则在 redis.conf 中将 daemonize 改为 yes,或者在启动的命令后面加上 &,表示后台启动"
                echo "如果需要持久化,则在 redis.conf 中将 appendonly 改为 yes,指定持久化方式为aof"
                echo "查看是否启动:ps -ef|grep redis,若需要停止redis服务,kill -9 前面的进程号"
                echo "默认端口6379,默认不需要密码,若需要密码,请在 redis.conf 中配置 requirepass 123456 "
                echo "卸载:停止程序,删除$REDIS_INSTALL_HOME,rm -rf $REDIS_INSTALL_HOME========="
                echo "========================================================================="
                echo "========================================================================="
                echo ""	
                echo ""
                echo ""
            fi  >> $REDIS_INSTALL_HOME/install.log
        else
            echo "==========make命令执行异常=========="
            exit
        fi
    else
        echo "=========解压文件名称不是$REDIS_VERSION,修改脚本部分代码重试========="
    fi
    echo ""
    echo ""
    echo ""
    echo "========================================================================="
    echo "========================================================================="
    echo "Redis安装完成,启动脚本目录$REDIS_INSTALL_HOME/bin"
    echo "配置文件已复制到$REDIS_INSTALL_HOME/bin目录下"
    echo "自行修改redis.conf配置文件配置,开放对应端口"
    echo "若外部需要连接 redis ,在 redis.conf 里面将 bind 127.0.0.1 注释掉,否则连不上"
    echo "启动命令:$REDIS_INSTALL_HOME/bin/redis-server $REDIS_INSTALL_HOME/bin/redis.conf"
    echo "如果想要指定redis后台启动,则在 redis.conf 中将 daemonize 改为 yes,或者在启动的命令后面加上 &,表示后台启动"
    echo "如果需要持久化,则在 redis.conf 中将 appendonly 改为 yes,指定持久化方式为aof"
    echo "查看是否启动:ps -ef|grep redis,若需要停止redis服务,kill -9 前面的进程号"
    echo "默认端口6379,默认不需要密码,若需要密码,请在 redis.conf 中配置 requirepass 123456 "
    echo "卸载:停止程序,删除$REDIS_INSTALL_HOME,rm -rf $REDIS_INSTALL_HOME========="
    echo "========================================================================="
    echo "========================================================================="
    echo ""
    echo "===========Redis安装完成,安装日志查看$REDIS_INSTALL_HOME/install.log=========="
    echo ""
    echo ""
}

# 检查mariadb
function check_mariadb(){
    mariadb_rpm_list=`rpm -qa | grep mariadb`
    if [ -n "$mariadb_rpm_list" ];then
        echo "mariadb检查结果:系统已安装mariadb,需先卸载"
        read -p "是否卸载mariadb?(Y/N):" choose_Unmariadb
        if [ "$choose_Unmariadb" == 'Y' ] || [ "$choose_Unmariadb" == 'y' ] ;then
            echo "开始卸载mariadb..."
            rpm -qa |grep mariadb |xargs rpm -e --nodeps
            sleep 2
            echo "mariadb卸载完成!"
        else
            exit 0
        fi
    else
        echo "mariadb检查结果:系统未安装mariadb."
    fi
}

# 检查MySQL
function check_mysql(){
    mysql_rpm_list=`rpm -qa | grep mysql`
    if [ -n "$mysql_rpm_list" ]; then
        echo "mysql检查结果:系统已安装mysql,需先卸载,已安装的MySQL如下:"
        rpm -qa | grep mysql | tee
        read -p "是否卸载已安装的MySQL?(Y/N):" choose_UnMySQL
        if [ "$choose_UnMySQL" == 'Y' ] || [ "$choose_UnMySQL" == 'y' ];then
            echo "开始卸载MySQL..."
            rpm -qa |grep mysql | xargs rpm -e --nodeps  > /dev/null 2>&1
            sleep 2
            echo "MySQL卸载完成!"
        else
            exit 0
        fi
    else
        echo "mysql检查结果:系统未安装MySQL."
    fi
}

# 检查libaio,我安装的时候,提示我缺少libaio,所以这里我写了个检查的函数
# 如果系统中没有libaio,则使用libaio的离线包安装,如果系统里有libaio,则不安装了
function check_libaio(){
    libaio_rpm_list=`rpm -qa | grep libaio`
    if [ -n "$libaio_rpm_list" ];then
        echo "libaio检查结果:系统已安装libaio,跳过安装libaio!"
    else
        echo "libaio检查结果:系统未安装libaio,开始安装libaio..."
        echo "本次安装的libaio的rpm文件为$LIBAIO_PACKAGE_NAME"
        rpm -ivh $INSTALL_PACKAGE_DIR/$LIBAIO_PACKAGE_NAME
        echo "libaio安装成功!"
    fi
}

# 检查net-tools,如果没有安装net-tools则使用离线包安装
function check_net_tools(){
    net_tools_rpm_list=`rpm -qa | grep net-tools`
    if [ -n "$net_tools_rpm_list" ];then
        echo "net-tools检查结果:系统已安装net-tools,跳过安装net-tools!"
    else
        echo "net-tools检查结果:系统未安装net-tools,开始安装net-tools..."
        echo "本次安装的net-tools的rpm文件为$NET_TOOLS_PACKAGE_NAME"
        rpm -ivh $INSTALL_PACKAGE_DIR/$NET_TOOLS_PACKAGE_NAME
        echo "net-tools安装成功!"
    fi
}

# 检查可能的MySQL残留文件
function check_mysql_file(){
    mysqlFile=`find / -name mysql`
    if [ -n "$mysqlFile" ]; then
        echo "检测到服务器可能存在MySQL残留文件,文件列表如下:"
        find / -name mysql |xargs du --max-depth=0 -h   # 打印可能的MySQL残留文件及大小
        read -p "您要对这些文件怎么处理?(0:正常文件,不处理;1:我要手动删除;del:全部删除):" choose_delmysqlFile
        if [ "$choose_delmysqlFile" == 0 ] ;then
            echo "您选择了不处理MySQL残留文件!"
        elif [ "$choose_delmysqlFile" == 1 ] ;then
            exit 0
        elif [ "$choose_delmysqlFile" == 'del' ] ;then
            echo "开始清理MySQL残留文件..."
            # 清理冗余文件
            find / -name mysql |xargs rm -rf
            sleep 3
            rm -f /var/log/mysqld.log
            echo "MySQL残留文件清理成功!"
        else
            echo "输入错误,请选择0、1、del."
            echo "你只能输入0、1、del这些指令"
            exit 0
        fi
    else
        rm -f /var/log/mysqld.log
        echo "mysql残留文件检查结果:不存在MySQL残留文件"
    fi
}

# 安装mysql服务
function install_mysql_server(){
    echo "关闭SELinux..."  
    setenforce 0   > /dev/null 
    echo "关闭防火墙..."
    systemctl stop firewalld.service
    echo "开始安装MySQL源"
    mkdir -p $MYSQL_UNPACK_DIR
    tar -xvf $INSTALL_PACKAGE_DIR/mysql-${MYSQL_VERSION}.el7.x86_64.rpm-bundle.tar -C $MYSQL_UNPACK_DIR
    rpm -ivh $MYSQL_UNPACK_DIR/mysql-community-common-${MYSQL_VERSION}.el7.x86_64.rpm
    rpm -ivh $MYSQL_UNPACK_DIR/mysql-community-client-plugins-${MYSQL_VERSION}.el7.x86_64.rpm
    yum remove mysql-libs
    rpm -ivh $MYSQL_UNPACK_DIR/mysql-community-icu-data-files-${MYSQL_VERSION}.el7.x86_64.rpm
    rpm -ivh $MYSQL_UNPACK_DIR/mysql-community-libs-${MYSQL_VERSION}.el7.x86_64.rpm
    rpm -ivh $MYSQL_UNPACK_DIR/mysql-community-client-${MYSQL_VERSION}.el7.x86_64.rpm
    rpm -ivh $MYSQL_UNPACK_DIR/mysql-community-server-${MYSQL_VERSION}.el7.x86_64.rpm
    rpm -qa | grep -i mysql
    echo "开始安装MySQL..."
    yum install mysql-server -y
    sleep 5
    echo "MySQL安装成功,开始启动MySQL..."
    systemctl start mysqld.service
    if [ $? -eq 0 ] ;then
        echo "MySQL启动成功!"
    else
        echo "MySQL启动失败,请检查日志/var/log/mysqld.log"
        exit 0
    fi
}

# 修改数据库密码
function change_mysql_password(){
    initpasswd=`cat /var/log/mysqld.log |grep root@localhost |awk '{print $NF}'`   # 初始密码
    echo "MySQL的初始密码是:$initpasswd"
    # read -p "请输入您要设置MySQL的root用户密码:" passwd
    # mysqladmin -uroot -p$initpasswd password $passwd   > /dev/null
    echo "您在脚本中配置的密码为:$MYSQL_NEW_PWD"
    mysqladmin -uroot -p$initpasswd password $MYSQL_NEW_PWD > /dev/null
    if [ $? -eq 0 ] ;then
        echo "修改数据库密码成功!"
    else
        echo "修改数据库密码失败,执行过程中可能出现错误,请排查后再来执行此脚本!"
        echo "卸载MYSQL时,请确保MYSQL卸载干净!"
        exit 0
    fi
}

# 修改MySQL权限
function change_mysql_access(){
    mysql -uroot -p$MYSQL_NEW_PWD <<EOF
    use mysql;
    update user set Host="%" where User="root";
    flush privileges;
    quit
EOF
    systemctl restart mysqld
    echo "MySQL权限修改成功!"
}

# 迁移数据目录
function migration_mysql_dir(){
    read -p "是否需要迁移MySQL数据目录?(Y/N):" choose_isMigration
    if [ "$choose_isMigration" == 'Y' ] || [ "$choose_isMigration" == 'y' ] ;then 
        read -p "请输入您要迁移至的路径(如:/opt/data):" newPath
        echo "开始准备迁移目录..."
        systemctl stop mysqld.service
        mkdir -p $newPath   # 新建数据目录
        cp -r /var/lib/mysql $newPath
        chmod -R 755 $newPath
        chown -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.cnf
        sed -i "1i\[client]" /etc/my.cnf
        systemctl start mysqld.service
        echo "MySQL目录迁移成功!"   
    fi
}

# 检查mysql安装结果
function if_mysql_success(){
    netstat -ntl | grep 3306
    if [ $? -eq 0 ] ;then
        echo "MySQL安装成功,现在可以开始正式使用啦!"
    else
        echo "MySQL安装或启动失败,请查看日志:/var/log/mysqld.log"
    fi
}

param=$1
function main(){
    # 检查用户是否为root
    user_check
    # 使用说明  
    # usage
    # 根据输入参数,选择执行对应方法,不输入则执行使用说明,可以自己拓展
    case $param in
      "jdk")
        install_jdk
        source /etc/profile
        java -version
        ;;
      "mysql")
        install_mysql
        ;; 
      "redis")
        install_redis
        ;; 
       *)
        usage
        ;;
    esac
}
main

运行命令

# 安装Jdk
./install.sh jdk
# 安装MySQL
./install.sh mysql
# 安装Redis
./install.sh redis
# 你自己拓展的
./install.sh xxx

完整包下载

点我下载

0

评论区