#!/bin/bash
#system:Centos7 Minimal install
#by:波仔
#url:www.yisca.cn
#Date:2019年11月25日
#忘记mysql密码时重置密码时使用
function Countdown (){
echo -n 倒计时:
tput sc
count=$1
while true;
do
if [ ${count} -le $1 ] && [ ${count} -gt 0 ]
then
let count--;
sleep 1;
tput rc
tput ed
echo -n ${count};
else
echo -e "\n"
break
fi
done
}
function reset_mysql_password () {
while :;do
Mysql_Root_Password=""
read -p "请输入$DB_Name的root密码(密码需包含大小写字母、数字、特殊符号): " Mysql_Root_Password
if [ "${Mysql_Root_Password}" = "" ]
then
echo "错误: 密码不能为空!!"
else
break
fi
done
echo -e "\n"
echo -e "\033[37;31;5m关闭 ${DB_Name} ${DB_Ver} 中...\033[39;49;0m"
systemctl stop mysqld
Countdown 10
echo -e "\033[37;31;5m开始以跳过授权表的方式运行${DB_Name}\033[39;49;0m"
${MYSQLD} --skip-grant-tables --user=mysql &
echo -e "\n"
Countdown 10
echo -e "\n"
echo -e "\033[37;31;5m更新 ${DB_Name} root 密码中...\033[39;49;0m"
if echo "${DB_Ver}" | grep -Eqi '^8.0.'; then
${MYSQL} -u root << EOF
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '${Mysql_Root_Password}';
FLUSH PRIVILEGES;
EOF
elif echo "${DB_Ver}" | grep -Eqi '^5.7.'; then
${MYSQL} -u root << EOF
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '${Mysql_Root_Password}';
EOF
fi
if [ $? -eq 0 ]
then
echo -e "MySQL ${DB_Ver} 密码重置成功"
echo -e "\033[37;31;5m正在重启 ${DB_Name} ${DB_Ver} 服务\033[39;49;0m"
echo "MySQL PID IS : `pgrep mysqld`"
echo "正在关闭mysqld进程"
pkill mysqld
echo -e "\n"
Countdown 10
echo -e "\n"
systemctl start mysqld
case $? in
0)
echo -e "${DB_Name} ${DB_Ver} 密码已经重置成功,新密码为${Mysql_Root_Password} "
;;
*)
sleep 5
systemctl start mysqld
if [ $? -eq 0 ]
then
echo -e "${DB_Name} ${DB_Ver} 密码已经重置成功,新密码为${Mysql_Root_Password} "
else
echo -e "${DB_Name} ${DB_Ver} 启动失败,请检查是否重置成功,新密码为${Mysql_Root_Password}"
fi
esac
sleep 5
echo -e "\n"
[ -n "`systemctl status mysqld|grep running`" ] && echo -e "\e[1;31mMySQL数据库已经启动\e[0m"
echo -e "\n"
else
echo -e "${DB_Name} ${DB_Ver} 密码重置失败!!"
echo -e "\n"
sleep 2
fi
}
function change_mysql_password () {
if [ -s /usr/local/mysql/bin/mysql ]
then
DB_Name="MySQL"
DB_Ver=`/usr/local/mysql/bin/mysql_config --version`
mysql_install=source
elif [ -s /usr/bin/mysql ]
then
DB_Name="MySQL"
DB_Ver=`/usr/bin/mysql_config --version`
mysql_install=yum
else
echo -e "没找到mysql执行文件,请检查是否成功安装"
fi
case ${mysql_install} in
source)
MYSQLD=/usr/local/mysql/bin/mysqld
MYSQL=/usr/local/mysql/bin/mysql
reset_mysql_password
;;
yum)
[ -s /usr/bin/mysqld ] && MYSQLD=/usr/bin/mysqld
[ -s /usr/sbin/mysqld ] && MYSQLD=/usr/sbin/mysqld
[ -s /usr/bin/mysql ] && MYSQL=/usr/bin/mysql
[ -s /usr/sbin/mysql ] && MYSQL=/usr/bin/mysql
reset_mysql_password
esac
}
[ -s /usr/local/mysql/bin/mysql ] && mysql_log=/usr/local/mysql/log
[ -s /usr/bin/mysql ] && mysql_log=/var/log
change_mysql_password