Ich habe die folgende Funktion, die in mehreren Datenbanken auf meinem Server verwendet wird.
CREATE FUNCTION `fn_strings_intersect`(arg_str1 VARCHAR(255), arg_str2 VARCHAR(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
SET arg_str1 = CONCAT(arg_str1, ",");
SET @var_result = "";
WHILE(INSTR(arg_str1, ",") > 0)
DO
SET @var_val = SUBSTRING_INDEX(arg_str1, ",", 1);
SET arg_str1 = SUBSTRING(arg_str1, INSTR(arg_str1, ",") + 1);
IF(FIND_IN_SET(replace(@var_val, ' ', ''), arg_str2) > 0)
THEN
SET @var_result = CONCAT(@var_result, @var_val, ",");
END IF;
END WHILE;
IF (@var_result = "")
THEN
RETURN false;
ELSE
RETURN true;
END IF;
END;
In regelmäßigen Abständen und auf nicht vorhersehbare Weise wird die Funktion in allen Datenbanken abgelegt.
Gibt es etwas an der Funktion oder möglicherweise an meiner MySQL-Konfiguration, das dazu führen würde / könnte, dass diese Funktion gelöscht wird?
Antworten:
Verwenden Sie zufällig --skip-grant-tables beim Start Ihres Daemons?
Aus der Dokumentation zu CREATE FUNCTION
quelle
mysql 6428 0.5 14.2 1382020 293176 ? Ssl 2013 154:25 /usr/sbin/mysqld
Dies ist auf Ubuntu 12.04.3 LTS mit Lager MySQL, glaube ich. Solange MySQL auf Ubuntu nicht über --skip-grant-tables verfügt, sollte dieses Flag nicht aktiviert sein.Die Funktion scheint auf den ersten Blick harmlos genug, aber ich frage mich, was passieren würde, wenn es hat während der Ausführung eine Ausnahme verursacht. Ich kenne MySQL nicht gut genug, um vorherzusagen, was es tun wird - Soweit ich weiß, wird die Funktion möglicherweise gelöscht oder deaktiviert.
Der zufällige Teil dafür, wenn dies passiert, wären einige seltsame und seltene Parameter dass Sie nicht vorausgesehen haben, dass dies die Ausnahme verursacht.
Sie können eine leere Funktion mit demselben Namen testen. Wenn diese Funktion das Problem nicht anzeigt, kann dies möglicherweise darauf hinweisen Es liegt ein Laufzeitproblem vor.
Ein zweiter Test wäre, der Funktion eine Fehlerbehandlungsroutine hinzuzufügen, um festzustellen, ob das Problem vorliegt wird dann verschwinden.
quelle