ホームページ >データベース >mysql チュートリアル >バイナリ ロギングが有効になっていると MySQL が「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーをスローするのはなぜですか?

バイナリ ロギングが有効になっていると MySQL が「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーをスローするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 20:18:29273ブラウズ

Why Does MySQL Throw

エラー: バイナリ ロギングが有効になっている関数宣言に「DETERMINISTIC、NO SQL、または READS SQL DATA」がありません

データベースをインポートするときMySQL でエラー「1418 (HY000): この関数には DETERMINISTIC、NO SQL、または READS SQL DATA が宣言に含まれておらず、バイナリ ロギングが有効になっています」が発生した場合、問題の関数に適切な宣言が欠落していることを示します。

解決策:

この問題を解決するには 2 つの方法があります:

  1. MySQL コンソール コマンドを実行します:

    <code class="mysql">SET GLOBAL log_bin_trust_function_creators = 1;</code>

    このコマンドは、非決定的関数のチェックを緩和し、インポートを続行できるようにします。

  2. mysql.ini を構成します:
    追加mysql.ini 設定ファイルに次の行を追加します。

    log_bin_trust_function_creators = 1

説明:

バイナリ ログは、データベースに対して行われたすべての変更を記録します。デフォルトでは、MySQL では、データを変更する関数が正確にレプリケートされることを保証するために、宣言内で DETERMINISTIC、NO SQL、または READS SQL DATA として宣言される必要があります。

ストアド関数の決定的宣言:

これらの宣言は、関数の性質について MySQL に通知し、最適化とレプリケーションの決定を導きます。

  • DETERMINISTIC: に対して常に同じ結果を生成する関数。外部要因に関係なく、同じ入力。
  • NOT DETERMINISTIC: 非決定的な MySQL 関数 (NOW() など) を含む関数など、同じ入力に対して異なる結果を生成する可能性のある関数。 、UUID()).
  • READS SQL DATA: データベースからデータを変更せずに読み取る関数。
  • NO SQL: 関数SQL ステートメントを含まないもの。

注: バイナリ ログが無効になっている場合、log_bin_trust_function_creators 設定は適用されません。したがって、適切な決定論的宣言が指定されていることを確認することが重要です。

提供された解決策のいずれかを実装することで、エラーを解決し、データベースのインポートを続行できます。

以上がバイナリ ロギングが有効になっていると MySQL が「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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