利用 Percona Playback warm-up MySQL 資料庫…

Percona Playback 是一套可以將事先記錄下來的 SQL Query Log 在指定的 MySQL Server 上重作一次的工具,目前最新的版本是 0.5,支援讀取 slow query log 或是 tcpdump capture file。Percona 標榜可以完全按照 Query Log 的 Pattern (包含 thread concurrency,query 所花的時間等等)來重作一次 Query,不過測試的結果還是有點落差。

首先先在 Production 的 Server 上面紀錄 Query Log。因為 Percona Playback 0.5 的 Slow Query Reader 是爛的(bug 1035217),所以只能用 tcpdump:
tcpdump -w log.dump dst port 3306 and dst ip 192.168.1.1

記錄到足夠長度的 log 之後,把 log 放到要測試的 MySQL 機器上,開始執行 percona playback。要注意的是,所有的 Log (包含 UPDATE, DELETE, INSERT 等等會修改資料庫內容的 Query)都會被執行,如果要在 Slave 上跑的話,記得要事先濾掉,才不會造成 Master Slave 不同步的狀況。
percona-playback --input-plugin=tcpdump --tcpdump-filelog.dump --tcpdump-mode=fast --mysql-host=127.0.0.1 --mysql-username=root --mysql-schema=mydb

官方文件是使用 --tcpdump-mode=accurate,速度慢很多,使用 --tcpdump-mode=fast 會快不少。

中國「春運」造成 GitHub 負載升高

中國的「春運」(台灣的春節返鄉)訂票系統 12306 在農曆春節開放訂票時常常會癱瘓無法使用。於是有個傢伙就寫了一個 Browser Plugin 12306.cn 訂票助手 來解決這件事。不過因為他把檢查更新的機制放在 GitHub 的 raw.github.com 上,所以就….XDDD

GitHub 的人開的 Issue 下面一堆中國網友在討論萬一 GFW 把 GitHub 牆了怎麼辦 XDDD

Update: GitHub 果然被牆了

Aaron Swartz 自殺…

這幾天蠻大的一個新聞,連國內媒體都第一時間報導了。(聯合報中央社

Aaron Swartz 除了是 RSS 1.0 規格的共同作者之外,也是 Reddit 的共同創辦人及 Markdown的共同作者之一。

2011 年,Aaron 來因為大量下載了 400 萬篇 JSTOR 的學術期刊而被起訴。可能是造成他憂鬱症與自殺的原因。關於學術期刊這個詭異的 ecosystem,可以讀讀 學者的智慧, 期刊的財產, 圖書館的業績…或是負擔? 這篇文章。

Nexus 7 的 NFC

如果可以讀悠遊卡內的詳細紀錄,對於記帳來說應該更方便。

一直知道 Nexus 7 有 NFC 功能,不過除了內建的 Google Wallet 之外,一直都不知道有什麼應用,直到有天看到了 NFC Tag Reader 這個 App,就到處去找 Tag 來掃。

悠遊卡是有加密過的,所以什麼都讀不出來:

據說北捷的單程票 Token 沒加密,不過我並沒有親自試過。

日本的 Suica 卡倒是可以讀出來,用 Suica Reader 還可以列出詳細資訊:

晶片護照也有加密,不過只要輸入個人基本資料就能解密:

高捷卡也有加密,所以也是什麼都讀不出來。
其他國家的卡就有待之後去旅遊的時候再來收集測試了 🙂

Airplane Mode for Mac OSX

Macbook Pro 不像其他的筆記型電腦一樣,有硬體的無線控制開關,如果在飛機上要使用電腦的話,得手動把藍芽與 Wi-Fi 關掉。之前有個小程式 Airplane Settings 很好用,不過被 Mac App Store 下架了,所以就動手寫了一個。

執行之後畫面長成這樣:

程式碼以 MIT License 放在 GitHub,有建議歡迎在 GitHub 開 Issue 討論。

FreeBSD 系統的 auditd

上個月的 17 日,FreeBSD.org cluster 中的兩台機器被入侵,起因是擁有這兩台機器 root 權限的人的 ssh private key 外洩,導致這兩台主機被不明人士登入。由於這兩台主機上有開啟 Audit 機制,因此管理員發現了 root 有異常存取 file system 的行為。今天剛好有空,於是也來幫主機加上 audit 的機制。

步驟非常簡單,只要根據 handbook 重新編譯 Kernel,設定 /etc/security 下的設定檔,再把 auditd 跑起來就可以了。不過一開始跑起來之後並沒有紀錄 Log,花了一點時間找資料,才發現原來是 auditd 跑起來之後,必須要重新登入,才會開始紀錄。

auditd 產生的紀錄大概長這樣:

header,84,11,sudo(1),0,Tue Dec 25 00:00:38 2012, + 49 msec
subject_ex,jnlin,root,wheel,jnlin,1001,93339,93339,42554,192.168.128.100
exec arg,ls,-al
return,success,0
trailer,84

參考資料:FreeBSD 這次的入侵事件

DMARC: 讓寄件網域取得決定不通過測試的信件資訊,並定義收件者對該類信件的處理方法

標題有點長… XD

昨天在 LinkedIn Engineering 上看到了 LinkedIn 採用 DMARC 的事情,於是花了點時間看了一下 DMARC。

DMARC 是架構在 DKIMSPF 等偽冒偵測 (fraud detection) 功能上,提供 Email 寄件網域設定「當收件者收到未通過偵測的 Email 時,指示如何處理」的功能。除了拒絕或暫時保留外,也可以設定通知寄件網域該偽冒信件內容,可幫助打擊釣魚信件。

舉例來說,如果 example.com 設定 DMARC 的 Policy 為拒絕(Reject),並且要求收件者將偽冒信件報告寄回 fraud@example.com,則收件者一旦遇到無法通過 DKIM 與 SPF 檢查的信件,就不會將這封信送入收件者的信件夾中,並且會報告給 fraud@example.com。example.com 的管理者便可根據此報告進行處理(例如透過法律方法關閉釣魚網站等)。

目前大的 Email Service Provider,如 GMail, Yahoo Mail, Hotmail 等都有提供 DMARC 的功能。

設定 DMARC 的方法跟 SPF 類似,在 DNS 內加入一個 Entry:

_dmarc.example.com IN TXT "v=DMARC1;p=reject;pct=100;rua=mailto:postmaster@dmarcdomain.com"

詳細的設定與各參數的意義可參考 DMARC Overview