兩個 MySQL 的舊「新」聞

連續忙了幾天,今天終於有時間把 RSS Reader 打開稍微看了幾篇東西,倒是有兩個跟 MySQL 有關的新聞:

  1. 根據這邊的消息,MySQL 確實在準備 IPO 了,而且去年賺了 $50 Million。看來我當初在這邊推論的 MySQL 營收實在差距太遠了啊。或許是因為 web 2.0 當紅導致 RDBMS 的需求大增?這又讓我想到以前 vv 的名言:「 Web 2.0 根本就是 Oracle 的陰謀嘛…」
  2. Google 釋出了一些 MySQL 補強的工具,並且用 Apache License 釋出 (Information Week 說的 GPL License 並不正確),放在 Google Codes 上面。重點是一些對於 MySQL 4.0.26 的 enhancement patch,不過不知道會不會被 merge 進下次的 MySQL release。不然每次 MySQL 有新版本就要重新做一次 patch 可是很累的啊… 另外可惜的是,根據這裡,這個 Enhancement patch 在 5.x 上面還不能 fully functional。如果 5.0 也可以用的話,市場接受度一定更高的吧…

如果想知道這個 Enhancement Tool 到底可以在 4.0.26 上面做些什麼,可以參考這裡

MySQL server has gone away

"MySQL server has gone away."

通常 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);
mysql_options(&mysql, MYSQL_OPT_RECONNECT, "1");
mysql_real_connect("blahblah");

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

Reference:
mysql_options()
mysql_real_connect()