无法从 mysql.proc 加载。该表可能已损坏

问题描述 投票:0回答:3

我知道它看起来像重复的,但我找到的解决方案对我不起作用。 我卸载了 MySQL 5.1 并安装了 5.6,我想将之前导出的 SQL 文件导入回来。但有一些函数会导致导出文件中出现错误。 我找到并运行了命令:

../bin mysql mysql_upgrade -uroot -p --force

但如果我理解,它仅在升级时有效,在安装时无效。有什么解决办法吗?

我还从导入文件中删除了函数定义,导入完成。但如果我想手动重新定义该函数,它会显示相同的错误“无法从 mysql.proc 加载”。 功能在这里:

DELIMITER $$

CREATE FUNCTION `randStr250`(length int) RETURNS varchar(250) CHARSET utf8
begin
  declare s varchar(250);
  declare i tinyint;
  set s="";
  if (length<1 or length>6) then
      set s="Parameter should be in range 1-6. Your value was out of this range.";
  else
    set i=0;
    while i<length do
        set s=concat(s,sha1(now()));
        set i=i+1;
    end while;
  end if;
  return s;
end $$

DELIMITER ;
mysql import importerror
3个回答
166
投票

将数据库转储从 mysql-5.5.29 恢复到 mariadb-5.5.41 后遇到类似的问题。 mysql_upgrade 解决了这个问题

$ mysql_upgrade -u root -pxxx 

根据mysql手册

每次升级MySQL时都应该执行mysql_upgrade。


2
投票

大多数遇到此问题的人都建议升级 MySQL。如果您像我一样处于这样的配置中,当您尝试设置从属节点以从主节点进行复制时会发生这种情况,那么您真的不想搞乱版本。

我的意思是,就我而言,我有一个 Windows MASTER 节点,并且正在设置一个 Linux SLAVE 节点(因此,首先进行 mysqldump dance)。由于在 Linux 中升级 MySQL 有点棘手(或者更确切地说,实际上最好不要这样做,以享受 Linux 软件包的稳定性,例如,来自 LTS 发行版的软件包),因此最好确保您的 Windows 操作系统中的 MySQL 版本与 Linux 操作系统中的 MySQL 版本运行相同的版本。

一旦我确保两个版本相同,mysqldump 和恢复就可以工作,并且我可以正确设置 SLAVE 节点,而不会收到可怕的错误

Cannot load from mysql.proc. The table is probably corrupted.

希望这有帮助。


1
投票

我正在使用brew,所以:

brew upgrade [email protected]
有帮助

然后更新配置文件 bash

echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> /Users/mike/.bash_profile

并重新启动所有终端。

© www.soinside.com 2019 - 2024. All rights reserved.