Drupal7执行prepare_db脚本报UserListException找不到admin用户如何解决
Drupal7 执行数据库初始化脚本重置admin密码报错排查解决
报错核心原因是Drush执行用户密码重置逻辑时,无法在当前引导的Drupal实例中匹配到用户名为admin的账号,按以下步骤逐次排查即可:
- 校验Drush数据库连接正确性
进入Drupal项目根目录执行drush status,确认两项核心配置:Drupal bootstrap状态为Successful- 数据库配置项指向你预期使用的本地开发数据库
若引导失败或连错数据库,检查脚本中执行Drush命令的工作目录配置、sites/default/settings.php中的数据库连接参数是否正确,确保Drush能正常读到本地开发库。
- 确认超级管理员实际用户名
Drupal7默认超级管理员uid为1,很多生产库导出时会做脱敏修改,把默认用户名admin改成其他值。直接在数据库执行SQL查询实际用户名:
如果查询返回的SELECT uid, name FROM users WHERE uid = 1;name字段不是admin,要么把脚本中重置密码命令的目标用户名改成实际值,要么直接用uid指定目标用户,绕开用户名匹配逻辑。 - 修复Windows Git Bash参数转义问题
Windows环境下Git Bash向PHP类CLI程序传参时,经常出现字符串转义异常,导致Drush接收到的用户名参数带不可见的特殊字符,匹配失败。不要在脚本里用用户名作为重置目标,直接把脚本中重置密码的命令替换为按uid操作的版本,兼容性最好:
替换后单独在Git Bash中手动执行一次该命令,确认能正常返回密码重置成功的提示,再重新跑全量脚本。# 原命令一般是 drush user-password admin --password="admin" # 替换为以下命令,直接指定uid=1的超级管理员 drush user-password 1 --password="admin" - 校验Drush版本兼容性
Drupal7最高兼容Drush 8版本,你当前使用的是全局Composer安装的Drush,执行drush --version查看版本号,如果版本≥9,会出现Drupal引导异常、用户匹配逻辑错误的问题。卸载高版本后安装兼容版本即可:composer global remove drush/drush composer global require drush/drush:8.* - 检查数据库导入完整性
若以上步骤都无效,执行drush sqlq "SELECT COUNT(*) FROM users;"查询用户表数据量,如果返回值小于2(仅存在uid=0的匿名用户),说明之前的数据库备份导入不完整,重新导入完整的数据库备份后再执行脚本。
快速修复:90%的同场景报错直接替换重置密码命令为按uid=1操作的版本即可解决,无需全量排查。
内容的提问来源于stack exchange,提问作者vaishali
相关产品推荐
相关产品推荐

