Maison  >  Article  >  base de données  >  Comment résoudre l'erreur dans la fonction de création MYSQL

Comment résoudre l'erreur dans la fonction de création MYSQL

小云云
小云云original
2018-01-13 13:57:091757parcourir

Lors de l'utilisation de la base de données MySQL, il arrive parfois que la fonction MySQL ne puisse pas être créée. Ce qui suit vous apprendra une méthode pour résoudre le problème selon lequel les fonctions MySQL ne peuvent pas être créées pour votre référence. J'espère que cela aide tout le monde.

Cas 1 :

Actuellement dans le projet, une erreur se produit lors de l'exécution de la fonction qui crée mysql

Le message d'erreur de la fonction de création mysql est le suivant :

🎜>

Code d'erreur : 1227 . Accès refusé ; vous avez besoin d'au moins un des) privilèges SUPER pour cette opération

Vérifiez d'abord si la fonction de création est activée. la fonction de création est activée est la suivante :
-- 查看是否开启创建函数的功能
show variables like '%func%';
-- 开启创建函数的功能
set global log_bin_trust_function_creators = 1;

Après avoir exécuté le SQL, vous constatez qu'il a été activé. Vérifiez si votre SQL est écrit correctement (car le SQL a été donné par d'autres, c'est bien. dans l'environnement d'autres personnes, mais cela peut être possible dans votre propre environnement).

J'ai soudainement découvert qu'il y avait effectivement un problème avec SQL. Parce que le SQL qu'il a créé avait un utilisateur désigné, le problème est survenu ci-dessous :
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 ;

En raison de CREATE_FUNCTION. spécification, on peut le trouver. C'est le paramètre DEFINER qui peut spécifier l'utilisateur de la base de données, mais votre propre bibliothèque n'est pas cet utilisateur, donc cela pose des problèmes.

Le problème est maintenant résolu.

-EOF-

Cas 2 :

Lors de la création d'une fonction définie par l'utilisateur dans MySQL, l'erreur suivante a été signalée :
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)

Ceci C'est parce qu'il y a Un paramètre de sécurité n'est pas activé. La valeur par défaut de log_bin_trust_function_creators est 0, ce qui ne permet pas la synchronisation des fonctions. Si ce paramètre est activé, la création sera réussie.
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)

Si ce paramètre est activé sur le maître, pensez à activer ce paramètre également côté esclave (le salve doit être arrêté puis redémarré), sinon la création d'une fonction sur le maître entraînera le la réplication doit être interrompue.

Cas 3 :

Code d'erreur : 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 :

Selon les invites du système, la cause de cette erreur peut être Une configuration des paramètres de sécurité. Consultez le manuel. Le paramètre log_bin_trust_function_creators est par défaut à 0, ce qui ne permet pas la synchronisation des fonctions. Généralement, lorsque nous configurons l'action de réplication, nous oublions de faire attention à ce paramètre. Le maître met à jour la fonction, l'esclave signalera une erreur, puis l'esclave s'arrêtera.

Processus de traitement :

Connectez-vous à la base de données mysql
> set global log_bin_trust_function_creators = 1;
> start slave;

Suivez le journal de démarrage de mysql, l'esclave fonctionne normalement et le problème est résolu.

Recommandations associées :

Solution à l'erreur 1418 dans la fonction de création MySQL

Erreur de connexion à la base de données MySQL-php, quelle en est la raison

Erreur de démarrage MySQL après la migration des données

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn