[解決済み] 宣言にDETERMINISTIC、NO SQL、またはREADS SQL DATAがあり、バイナリログが有効である。
質問
mysqlでデータベースをインポートする際に、以下のエラーが発生しました。
1418 (HY000) at line 10185: 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)
どの部分を変更すればいいのかわかりません。どなたか解決方法を教えていただけませんか?
どのように解決するのですか?
修正方法は2つあります。
-
MySQLコンソールで以下を実行する。
SET GLOBAL log_bin_trust_function_creators = 1;
-
mysql.iniの設定ファイルに以下を追加します。
log_bin_trust_function_creators = 1;
非決定性関数に対するチェックを緩和する設定です。非決定性関数とは、データを変更する(つまり、update、insert、deleteステートメントを持つ)関数を指します。詳しくは、以下を参照してください。 こちら .
バイナリログが有効でない場合、この設定は適用されませんのでご注意ください。
バイナリログが有効でない場合、log_bin_trust_function_creatorsは有効ではありません。 は適用されません。
log_bin_trust_function_creators
この変数は、バイナリロギングが有効な場合に適用されます。
最良の方法は、ストアド関数の決定論的宣言をよりよく理解し、使用することです。これらの宣言は MySQL によってレプリケーションを最適化するために使用され、健全なレプリケーションを行うためにこれらを慎重に選択することは良いことです。
ディタミニスティック ルーチンは、同じ入力パラメータに対して常に同じ結果を生成する場合、「決定論的」とみなされ、そうでない場合は「決定論的でない」とみなされます。 これは主に文字列や数学の処理で使われますが、それに限定されるものではありません。
非決定論的 DETERMINISTIC"の反対語。 "。 ルーチン定義で DETERMINISTIC も NOT DETERMINISTIC も指定されていない場合、デフォルトは NOT DETERMINISTIC です。関数が決定論的であることを宣言するには、DETERMINISTIC を明示的に指定する必要があります。 "です。 つまり、何も記述しなければ、MySQlはその関数を "NOT DETERMINISTIC" として処理するようです。 このマニュアルの記述は、マニュアルの別の場所にある他の記述と矛盾しています。 " ストアド関数を作成する際には、決定論的であること、またはデータを変更しないことを宣言する必要があります。そうでなければ、データ復旧やレプリケーションの際に安全でない可能性があります。 デフォルトでは、CREATE FUNCTION文が受け入れられるためには、DETERMINISTIC、NO SQL、READS SQL DATAのうち少なくとも1つが明示的に指定されていなければなりません。そうでない場合はエラーが発生します。 "です。
個人的にはMySQL5.5では宣言がないとエラーになるので、他の宣言があっても最低1つは"DETERMINISTIC" "NOT DETERMINISTIC" "NO SQL" "READS SQL DATA" という宣言を入れてますね。
READS SQL DATA したがって、データを修正する命令は含まず、データを読み込む SQL 命令(例:SELECT)を含めます。
sqlデータを変更する これは、ルーチンにデータを書き込む可能性のあるステートメントが含まれていることを示します(例えば、UPDATE、INSERT、DELETE、ALTER命令が含まれます)。
SQLなし これは、ルーチンに SQL 文が含まれていないことを示します。
CONTAINS SQL これは、ルーチンに SQL 命令が含まれているが、データの読み取りまたは書き込みを行うステートメントが含まれていないことを示します。これらの特性のいずれも明示的に指定されていない場合、これは既定値です。このような文の例としては、SELECT NOW(), SELECT 10+@b, SET @x = 1, DO RELEASE_LOCK('abc') などがあり、これらは実行されますがデータの読み取りや書き込みは行いません。
など、決定論的安全でないMySQL関数があることに注意してください。NOW()、UUID() などの決定論的安全ではない MySQL 関数があり、これらはマシンによって異なる結果をもたらす可能性があるため、そのような命令を含むユーザ関数は NOT DETERMINISTIC として宣言する必要があります。 また、複製されていないスキーマからデータを読み取る関数は、明らかにNONDETERMINISTICです。
ルーチンの性質の評価は、その人の「正直さ」に基づいています。 の作成者です。MySQL は、DETERMINISTIC と宣言されたルーチンが次のようなものであるかどうかをチェックしません。 非決定的な結果をもたらすステートメントがないこと。しかし ルーチンの宣言を誤ると、結果に影響を与えたり、性能に影響を与える可能性があります。 非決定的なルーチンを DETERMINISTIC と宣言すると、結果や性能に影響する可能性があります。 オプティマイザが不正確な処理を行い、予期せぬ結果を招くことがあります。 実行計画を選択します。決定論的ルーチンを NONDETERMINISTICは、利用可能なすべての機能を提供し、パフォーマンスを低下させる可能性があります。 最適化が使用されない。
関連
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
SQL集計、グループ化、ソート
-
MySQLのselect、distinct、limitの使い方
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
PostMan レポート エラー: 接続 ECONNREFUSED 127.0.0.1:port number
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLのselect、distinct、limitの使い方
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
Mysqlのソート機能の詳細
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
MySQLの一般的な分割ライブラリおよび分割テーブルスキームの概要
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] SQLでカラムに最大値を持つ行のみを選択する [重複]。
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?