🕌

doctrineでmysqlのwait_timeoutをハンドリング(EC-CUBE3)

2022/01/17に公開

やりたい事

Webサーバー側のmysqlのwait_timeoutを変更せずに、
スクリプトから非インタラクティブ型接続のアイドルタイムアウト時間(秒)を変更したい。

設定値の確認

mysql> show global variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 60       |
+-----------------------------+----------+

スクリプトからハンドリング

// mysql 非対話型接続のアイドルタイムアウト時間を変更
$em = $this->getEntityManager();
$sql = 'SET wait_timeout=28800';
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
$stmt->closeCursor();

このスクリプトを実行時のみ、mysqlのタイムアウト値は
60秒 → 28800秒(8時間)
に変更されます。

Discussion