为了减少部署环境的繁琐度,本人写了一个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
评论区