重複しているように見えますが、私が見つけた解決策はうまくいきません。 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 ;
Mysql-5.5.29からmariadb-5.5.41にdbダンプを復元した後、同様の問題がありました。 mysql_upgradeは問題を修正しました
$ mysql_upgrade -u root -pxxx
mysql manual によると、
MySQLをアップグレードするたびにmysql_upgradeを実行する必要があります。
この問題を抱えているほとんどの人は、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ノードを適切にセットアップできました。
お役に立てれば。