1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration a

1502 ワード

mysqlバックアップデータベースを復元する際のヒント:[Msg]1418-This function has none of DETERMINSTIC,NO SQL,or READS SQL DATA in its declaration and binary logging is enabled(you might want to use the less safelog_bin_trust_function_creators variable)
問題原因:CREATE PROCEADURE、CREATE FUNCTION、ALTER PROCEADURE、ALTER FUNCTION、CALL、DROP PROCEARE、DROP FUNCTIONなどの文がバイナリログに書き込まれ、サーバーから実行されるからです.ただし、更新を実行する不確定なサブルーチン(ストアド・プロシージャ、関数、トリガ)は繰り返し不可能であり、サーバから実行(プライマリ・サーバとは繰り返し実行)すると、元のデータとは異なり、サーバからプライマリ・サーバーとは異なるリカバリされたデータがリカバリされる可能性があります.
解決策は2つあります.1つ目は、サブルーチン(ストアド・プロシージャ、関数、トリガ)の作成時に、DETERMINISTICまたはNO SQLとREADS SQL DATAのうちの1つとして宣言することです.たとえば、次のようになります.
CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`()
    DETERMINISTIC
BEGIN
 #Routine body goes here...
END;;

2つ目は、サブプログラムを信頼する作成者であり、サブプログラムの作成、変更時のSUPER権限に対する要求を禁止し、log_を設定することである.bin_trust_routine_creatorsグローバルシステム変数は1です.設定方法は3つあります.1.クライアントでSET GLOBAL log_を実行bin_trust_function_creators = 1; 2.MySQL起動時に–log-bin-trust-function-creators選賢を加え、パラメータを1 3に設定.MySQLプロファイルmy.iniかmy.cnfの[mysqld]セグメントにlog-bin-trust-function-creators=1を追加