前言
学习mysql8.0,更新脚本,支持选择安装mysql8.0/5.7
但是目前碰到了关于引号的问题,暂时无法解决
脚本
#/bin/bash
#version: v2
#author: YK
#update: 可以选择版本,安装mysql5.7或8.4,修改了卸载bug
#网络测试
ping -c2 223.109.81.112 &>/dev/null #百度IP
if [ $? -ne 0 ]; then #$?代表上一个命令执行结果,0为正确
echo "网络不通";
exit 0;
else
ping -c2 www.baidu.com &>/dev/null
if [ $? -ne 0 ]; then
echo "DNS有问题";
exit 0;
fi
fi
#存放路径
echo -e "mysql的rpm包存放路径(默认为/usr/local/mysql):\n注意,会清空该目录"
read rpm_where
locate=${rpm_locate:-"/usr/local/mysql"}
if [ ! -d ${locate} ]; then
#-d 匹配目录是否存在,存在时为true,使用!可以取反
mkdir -p ${locate}
fi
rm ${locate}/mysql-* -f
groupadd mysql &>/dev/null
useradd -r -g mysql mysql &>/dev/null
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql
#安装版本
echo -e "安装mysql5.7?\nyes-->5.7\nno -->8.4 "
#使用 -e才能解释转义字符,否则类型\n都不会解释
while true; do
read -p "请输入 (默认为yes): " version
version=${version:-"yes"}
case ${version} in
[Yy][Ee][Ss])
#注意选项末尾有个')'
#此方法无视大小写且简单易实现
is_mysql57=$(ls ${locate}|grep mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar|wc -l )
if [ ${is_mysql57} -eq 0 ]; then
echo "正在下载mysql5.7"
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar -P ${locate} &>/devnull
fi
echo "已经下载mysql5.7"
break
#此break是对于外循环while的,case本身不需要break
;;
[Nn][Oo])
is_mysql84=$(ls ${locate}|grep mysql-8.4|grep el7.x86_64.rpm-bundle.tar|wc -l )
if [ ${is_mysql84} -eq 0 ]; then
echo "正在下载mysql8.4"
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.4-1.el7.x86_64.rpm-bundle.tar -P ${locate} &>/dev/null
#wget的-P可以指定下载的位置
fi
echo "已经下载mysql8.4 "
break
;;
*)
echo "请输入yes/no,或使用'ctrl+c'退出"
;;
esac
done
echo "下载完成"
echo "mysql密码(默认密码为MyStr0ngP@ssw0rd!):"
read secret_n
secret_new=${secret_n:-"MyStr0ngP@ssw0rd!"}
echo "mysql密码:$secret_new"
echo "正在删除旧安装包"
rpm -qa|grep mysql* |xargs yum remove -y >&/dev/null
rpm -qa|grep mariadb* |xargs yum remove -y >&/dev/null
rpm -qa|grep mysql*|xargs rpm -e >&/dev/null
rm -rf /var/lib/mysql/*
rm -f /var/log/mysqld.log
#安装
echo "正在安装"
cd $locate
yum -y install libaio net-tools openssl-devel perl-Data-Dumper perl-JSON perl-Test-More >&/dev/null
tar xf mysql*
#导入认证密钥
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
#以下安装包严格按顺序安装
rpm -ivh ${locate}/mysql-community-client-plugins-*.el7.x86_64.rpm >&/dev/null
rpm -ivh ${locate}/mysql-community-common-*.el7.x86_64.rpm >&/dev/null
rpm -ivh ${locate}/mysql-community-libs-*.el7.x86_64.rpm >&/dev/null
rpm -ivh ${locate}/mysql-community-client-*.el7.x86_64.rpm >&/dev/null
rpm -ivh ${locate}/mysql-community-icu-data-files-8.4*.el7.x86_64.rpm >&/dev/null
rpm -ivh ${locate}/mysql-community-devel-*.el7.x86_64.rpm >&/dev/null
ls mysql-community-client-*.el7.x86_64.rpm |head -1|xargs rpm -ivh >&/dev/null
rpm -ivh ${locate}/mysql-community-server-*.el7.x86_64.rpm >&/dev/null
#以下包未安装mysql-community-server-debug-8.4.4-1.el7.x86_64.rpm;mysql-community-test-8.4.4-1.el7.x86_64.rpm;mysql-community-debuginfo-8.4.4-1.el7.x86_64.rpm
if [ $? -ne 0 ]; then
echo "安装失败"
exit 0
fi
#5.7和8.4都有一部分组件没有安装
#启动
mysql_run=0
echo "正在启动mysql"
systemctl daemon-reload
while [ "$mysql_run" -ne 1 ]
do
mysql_run=$(systemctl status mysqld|grep running |wc -l)
systemctl enable --now mysqld
#如果没有,可以手动写service或者直接使用命令启动
#/usr/local/mysql/bin/mysqld --initialize --user=mysql
sleep 10
done
echo "mysql已启动"
rm ${locate}/mysql-* -f
#改密码
secret_old=\'$(grep 'temporary password' /var/log/mysqld.log|awk '{print $NF}'| tr -d ';')\'
sleep 3
echo -e "mysqladmin -u root -p$secret_old password 'MyStr0ngP@ssw0rd!'\n该命令可以更换root密码,但是因为直接在命令行内输入新密码,会出现警告,这里仅仅是给个示例"
echo "mysql -uroot -p'MyStr0ngP@ssw0rd!'"
本文著作权归作者 [ wymm ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。