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

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


脚本内容

install.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
#!/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

运行命令

1
2
3
4
5
6
7
8
# 安装Jdk
./install.sh jdk
# 安装MySQL
./install.sh mysql
# 安装Redis
./install.sh redis
# 你自己拓展的
./install.sh xxx

完整包下载

点我下载

点击查看

本文标题:Linux一键安装Jdk和MySQL和Redis脚本

文章作者:LiJing

发布时间:2023年02月14日 - 16:52:56

最后更新:2023年06月03日 - 10:02:11

原始链接:https://blog-next.xiaojingge.com/posts/1024284290.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------