ホームページ  >  記事  >  データベース  >  MYSQL作成機能のエラー解決方法

MYSQL作成機能のエラー解決方法

小云云
小云云オリジナル
2018-01-13 13:57:091745ブラウズ

MySQLデータベースを使用している場合、MySQL関数が作成できない場合があります。ここでは、MySQL 関数が作成できない問題を解決する方法を説明しますので、ご参考までに。皆さんのお役に立てれば幸いです。

ケース 1:

現在、mysql を作成する関数を実行するとエラーが発生します。

Mysql 作成関数のエラー メッセージは次のとおりです:

必要なアクセスが拒否されました。 of) この操作に対する SUPER 権限

まず作成機能が有効かどうかを確認します。 作成機能が有効かどうかを確認する SQL は次のとおりです:

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

SQL を実行すると、次に、SQL が正しく記述されているかどうかを確認します (SQL は他人のものなので、他の人の環境では問題ありませんが、自分の環境では可能です)。

彼が作成した SQL には指定されたユーザーが含まれていたため、問題が発生したことが突然わかりました。

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 ;

CREATE_FUNCTION の仕様により、DEFINER パラメーターが原因であることがわかります。データベースユーザーを指定できますが、自分のライブラリはこのユーザーではないため、問題が発生します。

問題は現在解決されました。

-EOF-

ケース 2:

MySQL でユーザー定義関数を作成するときに、次のエラーが報告されました:

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)

これは、セキュリティ パラメーターがオンになっていないためです。log_bin_trust_function_creators のデフォルト値は 0 です。関数の同期が許可されていない場合は、このパラメータを有効にすると、作成は成功します。

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)

このパラメーターがマスターで有効になっている場合は、スレーブ側でもこのパラメーターを忘れずに有効にしてください (salve を停止してから再起動する必要があります)。そうしないと、マスターで関数を作成すると、リプラクションが中断されます。

ケース 3:

エラー コード: 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)

分析:

システム プロンプトによると、このエラーの原因はセキュリティ設定の構成である可能性があります。log_bin_trust_function_creators パラメーターのデフォルトは 0 です。同期は許可されません。通常、レプリカを設定するときにこのパラメーターに注意を払うのを忘れるため、マスターが関数を更新した後、スレーブはエラーを報告し、その後スレーブは停止します。

処理プロセス:

mysqlデータベースにログインします

> set global log_bin_trust_function_creators = 1;
> start slave;

mysql起動ログを追跡すると、スレーブは正常に実行され、問題は解決されます。

関連する推奨事項:

mysql作成関数の1418エラーの解決策

mysql-phpデータベース接続エラー、その理由は何ですか

データ移行後のMysql起動エラー

以上がMYSQL作成機能のエラー解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。