Phpmyadmin経由でmysqlデータベースに次の簡単なテストイベントを追加しました。
CREATE DEFINER=`root`@`localhost` EVENT `my_event`
ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-27 00:00:00'
ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN
UPDATE `test` SET `name`="z";
END
私の環境はmac + MAMP Proです。 「test」テーブルのすべての行を1分以内に「z」という名前で変更する予定です。しかし、そうではありません。
私のイベントを機能させるには、何か追加のものが必要ですか?
「SHOW PROCESSLIST」の出力:
ありがとう。
イベントは、デフォルトでは開始されないスケジューラーによって実行されます。 SHOW PROCESSLIST
を使用すると、開始されているかどうかを確認できます。そうでない場合は、コマンドを実行します
SET GLOBAL event_scheduler = ON;
それを実行します。
起動時にデフォルトで有効にする方法を知りたい場合は、構成ファイル(my.ini、my.cnf)に次を追加します。
#Event scheduler can be set to 1 (On), 0 (Off), or Disabled
event_scheduler=1
この場合、サービスの再起動が必要です。そのため、最小限の中断が必要な場合は、これを構成ファイルに追加してから、SQLを実行します。
SET GLOBAL event_scheduler = ON;
そうすれば、現在のプロセスで実行され、サーバーが再起動されても動作します。
Event_schedulerが無効に設定されている場合、これは機能しないことに注意してください。その場合、唯一のオプションはサービスを再起動することです。
event_scheduler
にある[mysqld]
またはmy.ini
ファイルのmy.cnf
セクションの下のどこでも、mysqlサーバーが再起動するたびに/etc/mysql
を自動的に起動する場合あなたは置くべきです
[mysqld]
# turning on event_scheduler
event_scheduler=ON
mysqlを再起動して、実行中かどうかを確認します(コマンドラインターミナルで!)
Sudo service mysql restart
次に、プロセスリストを確認します
SHOW PROCESSLIST
最後に実行された時間を確認することで、イベントが実行されているかどうかを確認できます
SELECT * FROM INFORMATION_SCHEMA.events
Event_schedulerがオンになっていることを確認します-次のコマンドを実行します。
SHOW PROCESSLIST;
テーブル/エントリを出力します。serevent_scheduler
、およびCommandDaemon
でエントリを検索する必要があります。
Id User Host db Command Time State Info
22870 event_scheduler localhost \N Daemon 23 Waiting for next activation \N
または、次のコマンドを使用して確認することもできます。
SELECT @@global.event_scheduler;
次のセクションで説明するように、結果はON
である必要があります。それ以外の場合はオフにします(コマンドに対して0
を取得します)。
上記のようなエントリがない場合は、次のコマンドを使用してイベントスケジューラを開始できます。
SET GLOBAL event_scheduler = ON;
完了したら、上記のようにSHOW PROCESSLIST
コマンドを使用して、適切に実行されたかどうかを確認できます。
SET GLOBAL event_scheduler = ON;
設定ファイル(Ubuntuでは/etc/mysql/mysql.cnf
):
[mysqld]
event_scheduler = ON
event_scheduler
変数には、次の状態があります。
警告:キーワードON/OFFは、同等の数値よりも優先されます。実際、Mysql Workbenchは構成を認識しませんevent_scheduler=1
、[〜#〜] off [〜#〜]としてOptions Fileセクション。 Mysql Workbench 8.0.17およびMysql Server 5.7.27を使用してUbuntuでテスト済み
[〜#〜] on [〜#〜]および[〜#〜] off [〜#〜 ]には同等の数値があり、SELECTまたはSHOW VARIABLESによってevent_schedulerに表示される値は、常に[〜#〜] off [〜#〜]、[〜#〜] on [〜#〜]、または[〜 #〜] disabled [〜#〜]。 [〜#〜] disabled [〜#〜]には同等の数値はありません。このため、[〜#〜] on [〜#〜]および[〜#〜] off [ 〜#〜]は通常1およびこの変数を設定する場合。
ソース: https://dev.mysql.com/doc/refman/5.7/en/events-configuration.html
MariaDBで、イベント(私の場合は最初のイベント)を追加した後、イベントスケジューラを再起動する必要があることがわかりました。
SET GLOBAL event_scheduler = OFF;
その後
SET GLOBAL event_scheduler = ON;
スケジューラを実際に「アクティベーション待ち」状態にします。
このスレッドに追加したいだけです。データベースを別のサーバーにダンプしました。その結果、イベントの定義者には、ユーザーにそのような権限が定義されていませんでした。定義者を更新しました
ALTER DEFINER='root'@'localhost' EVENT event.name COMMENT '';
定義者に正しい権限があることを確認してください。
「DO BEGIN」または「[〜#〜] do [〜#〜]」の後に、「Commit」を忘れずに追加してください。その後、私のために働きます。