web-dev-qa-db-ja.com

mysql.procからロードできません。テーブルが壊れている可能性があります

重複しているように見えますが、私が見つけた解決策はうまくいきません。 mysql 5.1をアンインストールし、5.6をインストールしました。以前のexport sqlファイルをインポートして戻したいと思います。ただし、そのエクスポートファイルにこのエラーを引き起こす関数があります。私はコマンドを見つけて実行しました:
。解決策はありますか?

ありがとう!

編集:インポートファイルから関数定義を削除し、インポートが完了しました。しかし、その関数を手動で再定義したい場合、「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 ;
24
Čamo

Mysql-5.5.29からmariadb-5.5.41にdbダンプを復元した後、同様の問題がありました。 mysql_upgradeは問題を修正しました

$ mysql_upgrade -u root -pxxx 

mysql manual によると、

MySQLをアップグレードするたびにmysql_upgradeを実行する必要があります。

48
ffeast

この問題を抱えているほとんどの人は、MySQLのアップグレードを推奨しています。私のように、スレーブノードをセットアップしてMASTERノードから複製しようとすると、このような構成になる場合、バージョンを台無しにしたくないでしょう。

私の場合、Windows MASTERノードがあり、Linux SLAVEノードをセットアップしていました(つまり、mysqldumpダンスを最初に実行します)。 LinuxでMySQLをアップグレードすることはもう少し難しい(実際には、LTSディストリビューションから提供されるLinuxパッケージの安定性を享受するために、実際にはそれを行わない方が良い)ので、 Windows OSのMySQLバージョンがLinux OSのMySQLバージョンと同じバージョンを実行していること。

両方のバージョンが同じであることを確認したら、mysqldumpと復元が機能し、ひどいエラーCannot load from mysql.proc. The table is probably corrupted.を受け取ることなく、SLAVEノードを適切にセットアップできました。

お役に立てれば。

1
knocte