web-dev-qa-db-ja.com

Mysqlイベントが機能しない

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」の出力: enter image description here

ありがとう。

41
Rana

イベントは、デフォルトでは開始されないスケジューラーによって実行されます。 SHOW PROCESSLISTを使用すると、開始されているかどうかを確認できます。そうでない場合は、コマンドを実行します

 SET GLOBAL event_scheduler = ON;

それを実行します。

108
Jacopofar

起動時にデフォルトで有効にする方法を知りたい場合は、構成ファイル(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が無効に設定されている場合、これは機能しないことに注意してください。その場合、唯一のオプションはサービスを再起動することです。

7
techdude

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
5
tony gil

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コマンドを使用して、適切に実行されたかどうかを確認できます。

5
Nabeel Ahmed

時間的

SET GLOBAL event_scheduler = ON;

永続的(再起動が必要)

設定ファイル(Ubuntuでは/etc/mysql/mysql.cnf):

[mysqld]
event_scheduler = ON

ノート:

event_scheduler変数には、次の状態があります。

  • [〜#〜] off [〜#〜](または ) (デフォルト)
  • [〜#〜] on [〜#〜](または1
  • [〜#〜] disabled [〜#〜]temporal enable、設定ファイルとサーバーの再起動を介してのみ状態を変更できます

警告:キーワード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

1
Madacol

MariaDBで、イベント(私の場合は最初のイベント)を追加した後、イベントスケジューラを再起動する必要があることがわかりました。

 SET GLOBAL event_scheduler = OFF;

その後

 SET GLOBAL event_scheduler = ON;

スケジューラを実際に「アクティベーション待ち」状態にします。

0
GoodbyeKitty

このスレッドに追加したいだけです。データベースを別のサーバーにダンプしました。その結果、イベントの定義者には、ユーザーにそのような権限が定義されていませんでした。定義者を更新しました

ALTER DEFINER='root'@'localhost' EVENT event.name COMMENT '';

定義者に正しい権限があることを確認してください。

0

DO BEGIN」または「[〜#〜] do [〜#〜]」の後に、「Commit」を忘れずに追加してください。その後、私のために働きます。

0
Lownc