2016-12-09 16 views
1

CREATE FUNCTIONコマンドでUDFを作成しましたが、今すぐ削除しようとするとサーバーがクラッシュします。DROP FUNCTIONのMySQLクラッシュ

、UDFに関連付けられている共有ライブラリをアップグレードするDROP FUNCTION文を発行し、共有ライブラリをアップグレードしてから、CREATE FUNCTION文を発行するには、次のdocsによると、これは既知の問題です。共有ライブラリを最初にアップグレードしてからDROP FUNCTIONを使用すると、サーバーがクラッシュする可能性があります。

プラグインディレクトリからDLLを完全に削除しても、実際にはクラッシュし、その後に関数を削除しようとするとクラッシュします。開発中は、UDF関数を定義するライブラリを継続的に置き換えています。私はすでに一度MySQLを再インストールしましたが、もう一度やり直すことはありません。他にも注意しなければならないことは、私ができることは何かなどです。 mysql。*テーブルを手動でクリーンアップして関数を削除しますか?

編集:問題のDLLを削除してから、Error Code: 1305: FUNCTION [schema].[functionName] does not existを発行するまで、データベースはちょっと変わった後、クラッシュのパターンに落ち着いたようです。関数をルートとしてドロップしようとすると、同じメッセージが表示されますが、スキーマの接頭辞は付きません。

SELECT * from mysql.funcがこの機能を示しています。レコードを手で取り除くと、同じ1305エラーが発生します。

+0

あなたはMySQLにバグを報告して、別のバージョンを試しましたか? – Dai

+0

@Dai AFAICTすべてのバージョン5リリースのドキュメントにあります。私は彼らがそれについて知っていると思っていて、最近のバージョンで修正された問題ではないと思っています。私はMariaDB 10.1.19にいます。 – flatline

+1

レコードを手動で削除してから、mysqlサーバサービスを再起動しますか? –

答えて

1

mysqlスキーマ内のシステムテーブルのデータの多くは、最初のタッチでメモリにキャッシュされます。その後、サーバーを再起動しない限り、手動で表を変更しても効果は期待できません。

キャッシュテーブルには、FLUSH PRIVILIGESが用意されていますが、funcなどの他のテーブルとタイムゾーンテーブルでは、テーブルの手動変更がすべて確実に行われる唯一の方法ですサーバープロセスを再起動することが考慮されています。