Heim  >  Artikel  >  Datenbank  >  So beheben Sie den Fehler in der MYSQL-Erstellungsfunktion

So beheben Sie den Fehler in der MYSQL-Erstellungsfunktion

小云云
小云云Original
2018-01-13 13:57:091757Durchsuche

Bei Verwendung der MySQL-Datenbank kann die MySQL-Funktion manchmal nicht erstellt werden. Im Folgenden erfahren Sie, wie Sie das Problem lösen können, dass MySQL-Funktionen nicht als Referenz erstellt werden können. Ich hoffe, es hilft allen.

Fall 1:

Derzeit tritt im Projekt ein Fehler beim Ausführen der Funktion zum Erstellen von MySQL auf

Die Fehlermeldung der MySQL-Erstellungsfunktion lautet wie folgt:

Fehlercode: 1227. Sie benötigen (mindestens eine) der SUPER-Berechtigung(en) für diesen Vorgang.

Überprüfen Sie zunächst, ob die Erstellungsfunktion aktiviert ist Die Erstellungsfunktion ist wie folgt aktiviert:

-- 查看是否开启创建函数的功能
show variables like '%func%';
-- 开启创建函数的功能
set global log_bin_trust_function_creators = 1;

Nachdem Sie die SQL ausgeführt haben, stellen Sie fest, dass sie aktiviert wurde. Überprüfen Sie, ob Ihre SQL korrekt geschrieben wurde (da die SQL von anderen angegeben wurde, ist sie in Ordnung in der Umgebung anderer Menschen, aber es kann auch in Ihrer eigenen Umgebung möglich sein).

Plötzlich wurde festgestellt, dass es tatsächlich ein Problem mit SQL gab. Da die von ihm erstellte SQL einen bestimmten Benutzer hatte, trat das folgende Problem auf:

DROP FUNCTION IF EXISTS `nextval`;
DELIMITER ;;
CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8
BEGIN 
 DECLARE seq_max BIGINT(20);
 UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name; 
 SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ;
 RETURN seq_max; 
END
;;
DELIMITER ;

Aufgrund der CREATE_FUNCTION Spezifikation, es kann gefunden werden Es ist der DEFINER-Parameter, der den Datenbankbenutzer angeben kann, aber Ihre eigene Bibliothek ist nicht dieser Benutzer, was zu Problemen führt.

Das Problem wurde jetzt gelöst.

-EOF-

Fall 2:

Beim Erstellen einer benutzerdefinierten Funktion in MySQL wurde der folgende Fehler gemeldet:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

This liegt daran, dass ein Sicherheitsparameter nicht aktiviert ist. Der Standardwert von log_bin_trust_function_creators ist 0, was die Funktionssynchronisierung nicht zulässt. Wenn dieser Parameter aktiviert ist, ist die Erstellung erfolgreich.

mysql> show variables like '%fun%'; 
+---------------------------------+-------+ 
| Variable_name     | Value | 
+---------------------------------+-------+ 
| log_bin_trust_function_creators | ON | 
+---------------------------------+-------+ 
1 row in set (0.00 sec) 
 
mysql> set global log_bin_trust_function_creators=1;        
Query OK, 0 rows affected (0.00 sec) 
 
mysql> show variables like '%fun%';            
+---------------------------------+-------+ 
| Variable_name     | Value | 
+---------------------------------+-------+ 
| log_bin_trust_function_creators | ON | 
+---------------------------------+-------+ 
1 row in set (0.00 sec)

Wenn dieser Parameter auf dem Master aktiviert ist, denken Sie daran, diesen Parameter auch auf der Slave-Seite zu aktivieren (der Slave muss angehalten und dann neu gestartet werden), andernfalls führt das Erstellen einer Funktion auf dem Master zum Problem Die Replikation wird unterbrochen.

Fall 3:

Fehlercode: 1418 

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)  
(0 ms taken)

Analyse:

Laut Systemaufforderungen die Ursache dieses Fehlers Überprüfen Sie für die Konfiguration der Sicherheitseinstellungen das Handbuch. Der Parameter log_bin_trust_function_creators ist standardmäßig auf 0 eingestellt, sodass wir bei der Konfiguration der Replikation im Allgemeinen vergessen, auf diesen Parameter zu achten Funktion meldet der Slave einen Fehler. Anschließend stoppte der Slave.

Verarbeitungsprozess:

Melden Sie sich bei der MySQL-Datenbank an

> set global log_bin_trust_function_creators = 1;
> start slave;

Verfolgen Sie das Startprotokoll von MySQL, der Slave läuft normal und das Problem ist gelöst.

Verwandte Empfehlungen:

Lösung für 1418-Fehler in der MySQL-Erstellungsfunktion

MySQL-PHP-Datenbankverbindungsfehler, was ist der Grund

MySQL-Startfehler nach Datenmigration

Das obige ist der detaillierte Inhalt vonSo beheben Sie den Fehler in der MYSQL-Erstellungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn