mysql_ping() を実行すると延長できるので、
ループ処理内とかで実行するようにすればOK。
■環境
・さくらインターネット
・CakePHP 1.2.x
・MySQL 5.1.x
■経緯
CakePHPの appvendorsshells にあるプログラムを
定期的にcronで実行していたところ、
「SQL Error : 2006 MySQL server has gone away」
というエラーが発生し、DBにinsertできていなかった。
■原因
MySQL側のwait_timeout(DB接続をopenにしている時間)の時間が
過ぎてしまい、DB接続がcloseしてしまった。
■理由
さくらインターネットでは、 wait_timeout = 300 (5分) となっていて、
処理が5分以上かかっていたため、DB接続がcloseになっていた。
(wait_timeout は、MySQLで「SHOW VARIABLES」コマンドで確認できる)
■対応策
案1.my.cnf で wait_timeout を伸ばす
→ さくらインターネットでは編集できない
案2.PHP側で mysql_query('SET GLOBAL WAIT_timeout=3000')を実行し
時間を延長する
→ さくらインターネットでは変更権限がない
案3.ループ処理内でmysql_ping関数を実行する
→ これで解決。ループ処理ごとに都度DB接続のwait_timeoutが延長できた
■英語用
[Q]
What can I fix "SQL Error : 2006 MySQL server has gone away" error for CakePHP?
I can't edit my.cnf and excute mysql_query "SET".
[A]
Run mysql_ping() to end of loop program. You can extend MySQL wait_timeout when end of loop program.
ありがとう、ありがとう(´;ω;`)