InnoDB Fast Recovery Patch

在「Improving InnoDB recovery time」這篇看到的。

這個 bug 在 2007 年時 Heikki Tuuri 開了 #29847:「Large CPU usage of InnoDB crash recovery with a big buf pool」,在 bug report 中間有提到 workaround,在 recovery 時把 O_DIRECT 關掉並且降低 innodb buffer pool size,把問題推到 Filesystem cache,速度比較快。

但這表示在 crash 後必須手動介入,或是要寫 script 在啟動 MySQL 時判斷,並不是一個自動的解法。

不過今年五月的時候有人丟出 patch 了,目前測過的人用起來都沒問題,順利的話下一個版本就會收進去,對於 MySQL HA (像是 failover 時需要跑 InnoDB recovery 的系統) 幫助很大...

Google Apps 畢業,Openfind 推出郵件解決方案

Google Apps is out of beta (yes, really)」與「Openfind-解決方案-中小企業郵件解決方案-輕鬆郵」。

中間有一些小插曲,像是 Google Apps (Standard) 的連結不見,造成大家猜測是不是要趁著轉入正式版拿掉,最後又把連結放回去 (不過只有英文版的放回去,繁體中文版的還是拿掉了):「Google Apps Standard Edition: still free」。

另外一邊是 Openfind 推出「輕鬆郵」,提供 closed-source 版本的 server 軟體,有 100 accounts 限制,主要是給對於郵件系統放到 3rd-party 有疑慮的公司,但自己建制不敷成本的單位使用。網站上不能直接下載,需要填表...

另外一個重點是 GPL violation,這套免費版的防毒軟體使用 ClamAV (參考「常見問題」內的 Q4),不過 Openfind 已經明確表示他不會提供 source code 了 (看介接方式才會知道感染多大塊),這點就看誰拿到 binary 後去跟他們要...

innobackupex

innobackupex 是 Percona 因為 XtraBackup 需要,改自 InnoDB 的 script,可以不停機備份 InnoDB 或 XtraDB。對於沒有一開始就設定 DRBD 或是類似架構的人來說,這個方法算是蠻不錯的。(當然,如果允許停機的話更簡單)

這個方法是以 InnoDB 為主體的 database 為主,MyISAM 也可以透過這個方式備份,不過這就不在我測試的範圍內了... (我測的兩個 cluster 只有系統資料庫是使用 MyISAM,其他都是 InnoDB)

這邊寫的版本是使用 XtraBackup 0.7 版 (前幾天測試的,當時 0.8 版還沒有正式放出來,就先拿 0.7 版測試),在 Debian 上先安裝 package:

# dpkg -i xtrabackup_0.7-1_amd64.deb

裝完後就可以試著使用 innobackupex 備份,並要求 innobackupex 紀錄 slave 資訊:

# innobackupex-1.5.1 --slave-info [dest_path]

在「Btw xtrabackup is not only backup..」有推薦用 --stream=tar 將備份資料輸出成 tar 格式,不過實際上會因為 ibdata1 被改變而使得 tar 認為無法備份而失敗,所以目前比較偏好的作法是直接輸出到某個目錄下 (就不會用到 tar),目錄可以是 nfs 或是 local disk。

另外,預設是透過 socket 連 MySQL,但也可以故意用 --port=3306 強制他走 TCP,或是用其他指令指定帳號及密碼,這些都可以直接執行 innobackupex 看到。

innobackupex 會試著使用 mysql 並下一些指令,但使用時並不會指定完整路徑,所以會依照 PATH 內所設定的路徑而執行。不過,因為上面的指令通常需要 root 權限,如果使用 sudo 有可能會將 PATH 重設而造成 mysql 無法執行而失敗 (像是 Percona 的版本是裝在 /usr/local/mysql-blah-blah 下,所以配合 sudo 時的用法會是:

# sudo env PATH=/usr/local/mysql/sbin:/usr/local/mysql/bin:[original_path] innobackupex-1.5.1 --slave-info [dest_path]

這樣就解決了。

備份完成後再用 --apply-log 把還在 log 的 entry 寫回 pool:

# sudo innobackupex-1.5.1 --apply-log [dest_path]

這樣一來,一份可以當作 slave server 的資料就完成了。

丟到其他機器後,用 chown 先把檔案權限改對:

# chown -R mysql:mysql [data_dir]

然後跑起 mysql 後,看裡面的 slave 資訊設定 master:

CHANGE MASTER TO master_host = 'master_host', master_user = 'master_user', master_password = 'master_password', master_log_file = 'blahblah.012345', master_log_pos = 123456;

這樣就可以讓 slave 動起來了。(記得要自己 START SLAVE;)

Firefox 3.5 與 PHP 5.3

兩個不小的軟體都出新版...

Mozilla Firefox 3.5 正式版昨天放出來了,JavaScript 的速度再次提昇,另外有不少新功能,以台灣的普及率,大約等兩年後看普及狀況再決定能不能用。

另外一個是 PHP 5.3 第一個的正式版 5.3.0 也是出了,可以在 PHP 5 ChangeLog 看到比較詳細的說明。照之前國外測試的結果,除了使用過舊的 deprecated function 外,應該不會造成目前的程式不能動,不過還是要測過才會知道...

比較新的功能是 namespace,雖然用 backslash (就是「\」這個符號) 大家看了都很囧,不過畢竟是有 namespace 了,PHP library & framework 總算可以用 namespace 解決命名的問題。

Google 在中國被罰是因為 Google Suggest 出現「不雅建議」?XDDD

這幾天看到 Google 在中國被罰,看了老半天還是不知道「不雅訊息」在哪裡,本來還猜測是其他的政治力介入造成的 (因為 CCTV 造假,看起來有點像...),剛剛看到 Slashdot 的「Google Suggest Disabled In China Due To Porn」突然笑了出來 XDDD

因為太忠實呈現網路行為而被處罰 XDDD

PS:這不代表沒有政治力量在後面處理,通常只是找個理由...

GDI++ Helium 版

之前用的 GDI++ 是參考 Jackbin 的「gdi++ FreeType 新細明體修改版:(1) 簡介與安裝」所說明的方式而裝的版本,但這個週末藍色死亡螢幕的情況太誇張了 (桌上的電腦與 Notebook 都死了兩三次,還有跟人家 MSN 上打完招呼就 crash 的 =_=),決定找 Helium 版本來改...

網路上有幾篇文章有提到 Helium 版本,像是「GDI++ Helium 版」,不過提到的版本都有點舊了,去找新版的裝好後另外找其他人的設定檔來換,看起來舒服多了。

我把設定檔放在 Wikidot 上:http://wiki.gslin.org/gdi,新細明體要記得自己找個字型換掉 (參考 Jackbin 的文章)。

MySQL 的現況

Jeremy Zawodny 月初在 Linux Magazine 上所寫的「The State of MySQL」描述了最近 MySQL 的狀況。這篇文章與技術面的想法沒關係,討論了比較多 SunOracle 與其他 3rd-party 的努力。

前陣子 Sun 與 MySQL 的整合其實讓 MySQL 很受傷,包括許多 MySQL developer 的離開 (創辦人 Monty 也走了),使得 MySQL 的發展停滯了一段時間。另外,去年底推出的 MySQL 5.1.30 (第一個 5.1 GA) 被許多人批評品質不足以列為 GA。而實際在使用 MySQL 的單位也可以看到還是繼續用 MySQL 5.0,因為找不到升級到 MySQL 5.1 的理由。

另外一方面,MySQL 仍然是 open source relational database 領域的主要選擇,在官方的支援不夠的情況下,很多公司提供了自己發展的 MySQL patch,像是 Google 或是 Percona。而 MySQL 上最常被使用的 transaction engine,InnoDB 也推出新版,以 MySQL 5.1 plugin 形式釋出,這個版本包括了新的檔案格式、壓縮 (對於 I/O bound 環境幫助不小),並針對朝多 CPU 發展的環境修正的許多 multi-threading 效能的問題。(主要是 lock 的改善)

Monty 在離開 Sun 之後也成立了一家公司,發展由 MySQL 分支出來的 MariaDB,希望成為一個 storage engine,取代現有的 MyISAM。

其他的公司也都有各自的想法,透過 MySQL 的 plugin 架構發展自己的軟體,有許多是 open source (像是 PBXT),也有不少是 proprietary software,給了 MySQL 使用者許多不同的方向。

缺人找人

啊啊啊~(大叫)

我們家 PIXNET 要找人,包括:

  • Database architech architecture architect (是這樣拼嗎,一時間不知道單字要怎麼拼),希望找有處理過大型網站經驗的人。
  • PHPPython Programmer。(因為 PHP 的 CPU 效能利用率問題,Python 是之後的方向)
  • C Programmer (on FreeBSD/Linux),主要是有些目前在用的軟體需要用 C 改寫 (效能問題),另外會試著開發新的軟體。熟 Berkeley DB 佳,沒有也沒關係,我可以告訴你很多已經走過的經驗。
  • Windows Programming,需要開發使用者端的程式。
  • Java Programming,有很多 Open Source 軟體是用 Java 開發,會想要在這些 Open Source 軟體上面發展程式。

可以透過 gslin at pixnet.tw 找我,告訴我您有興趣的部份,另外麻煩留下你的手機號碼與適合接電話的時間,我會在適當的時間打給你 :o

幾個不同的 Web Server (或是 Reverse Proxy) 實做內部重導的方式

Reverse Proxy 的部份,Perlbal 可以用 X-Reproxy-URL

Apachemod_xsendfile 實做 X-SendfilelighttpdX-LIGHTTPD-send-file (1.4 版) 或是 X-Sendfile (1.5)。nginxX-Accel-Redirect

都是避免用動態語言傳輸大檔的方式。

不知道 F5 有沒有提供類似的功能,如果沒有的話就得自己放兩台...