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-phpデータベース接続エラー、その理由は何ですか
以上がMYSQL作成機能のエラー解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。