From 50876037e8eb44c433d35c5885d5b7b221823b49 Mon Sep 17 00:00:00 2001 From: qaq <1937228092@qq.com> Date: Fri, 1 Aug 2025 17:35:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=8D=E7=BD=AE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AF=86=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- panel_install.sh | 58 +++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/panel_install.sh b/panel_install.sh index 1963788..a91d880 100755 --- a/panel_install.sh +++ b/panel_install.sh @@ -996,51 +996,49 @@ reset_mysql_password() { sleep 1 done - # 创建临时密码重置脚本 + # 在skip-grant-tables模式下重置密码 echo "🔄 重置数据库用户密码..." - # 在skip-grant-tables模式下,需要分步执行 - echo "🔧 第一步:刷新权限表..." - echo "🔍 执行命令: docker exec temp-mysql-reset mysql -e \"FLUSH PRIVILEGES;\"" - if docker exec temp-mysql-reset mysql -e "FLUSH PRIVILEGES;"; then - echo "✅ 权限表刷新成功" - else - echo "❌ 权限表刷新失败" - echo "🔍 检查容器状态:" - docker ps | grep temp-mysql-reset || echo "容器未运行" - docker logs temp-mysql-reset | tail -10 - docker stop temp-mysql-reset 2>/dev/null - return 1 - fi - - echo "🔧 第二步:重置用户密码..." + # 在skip-grant-tables模式下,直接操作mysql.user表,不要执行FLUSH PRIVILEGES + echo "🔧 第一步:直接更新mysql.user表中的用户密码..." echo "🔍 重置用户: $DB_USER" - # 重置用户密码 - if docker exec temp-mysql-reset mysql -e "ALTER USER '$DB_USER'@'%' IDENTIFIED BY '$NEW_DB_PASSWORD';"; then - echo "✅ 用户密码重置成功" + + # 直接更新用户密码(MySQL 5.7使用authentication_string字段) + if docker exec temp-mysql-reset mysql -e "UPDATE mysql.user SET authentication_string = PASSWORD('$NEW_DB_PASSWORD') WHERE User = '$DB_USER';"; then + echo "✅ 用户密码更新成功" else - echo "⚠️ 用户密码重置失败,尝试创建用户..." - # 如果用户不存在,先创建用户 - if docker exec temp-mysql-reset mysql -e "CREATE USER '$DB_USER'@'%' IDENTIFIED BY '$NEW_DB_PASSWORD';"; then - echo "✅ 用户创建成功" + echo "⚠️ 用户密码更新失败,可能用户不存在" + echo "🔍 检查用户是否存在..." + USER_EXISTS=$(docker exec temp-mysql-reset mysql -e "SELECT COUNT(*) FROM mysql.user WHERE User = '$DB_USER';" 2>/dev/null | tail -n 1) + if [ "$USER_EXISTS" = "0" ]; then + echo "🔧 用户不存在,创建新用户..." + # 在skip-grant-tables模式下,直接插入用户记录 + if docker exec temp-mysql-reset mysql -e "INSERT INTO mysql.user (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('%', '$DB_USER', PASSWORD('$NEW_DB_PASSWORD'), '', '', '');"; then + echo "✅ 新用户创建成功" + else + echo "❌ 新用户创建失败" + docker logs temp-mysql-reset | tail -10 + docker stop temp-mysql-reset 2>/dev/null + return 1 + fi else - echo "❌ 用户创建失败" + echo "❌ 用户存在但密码更新失败" docker logs temp-mysql-reset | tail -10 docker stop temp-mysql-reset 2>/dev/null return 1 fi fi - echo "🔧 第三步:重置root密码..." - # 重置root密码 - docker exec temp-mysql-reset mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$NEW_DB_PASSWORD';" - docker exec temp-mysql-reset mysql -e "ALTER USER 'root'@'%' IDENTIFIED BY '$NEW_DB_PASSWORD';" + echo "🔧 第二步:重置root密码..." + # 更新root用户密码 + docker exec temp-mysql-reset mysql -e "UPDATE mysql.user SET authentication_string = PASSWORD('$NEW_DB_PASSWORD') WHERE User = 'root';" + echo "✅ root密码更新完成" - echo "🔧 第四步:刷新权限..." + echo "🔧 第三步:最后刷新权限..." if docker exec temp-mysql-reset mysql -e "FLUSH PRIVILEGES;"; then echo "✅ 密码重置完成" else - echo "❌ 最终权限刷新失败" + echo "❌ 权限刷新失败" docker logs temp-mysql-reset | tail -10 docker stop temp-mysql-reset 2>/dev/null return 1