首页 » MySQL » 正文

MySQL重置密码脚本

#!/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

发表评论