九月 26, 2010

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 在 django-based 系統中,將MyISAM 轉換成 InnoDB

詳細請見官方文件

我簡單整理如下:

一、將 settings.py 中的資料庫引擎從 MyISAM(預設值) 換成 InnoDB , 加下以下設定,


DATABASES = {
'default': {
'NAME': 'xxx',
'USER': 'xxx',
'PASSWORD': 'xxx',
'ENGINE': 'mysql',
'OPTIONS': {
"init_command": "SET storage_engine=INNODB",
},
}
}


二、將原來的表格作


mysql> ALTER TABLE ????? ENGINE=INNODB;


至於第二種方法該如何處理,我是使用 mysql 指令手動處理:


mysql> \T /home/hoamon/alter.sql;
mysql> show tables;
mysql> \q;
sh# perl -i -pe 's/| +([^ ]+) +|/ALTER TABLE \1 ENGINE=INNODB;/g' /home/hoamon/alter.sql
sh# mysql -u xxx -pxxx xxx < /home/hoamn/alter.sql


我在將 MyISAM => InnoDB 時,遇到一個問題 MySQL Error code 1071錯誤('Specified key was too long; max key length is 767 bytes')。

因為原本的 models.py 有一個 Model 設定了 unique_together = (('name', 'uplevel_id'), ) ,而它會造成 1071 Error code,因為 name 的原長度是 256 ,而我們又使用 utf8 ,所以它的實際長度為 256 * 3 = 768 ,但在 InnoDB 的索引中,限制為 767 以下,所以我們必須將 name 的長度限制改為 255 才行。

四月 25, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» Does IBM Merge Sun? No, but Oracle will.


引自:http://www.techcrunch.com/wp-content/uploads/2009/04/oracle-sun.png


事實上, IBM 買 Sun ,就產品線而言,只有一個 Java 對它是值錢的,其他的 Sparc CPU, Solaris OS 對 IBM 而言,都是「無用的」,因為它光是整合自己的資產都花了不少心力了,何況還要拿一個架構幾乎不同的東西來研究,雖然就 Solaris 來說,它比 AIX 好用,但又如何! IBM 自己也在發展 Linux 呀,何必再拿 Solaris 上架。

至於 MySQL 方面,雖然它與 DB2 有互補效應,不過,我認為這些原本用 MySQL 的網站,就算將來搞大了, MySQL 撐不住時,要它換 DB2 ,它們也不見得願意,換 PostgreSQL 的可能性都還會比 DB2 Express-C 高點。

事實上,除了一起推廣 Java 外, IBM 與 SUN 根本就是彼此的大對頭,像是:
Sparc V.S Power
Solaris V.S AIX
NetBeans V.S Eclipse(還故意叫「日蝕」)
PostgreSQL + MySQL V.S DB2
GlassFish V.S Websphere
只可惜在規模上, SUN 遠遠不如 IBM 。

所以 IBM 實際上是拿 65 億美金買了 Java (事實上, Java 也是 Sun 在紐約證交所的代號)。日前因收購消息, Java 的市值也差不多來到 60~70 億美元附近。

然而,事情沒那麼簡單,以 IBM 這個企業巨人而言,出此招絕不是只有在技術面上考量而已,還有策略。

當 IBM 叫囂要買下 SUN 的同時,其實就算後來沒買到,這都已經讓 IBM 得利了。怎麼說,先說說買下 SUN 的情況, IBM 將完全掌握 Java ,雖然它本身是 Open Source 軟體,但未來 IBM 絕對可控制 Java 語言的方向; 但在沒買下的情況中, IBM 也會有所收獲,因為它對那些 SUN 原有客戶及潛在客戶喊話:「現在買 SUN 的機器是沒有保證的,因為我可以花錢讓你們買的機器沒有未來擴充性。」

我認為這購併真是 IBM 的高招呀! 不過,我想 SUN 應該早就明白這一點了,所以它在2004年即努力地將過去的成果拼命 Open Source 化,讓客戶認知 - 使用它們的產品就算公司倒了,也能繼續運作下去,不過是少了塊 Logo 而已。

直到昨天,我都還認為 SUN 應該就這麼倒下去了吧!因為它們拒絕了 IBM 的購併提議。然而,昨天出現了大逆轉: Oracle 加入戰局了。

Oracle 打算拿出 74 億美金併購 SUN ,而這一點也經 SUN 董事會同意了,現下只等股東會開會通過, SUN 就成了 Oracle 的一份子。相較於 IBM 花 65 億只買下 Java , Orcale 買 74 億買 MySQL, Sparc, Solaris,Java 就顯得非常划算了。

一直以來(從學會 vi 開始),我對 SUN 的產品(除了 Java)都非常有好感, 因為 Bill Joy 是 SUN 的四位創辦人之一,而他的成就改變了我這一生使用電腦的方式 - 總是在 Escapse。

最近也裝了 OpenSolaris 2008.11 ,雖然在使用習慣上,還是離 Ubuntu 有一段距離,但它有個耀眼的功能,是我非常欣賞的,而這功能對「不使用版本控制器的人」來說,可算是「殺手級應用」。那就是「時間軸」功能。在 OpenSolaris 中,啟動「時間軸」功能後,則你在 ZFS 磁區中的所有檔案都會被作快照,所以當你想找出兩天前被你誤刪的檔案就非常簡單啦。詳情請見ZFS snapshot visualization in GNOME

四月 6, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 明碼的 password 實在是很傷惱筋耶

通常,我遇到的系統管理員如果是 Linux/Un*x 玩得比較久的也才會對這個明碼 password 有戒心。其他 Windows 或是 Linux 菜鳥就顯得無所謂了,甚至他們還會想要告訴我他們的密碼是什麼! 或許是我不容易遇到高級 Windows 系統管理員吧!

所以,當我在寫網頁程式或是系統管理程式時,這資料庫或是其他系統密碼是不會寫在程式碼中的,因為我們的程式都會放到版本控制器去,且在開發團隊中是不太會鎖權限的,所以如果我們成員有人笨笨地把帳密流出去,那上面的程式碼一定會被其他人看光光,當然,我絕對不介意別人看我的程式,怕的是他們發現我們系統上的其他帳密(雖然我的機器一律使用公私錀,但還是怕,因為我沒發覺的洞實在是很多)。

而我的作法是把帳密放到設定檔,並且把這個設定檔檔名加上 .example 來提醒其他人記得參照這個 example 檔來修改成適當的內容。

但是用在系統管理檔中,就覺得有點麻煩了,像是定時備份資料庫的 script ,不過就那麼 10 多行,如果還得另外讀個設定檔,就有給它多此一舉了。

還好 MySQL 提供一個在 Linux/Unix 下的用法,在執行備份 script 的帳號家目錄中,放置一個 .my.cnf 檔,其內容為

[client]
password=some_paSSwoRD

然後把 ~backupmysql/.my.cnf 的權限設為 600 。這樣你就可以在 /etc/crontab 寫入

/usr/bin/sudo -u backupmysql /some/path/backup_mysql_script

而 /some/path/backup_mysql_script 的內容,可以如下:

mysqldump -u root --database test > /home/backupmysql/test.sql

如此一來,將 backup_mysql_script 作版本控制後,也不會有人曉得你的 mysql root 密碼是什麼了!

A Feedjack powered Planet
A Django site.