返回

轻松解决“ERROR 1356 (HY000): View ‘mysql.user’ references invalid table(s) or column(s) or function(s)”报错问题

后端

修复 MariaDB “ERROR 1356:视图 'mysql.user' 引用无效表、列或函数”

作为一名数据库管理员或开发人员,您可能在使用 MariaDB 时遇到过令人困惑的错误信息“ERROR 1356 (HY000): View ‘mysql.user’ references invalid table(s) or column(s) or function(s)”。别担心,我们将为您提供一个详细的修复指南,帮助您快速解决此问题。

理解错误

此错误表明您的 MariaDB 版本中不再存在 "user" 表,导致您无法使用常规方法重置密码。但是,我们有解决办法。

检查 MariaDB 版本

首先,请检查您的 MariaDB 版本。如果您使用的是 10.4.4 或更高版本,请遵循下面的步骤重置密码。对于较低版本,请参阅文章末尾的附录。

重置密码(MariaDB 10.4.4+)

代码示例:

# 登录到 MariaDB 服务器
mysql -u root -p

# 创建临时密码表
CREATE TABLE IF NOT EXISTS tmp_user (
  host VARCHAR(60) NOT NULL,
  user VARCHAR(60) NOT NULL,
  password VARCHAR(60) NOT NULL,
  PRIMARY KEY (host, user)
) ENGINE=MyISAM;

# 将现有用户数据插入临时表
INSERT INTO tmp_user SELECT * FROM mysql.user;

# 重置密码
UPDATE tmp_user SET password = PASSWORD('new_password');

# 删除临时表
DROP TABLE tmp_user;

# 刷新权限
FLUSH PRIVILEGES;

完成上述步骤后,您应该可以使用新密码登录 MariaDB。

附录:较低版本的 MariaDB

如果您使用的是低于 10.4.4 版本的 MariaDB,请按照以下步骤重置密码:

  1. 停止 MariaDB 服务。
  2. 以只读模式启动 MariaDB。
  3. 使用文本编辑器打开 my.cnf 文件。
  4. [mysqld] 部分添加以下行:
skip-grant-tables
  1. 保存并关闭 my.cnf 文件。
  2. 重新启动 MariaDB 服务。
  3. 登录到 MariaDB。
  4. 使用以下命令重置密码:
UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';
  1. 退出 MariaDB。
  2. 编辑 my.cnf 文件,删除之前添加的行。
  3. 重新启动 MariaDB 服务。

现在,您应该可以使用新密码登录 MariaDB。

结论

通过遵循这些步骤,您应该能够解决 MariaDB 中的 “ERROR 1356” 错误并成功重置密码。如果您仍然遇到困难,请随时在评论区提问。

常见问题解答

1. 为什么会出现“ERROR 1356”错误?

当 MariaDB 中的 "user" 表不可用时,就会出现此错误,通常是因为升级或损坏。

2. 重置密码后,还需要做些什么?

刷新权限至关重要,以便您的更改生效。

3. 为什么较低版本的 MariaDB 需要不同的步骤?

在较低版本中,需要在只读模式下启动 MariaDB 并暂时跳过权限检查。

4. 如果我忘记了新密码怎么办?

您可以再次按照本指南中的步骤操作以重置密码。

5. 如何防止此错误再次发生?

定期备份您的数据库以保护数据免受损坏或丢失。