不得不在 CentOS 6 上安裝上一代的 mysql 5.0.95,怎麼辦?

先不管是什麼原因非得在 CentOS 6 上捨 mysql 5.1 或 5.5 而是用 5.0 不管。其實這個問題很簡單,一般大家都會用 make 一般大家都會用 make 一般大家都會用 make(因為太普遍了所以要寫三次)。不過比較易於管理的方式,我還是建議自己用 rpmbuild 來生出套件安裝,未來要更新或移除也會乾淨許多。

方法很簡單:

  1. 去 vault.centos.org 中找出 CentOS 5.11 中的 .src.rpm 檔(很久以前是叫 srpm 檔),目錄是 http://vault.centos.org/5.11/os/SRPMS/ ,可以找到 mysql 5.0.95 的 .src.rpm,把它抓回來,執行 rpm install(指令是 rpm -i 這應該不用我教了吧⋯⋯)。
  2. 使用一般 user 來執行 rpmbuild。CentOS 6 預設會在 user home dir 下建立一個叫 rpmbuild 的目錄,剛剛用 rpm install 的 .src.rpm 檔的內容都會在此目錄下出現。這時就要到 ~/rpmbuild/SPECS/ 下,會看到 mysql.spec 這個專門給 rpmbuild 的規格檔。
  3. 在 SPECS 目錄下直接執行 rpmbuild -ba mysql.spec。很抱歉,這樣會有錯誤訊息,rpm檔會做不出來。要在 .spec 檔中修改某一行的一個設定:%{!?runselftest:%define runselftest 0} 把 1 改成紅字的 0 才行。其實這樣差不多就可以了,但對 .spec 檔比較有把握修改的人,就改 Name: mysql50 及修改一下 %setup -q 變成 %setup -q -n mysql-%{version},這樣產生出 mysql50-*.rpm 就可以減少(不是沒有喔)與 CentOS 6 附的 mysql 5.1 有太多的安裝衝突。最厲害的就是用 SCL 去搞,是最符合 Redhat 對同名但不同版本的套件的管理方式。但是這太麻煩了,那 .spec 檔得改寫太多地方,不符合經濟效益;本案件並不會同時執行 mysql 5.0 與 5.1,所以沒必要。
  4. 再來一次 rpmbuild -ba mysql.spec 吧,如果人品沒什麼問題,你應該會得到成功編譯完成的 rpm 檔,會在 ~/rpmbuild/RPMS/x86_64/ 看到所有的 rpm 檔。

當然,如果還是想用 make 的話,這當然還是很好很直觀的方法。但如果你有一百台 server 要 make 做一模一樣的事情,對地球的環保節能並不是一件好事。

快閃記憶體 SLC 與 MLC 的差別

最近好像太常碰到這個問題了, 就寫一篇文放著, 下次再遇到人問就丟這篇的URL給他看.

首先還是得先來一些關於快閃(flash)記憶體的預備常識:快閃記憶體的用途目前最常見的就是: 記憶卡 (你的數位相機在用的), 隨身碟, 以及 SSD (固態磁碟機).
依其記憶單元的儲存技術, 可分為:
SLC: Single-Level Cell, 一個記憶單元只存放一個位元 (兩個狀態)
MLC: Multi-Level Cell, 一個單元可以存放多個電位狀態, 以 2 bits 為例就是 00, 01, 10, 11 四個狀態, 如此一來儲存密度較 SLC 高, 成本較低, 但速度就慢多了 <— 我們不要太深究為什麼, 那是學電子的人才要去關心的事…我們暫時只需知道片面的結論就好. 讀完這一點, 你已經知道 SLC/MLC 不是牌子的名稱, 而是不同的技術名詞.SLC 的壽命為 100,000 次的讀寫
MLC 的壽命為 10,000 次的讀寫
是的, 以同容量的 SLC 與 MLC 隨身碟相比, MLC 的價格大約才四分之一, 但壽命只有十分之一Wear-leveling (損耗平均) 技術:
不管是 SLC 或 MLC 都有壽命上的問題, 所以如果有些記憶單元太常被讀取, 就會比其他記憶單元早很多步往生歸西. wear-leveling 就是要想辦法偷偷幫你搬家, 平均用掉這些記憶單元的壽命. 例如你家樓下有十個信箱筒, 有三個最常被使用, 怕說壞得比較快…樓下管理員就在半夜偷偷地把另外幾乎沒在用的三戶的信箱筒掉包…大概就是這樣的概念了. 等等, wear-leveling 當然是控制晶片 (樓下管理員) 在管的啦, 你有看過信箱 (記憶單元) 會自己搬家的嗎? 讀到這裏, 你應該更有概念了: 一隻 16G MLC 隨身碟的壽命, 不是一隻讀寫一萬次就完蛋了, 而是 [理想上] 有 16GB*10000 這麼長命; 觀念不在次數, 而在總資料流量. 160000GB 的資料流量, 給你三年的時間當分母好了, 全年無休地天天拷來拷去, 一天 146GB 耶!多通道讀寫:
類似的名詞這幾年比較常見於主機板: 雙通道記憶體. 兩條RAM同時抓取資料, 在相同時間內抓到的資料量自然就是單條的兩倍 (廢話). 相同的觀念, 一樣可以用在快閃記憶體的控制晶片設計. MLC 比 SLC 慢這個常識這我們剛剛知道了, 但 “多通道 MLC 讀寫” 就可以和 “單通道 SLC 讀寫” 一較長短了… 決勝點就在於控制晶片. 當然…控制晶片本身也是成本之一, 搞得愈複雜就愈貴.不是技術阿宅的人可能看到這裏就已經沒耐性再看下去了 (我有預先做過 reader’s test 了哈哈)… 幸好你大概也只需要知道這麼多啦. 接下來就是 case study 了.目前 (2008年11月) 市售已經罕有 SLC 的隨身碟了. 創見 JF168 16G (SLC) 的要價四千多塊. 而 16G MLC 隨身碟滿街都是, 最普通的大概一千元上下, 而像我買的 Corsair Voyager GT 16G 則是一千八左右, 速度仍略遜於 SLC 的隨身碟.

如果你比較在意 “寫入速度”, 加上你真的比別人常常在用隨身碟搬大量資料 (例如影音圖檔什麼的), 那你可能得多花點錢投資購買 SLC 的隨身碟. 這並不是壽命上的考量. 如同我前一篇文寫過的, 除非你一天有 146G 的資料搬移量 (不管是讀或寫), 不然 MLC 16G 的隨身碟應該夠長命撐到你嫌它太小而買一隻大了八倍十六倍的新品 (屆時價錢可能也一樣在兩千塊以下). MLC 的另一個小問題就 “寫入比較有卡卡的感覺”, 不若 SLC 那麼順暢, 尤其當你有一堆大大小小的檔案要寫來寫去的時候, 爛一點的 MLC 隨身碟就像喘不過氣來似的半死狀 (啊就慢啊~).

(待續)

後記: 因為太多國外來的垃圾迴響, 所以我把這篇的迴響關了…最近砍到手軟