MySQL server has gone away

"MySQL server has gone away."</p>

通常 MySQL C API 回傳這個 error message 的時候都是 MySQL server crash,或是有什麼 nasty 的事情發生了。但是如果 MySQL server 好端端的沒事的話呢?

MySQL C client API,在 5.0.3 以前,會設定一個 reconnect flag,如果被 server timeout 或是 disconnect,那麼在 issue query 以前會自己 reconnect。所以如果你用舊版的程式,在新版的 API (newer than 5.0.3) 上面 compile,那麼可能就會爆了這麼一下;因為新版裡面這個 flag 是設成 0,當 client 被 server disconnect 或是 timeout 的時候,再要下 query 的話,就會發現 server 不見了…

要從 client code 解這個問題的話,5.0.13 以後的 API 版本,可以設定讓他吃MYSQL_OPT_RECONNECT 來解決。

For example,

mysql_init(&mysql);<br />mysql_options(&mysql, MYSQL_OPT_RECONNECT, "1");<br />mysql_real_connect("blahblah");

就可以了。這個故事告訴我們… 升級以後,文件一定要記得看 -_-

Reference:
<a href="http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html">mysql_options()</a><br /><a href="http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html">mysql_real_connect()</a> </div>

留言