2011/04/14

早期寫mysql資料庫編碼 latin1 可以配合 mysqldump 修正的方式

還有在用 big5 還有 latin1 編碼的資料庫嗎?
可試著用 mysqldump 配合編碼指定轉換成為 utf8 的格式...

* 資料庫編碼問題
在以前 MySQL 預設的語系是 latin1 這語系是給拉丁語系的國家使用的,
但是以前很多開發者沒有去注意這一段都使用這種語系在做 sql 的工作,
但有時候會出現一些問題。
例如:某兩個中文字在一起就會產生亂碼,中間夾各空白就又好了。

現在 Unicode 的環境已經很成熟了, UTF-8 編碼目前也是大家遵循的標準,
但這些以前的資料如果拿出來使用可以指定預設編碼匯出後再匯入到UTF-8標準
編碼內的資料庫,或許就可以把這問題解決。
--default-character-set=latin1 指定預設編碼輸出。

範例:mysqldump with 預設編碼輸出 --default-character-set=latin1

mysqldump post2 -h localhost -u post --password=密碼
--default-character-set=latin1 > post2.sql

* dump 出來後請看一下文字檔,記得把表格敘述改成 CHARSET=utf8 再匯到新的表格指定 UTF8 編碼

CREATE TABLE `CONDUCT` (
  `班級座號` varchar(9) DEFAULT NULL,
  `導師評分` decimal(15,5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
* 編碼請參考:http://dev.mysql.com/doc/refman/5.6/en/charset-connection.html

* 為了避免語系的悲劇再次重演,你可以這樣做。在 mysql 系統的 /etc/mysql/my.cnf 檔案加入類似這樣的設定,直接綁定預設為 utf8

[mysqld]
default-character-set=utf8
  
[client]
default-character-set=utf8
init_connect='SET NAMES utf8'

* 寫程式的時候記得要輸出 mysql_query("SET NAMES 'utf-8'"); 這一行,告訴 mysql 你要用 utf8 輸出。你可以把他寫成 include 檔案,直接寫好免得協同作業有人不小心又寫爛了

$host = "localhost";
 $ac = "使用者名稱"; 
 $pw = "密碼"; 
 $db = "資料庫名稱"; 
 
 $link = mysql_pconnect($host, $ac, $pw);
 mysql_query("SET NAMES 'utf-8'");
 mysql_select_db($db, $link);

* 還原 mysqldump  還原的方式,就把資料倒回去即可。


a01@sqldebian:~/backup$ mysql a01 -u a01 -h 127.0.0.1 --password=密碼 < a01.sql

需要注意:
這個 *.sql 的匯出中會帶有自動判斷 db 存不存在的判斷式,如果原db 存再匯自動刪除 db 後匯入。

2011/04/11

What's the Right Thing to Do ? (Justice with Michael Sandel)

Before post...
http://jangmt.blogspot.com/2010/03/moral-side-of-murder-case-for.html

Original
http://www.justiceharvard.org/


01 The Moral Side of Murder / The Case for Cannibalism
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=11&Itemid=8
02 Putting a Price Tag on Life / How to Measure Pleasure
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=12&Itemid=9
03 Free to Choose / Who Owns Me?
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=33&Itemid=10
04 This Land is my Land / Consenting Adults
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=34&Itemid=11
05 Hired Guns? / For Sale: Motherhood
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=35&Itemid=11
06 Mind Your Motive / The Supreme Principle of Morality
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=43&Itemid=13
07 A Lesson in Lying / A Deal is a Deal
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=44&Itemid=14
08 What’s a Fair Start? / What Do We Deserve?
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=45&Itemid=16
09 Arguing Affirmative Action / What's the Purpose?
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=46&Itemid=17
10 The Good Citizen / Freedom vs. Fit
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=47&Itemid=17
11 The Claims of Community / Where Our Loyalty Lies
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=48&Itemid=19
12 Debating Same-sex Marriage / The Good Life
http://www.justiceharvard.org/index.php?option=com_content&view=article&id=49&Itemid=20


but...it no captions,
in 163.com had chinese and english doublce captions
第1集
http://v.163.com/movie/2010/1/B/J/M6GOB7TT6_M6GOBOPBJ.html
第2集
http://v.163.com/movie/2010/1/E/A/M6GOB7TT6_M6GOBT1EA.html
第3集
http://v.163.com/movie/2010/1/T/F/M6GOB7TT6_M6GOBUNTF.html
第4集
http://v.163.com/movie/2010/1/G/0/M6GOB7TT6_M6GOCBCG0.html
第5集
http://v.163.com/movie/2010/1/C/9/M6GOB7TT6_M6GOCHTC9.html
第6集
http://v.163.com/movie/2010/1/O/P/M6GOB7TT6_M6GOCJEOP.html
第7集
http://v.163.com/movie/2010/1/D/D/M6GOB7TT6_M6GOCSFDD.html
第8集
http://v.163.com/movie/2010/1/5/3/M6GOB7TT6_M6GOD1A53.html
第9集
http://v.163.com/movie/2010/1/7/5/M6GOB7TT6_M6GOD6P75.html
第10集
http://v.163.com/movie/2010/1/D/T/M6GOB7TT6_M6GODEHDT.html
第11集
http://v.163.com/movie/2010/1/Q/F/M6GOB7TT6_M6GODIQQF.html
第12集
http://v.163.com/movie/2010/1/P/B/M6GOB7TT6_M6GODNIPB.html


The spirited classroom debate doesn’t have to end when class is over. Share your thoughts with other viewers from around the world.

http://www.justiceharvard.org/index.php?option=com_content&view=article&id=11&Itemid=8


有出書!!!正義:一場思辨之旅


以下是博客來網站的介紹,http://www.books.com.tw/exep/prod/booksfile.php?item=0010497671

哈佛大學唯一公開課
YouTube 點閱率過百萬
學生人數打破哈佛375年校史所有紀錄

在高等教育,桑德爾教授的「正義」課堂是一則傳奇。1980年第一次開課,學生只有15人,近 年則每每破千,總是比第二熱門課還多出四五百人,累計學生人數已超過一萬五,桃李遍及各界菁英。

2009年,哈佛決定把這門課向全球公開。作者不只把教學內容寫成本書,上課實況還被剪輯成12個鐘頭,在美國公共電視播出。大學課 堂整學期實況向公眾播放,這是美國電視史上第一次,也是至今唯一僅有的一次。

這12個鐘頭在網路上被瘋狂轉寄。整個2010年下半年,日本、中國、韓國都在討論「桑德爾熱潮」,成為一大文化現象。他到東京演講,黃牛票竟然要價 500美元。在中國,網友自動為畫面加上中文字幕,把上網「淘課」變成新流行。《中國新聞週刊》因此在2010年底將桑德爾選為年度「最 有影響力人物」。

書名雖然標榜正義,重點卻是思考力的訓練。作者有教學天才,新聞事件信手拈來都是正義思考的案例。要解釋康德,他使用柯林頓偷腥案。 要解釋羅爾斯,他搬出伍迪艾倫。

要把理性帶進公領域,公民必須把自己的正義觀說出道理,不能只是「我說我對就是我對」。
本書目的正是邀請讀者做個自我檢視,搞清楚自己抱持哪些信念,何以抱持這些信念。
有了理性思辨,民主對話才能向上提升,不會一直停留在互嗆叫陣的層次。


作者簡介
邁可.桑德爾 (Michael Sandel)

又譯沈岱爾,1953年出生於美國明尼蘇達州,當代知名哲學家。成名甚早,28歲在牛津寫成的博士論文
《自由主義與正義的局限》於 1982年由劍橋大學出版,即被公認為批判羅爾斯與自由主義的代表作,
被譯成八種語言。

33歲獲哈佛大學教學卓越獎(Harvard- Radcliffe Phi Beta Kappa Teaching Prize)。2008年獲美國政治學會頒發特別成就獎。我們在《正義:一場思辨之旅》書中可以讀到偉大教學者的一流修煉。他尊重人人的思考力。不灌輸,只引導。他帶領讀者,在直覺反應與正 義原則之間,來回思考。身為知名的公共知識份子,他很早即對公共事務有濃厚興趣。他在加州讀高中,17歲擔任學生會主席,即曾邀請雷根總統(當時還是加州州 長)來校與他同台對談。

論者經常將他歸入社群主義陣營。但他不喜歡社群主義這個標籤,比較喜歡「公民共和主義」(civic republicanism)。

哈佛正義課網站:www.justiceharvard.org

2011/04/08

10T 的 RAID 掛在 RHEL6 上只抓到 2T ??

10T 的 RAID 掛在 RHEL Linux 6 上用 ext4 作業系統 上只抓到 2T 的容量 ??

這是今天遇到的問題,其實好像在2年前就有遇到,但兩年前硬碟容量還沒現在隨隨便便就突破 2T 。

為何會產生這原因的關係要從 MBR (Master Boot Record)講起 
http://en.wikipedia.org/wiki/Master_boot_record
中文 http://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E8%AE%B0%E5%BD%95

* 從主開機紀錄的結構可以知道,它僅僅包含一個64個位元組的硬碟分割表。在MBR分割表中最多4個主分割或者3個主分割+1個擴充功能分割,也就是說擴充功能分割只能有一個,然後可以再細分為多個邏輯分割。
* 在MBR分割表中,一個分割最大的容量為2T,且每個分割的起始柱面必須在這個disk的前2T內。你有一個3T的硬碟,根據要求你至少要把它劃分為2個分割,且最後一個分割的起始磁區要位於硬碟的前2T空間內。

GPT分割表,支援最大卷為18 EB(Exabytes)。所以如果你硬碟太大,只能用 GPT分割表來使用。
http://en.wikipedia.org/wiki/GUID_Partition_Table
http://zh.wikipedia.org/wiki/GUID%E7%A3%81%E7%A2%9F%E5%88%86%E5%89%B2%E8%A1%A8

但是我們常用的 fdisk 只支援 MBR 所以如果需要使用 GPT 必須用 parted 這個分割工具。
分割過程如下:

[root@cu-tmp ~]# parted /dev/sdb
GNU Parted 2.1
使用 /dev/sdb
歡迎使用 GNU Parted!輸入 'help' 來檢視命令列表。
(parted) mkpart
分割區名稱? []? p
檔案系統類型? [ext2]? ext4
起始點? 0
結束點? 9995000
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/取消/Cancel? i
(parted) print
Model: IBM 1726-2xx FAStT (scsi)
磁碟 /dev/sdb:9997GB
磁區大小 (邏輯/物理):512B/512B
分割區:gpt

編號 起始點 結束點 大小 檔案系統 名稱 旗標
1 17.4kB 9995GB 9995GB p

(parted) q
資訊: You may need to update /etc/fstab.

* parted
[root@cu-tmp ~]# parted /dev/sdb
GNU Parted 2.1
使用 /dev/sdb
歡迎使用 GNU Parted!輸入 'help' 來檢視命令列表。
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
check 編號 對檔案系統進行簡單的檢查
cp [來源裝置] 來源編號 目標編號 將檔案系統複製到另一個分割區
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkfs NUMBER FS-TYPE make a FS-TYPE file system on partition NUMBER
mkpart 分割區類型 [檔案系統類型] 起始點 結束點 建立一個分割區
mkpartfs 分割區類型 檔案系統類型 起始點 結束點 建立一個帶有檔案系統的分割區
move 編號 起始點 結束點 移動指定「編號」的分割區
name 編號 名稱 將指定「編號」的分割區命名為「名稱」
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular
partition
quit 離開程式
rescue 起始點 結束點 挽救臨近「起始點」、「結束點」的遺失的分割區
resize 編號 起始點 結束點 改變位於指定「編號」的分割區中檔案系統的大小
rm 編號 刪除指定「編號」的分割區
select 設備 選擇要編輯的設備
set 編號 旗標 狀態 改變指定「編號」分割區的旗標
toggle [編號 [旗標]] 切換「編號」分割區上的「旗標」狀態
unit 單位 設定預設的「單位」
version display the version number and copyright information of GNU Parted

* 分割完成後,再來就是格式化,格式化有 ext?系列的這幾種格式選擇,則最大分割區大小上限取決於你的 block 設定的大小, ext2 最大是 32T 但是這是在 4kb block 下的結果,所以如果超過請選用 ext4 檔案系統。


* mkfs.ext4 /dev/sdb1
root@cu-tmp ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
610050048 inodes, 2440185542 blocks
122009277 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
74469 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544, 1934917632


Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:


* mount
[root@cu-tmp ~]# mount -t ext4 /dev/sdb1 /storage/

* df -lh
[root@cu-tmp ~]# df -lh
檔案系統 Size Used Avail Use% 掛載點
/dev/mapper/vg_cutmp-lv_root
50G 3.5G 44G 8% /
tmpfs 16G 0 16G 0% /dev/shm
/dev/sda2 485M 34M 426M 8% /boot
/dev/sda1 200M 240K 200M 1% /boot/efi
/dev/mapper/vg_cutmp-lv_home
453G 199M 430G 1% /home
/dev/sdb1 9.0T 168M 8.5T 1% /storage

* 寫入 fstab
root@cu-tmp ~]# tail /etc/fstab
/dev/mapper/vg_cutmp-lv_root / ext4 defaults 1 1
UUID=a7f9f990-4f1a-4197-b8b4-8757cc61c6a5 /boot ext4 defaults 1 2
UUID=0CA6-490F /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/mapper/vg_cutmp-lv_home /home ext4 defaults 1 2
/dev/mapper/vg_cutmp-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sdb1 /storage ext4 defaults 0 0