over 4 years ago

Index

資料索引,可加快搜尋速度,MySQL 引擎除了 Archive 外都支援 B-tree 索引。
可多欄位設定為 Index。

Unique Key:

和 Index 相同,差異在於不許重複值。
可將多個欄位設定為 Unique Key。

Example:

Unique-key
CREATE TABLE table1 (foo int, bar int);
CREATE UNIQUE INDEX ux_table1_foo ON table1(foo);  -- Create unique index on foo.

INSERT INTO table1 (foo, bar) VALUES (1, 2); -- OK
INSERT INTO table1 (foo, bar) VALUES (2, 2); -- OK
INSERT INTO table1 (foo, bar) VALUES (3, 1); -- OK
INSERT INTO table1 (foo, bar) VALUES (1, 4); -- Fails!

Duplicate entry '1' for key 'ux_table1_foo'

第四個 insert 不能執行,因為若已經將 foo 欄位設定為 Unique Key 時,同一列的值不能重覆。

Primary Key:

是一種 index 但不能為空值(NULL),Primary Key 會自動建立 index。
每個 table 只能有一個 primary key。

Index 的觀念:

Index 建立會佔用儲存空間,資料增刪修時會異動。
Index 欄位長度是越短越好。
Index 欄位長度若是固定比變動好。
使用「Like」參數時,若將萬用字元(%) 置於關鍵詞後方,可以使用到 index,前方不起作用。

單列索引與多列索引的觀念:

將「A+B+C」設為 index 時,僅搜尋 A 是不會用到索引的。
「A+B+C」和「A」設為 index 不同,如搜尋 A+B+C,前者直接回覆 A+B+C 索引值,後者為 A 用索引,縮小範圍後再以搜尋 B+C。

參考資料:
[1] http://miggo.pixnet.net/blog/post/30862194-%5bmysql%E5%9F%BA%E6%9C%AC%E8%A7%80%E5%BF%B5%5d-primary-key---index---unique%E5%B7%AE%E5%88%A5
[2] http://stackoverflow.com/questions/487314/primary-key-or-unique-index

 
over 4 years ago

1. Update and Install apache2

$ sudo apt-get update
$ sudo apt-get install apache2

在瀏覽器輸入 localhost 即可看到 apache2 的相關資訊。

2. Install MySQL

$ sudo apt-get install mysql-server php5-mysql

3. Install PHP

$ sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

並且修改 /etc/apache2/modes-enabled/dir.conf 的內容,改變 index.php 的執行優先權。

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

修改成 

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

重新啟動 apache2

$ sudo service apache2 restart

4. Test PHP Processing on your Web Server

$ sudo vim /var/www/html/info.php
<?php
phpinfo();

在瀏覽器輸入 localhost/info.php

即可看到 php 的相關資訊,但為了安全性考量,請在測試後將 info.php 移除。

$ sudo rm /var/www/html/info.php

5. Configure user directory

設定每個使用者的個人網站根目錄

$ mkdir /home/user/public_html
$ vim /home/user/public_html/info.php
<?php
phpinfo();

修改使用者網站根目錄權限

$ chmod 755 /home/user/public_html -R

載入 userdir 模組

$ a2enmod userdir

將 /etc/apache2/mods-available/php5.conf 檔案中的 php_admin_flag 註解

$ sudo vim /etc/apache2/mods-available/php5.conf
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Order Deny,Allow
    Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
#        php_admin_flag engine Off
    </Directory>
</IfModule>

在瀏覽器輸入 localhost/~user/info.php
一樣可以看到 PHP 的相關資訊。

6. Create New Virtual Host Files

$ sudo vim /etc/apache2/sites-available/user.conf
<VirtualHost user.local>
    ServerAdmin webmaster@localhost
    ServerName  user.local

    DocumentRoot /home/user/public_html

    <Directory "/home/user/public_html/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

載入 rewrite 模組,並且載入剛剛設定的 domain

$ sudo a2enmod rewrite
$ sudo a2ensite user

重新載入 apache2

$ sudo service apache2 restart

7. Configure /etc/hosts

在 /etc/hosts 中加入

127.0.0.1 user.local

然後就能在瀏覽器中輸入 user.local 即可看到 php 相關資訊。

相關資料:
How To Set Up Apache Virtual Hosts on Ubuntu 14.04 LTS

 
almost 5 years ago

我記得小時候,
我阿祖她有一個非常要好的朋友,我都叫她同年祖,
同年祖很常來家裡找我阿祖聊天,
她們是從小玩到大的好朋友,有 70 幾年的友誼囉。

但是有天突然發現同年祖已經好久好久沒來我家聊天了,
後來我聽到大人在說,是因為村裡要選村長,
但是同年祖跟阿祖支持的人不一樣,後來鬧翻了。

一直到我阿祖過世前,她們都沒有在好好坐下來像聊聊天了,
我覺得好可惜,70 幾年的交情了,就因為政治搞壞了。

我想說的是,最近服貿打得火熱,
每個人都會有自己的看法,
我們可以提出自己的想法,
但是也要注意自己的語氣還有風度,
再表達自己意見的同時,我們也要傾聽別人的想法,
別因為一時看法不同,打壞了原本非常要好的友誼。

「我不贊成你的意見 但是我誓死捍衛你說話的權利」- 伏爾泰

可以表達我們各自的看法,
想說我們想說的話,
不就是我們身為一個民主法治國家可貴的地方嗎。

 
about 5 years ago

對於我這個無蝦米重度使用者來說,
系統上要是沒有安裝的話打字真的都打不好阿。

之前都會使用 iBus 來安裝,但是後來發現過程還滿瑣碎的
後來發現在利用 gcin 安裝 嘸蝦米輸入法 於 Debian/Ubuntu(GCIN)就可以輕鬆安裝了

1. 安裝 GCIN

Install GCIN
[root@ubuntu ~] # apt-get install gcin im-switch

[root@ubuntu ~] # imswitch -s gcin

2. 再來就請重新登入,好讓系統重新載入設定檔

3. 安裝無蝦米

Install noseeing
[root@ubuntu ~] # wget http://edt1023.sayya.org/misc/noseeing-6.tar.gz

[root@ubuntu ~] # mv noseeing-6.tar.gz .gcin

[root@ubuntu ~] # cd .gcin

[root@ubuntu .gcin] # tar zxvf noseeing-6.tar.gz 

4. 重新登入,然後在 gcin 設定內定輸入法就行囉~~~


資料參考

  1. 安裝 嘸蝦米輸入法 於 Debian/Ubuntu(GCIN)
 
about 5 years ago

1. 更新 apt-get 套件,並且安裝 Open vSwitch 需求的套件

Install Open vSwitch Necessary Package
[root@ubuntu ~] # apt-get update

[root@ubuntu ~] # apt-get install -y git python-simplejson python-qt4 python-twisted-conch autoconf gcc uml-utilities libtool pkg-config automake build-essential openssl libssl-dev bridge-utils


2. 先把 network-manager 關閉

請先確保你是在本地端登錄,然後把 network-manager 關閉,
不然在之後的節驟可能會出現錯誤

stop network-manager
[root@ubuntu ~]# /etc/init.d/network-manager stop


3. 下載 OVS tarball

Doenload OVS tarball
[root@ubuntu ~] # wget http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz

[root@ubuntu ~] # tar zxvf openvswitch-1.4.0.tar.gz

[root@ubuntu ~] # mv openvswitch-1.4.0 openvsiwtch

[root@ubuntu ~] # cd openvsiwtch


4. 註解重覆的程式碼

因為這個版本的某些 code 跟原生的 linux code 有衝突到
所以在這邊,請接以下這些標頭檔的 function 注解掉

修改 datapath/linux/compat/include/linux/skbuff.h 的函式 skb_frag_page 跟 skb_reset_mac_len
修改 datapath/linux/compat/include/linux/if.h 的變數 IFF_OVS_DATAPATH
修改 datapath/linux/compat/include/linux/if_vlan.h 的函式 vlan_set_encap_proto

5 編譯 Open vSwitch

Compiling Open vSwitch From Source
[root@ubuntu openvswitch] # ./boot.sh

[root@ubuntu openvsiwtch] # ./configure --with-linux=/lib/modules/`uname -r`/build

[root@ubuntu openvsiwtch] # make && make install


6. 載入 OVS module

要先移除 Linux 原生的 bridge module 讓 OVS module 替代

Load Open vSwitch Module
# bridge 不先關的話可能會造成 ovs insmod failed

[root@ubuntu openvsiwtch] # lsmod | grep bridge

[root@ubuntu openvsiwtch] # rmmod bridge


#load kernel module

[root@ubuntu openvsiwtch] # insmod datapath/linux/openvswitch.ko

[root@ubuntu openvsiwtch] # insmod datapath/linux/brcompat_mod.ko  #可以讓 ovs 取代 linux bridge 的模組


7. 設定相關參數

Setting
[root@ubuntu openvsiwtch] # mkdir -p /usr/local/etc/openvswitch

[root@ubuntu openvsiwtch] # ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

[root@ubuntu openvsiwtch] # ovs-vsctl --no-wait init

[root@ubuntu openvsiwtch] # ovsdb-server /usr/local/etc/openvswitch/conf.db \

--remote=punix:/usr/local/var/run/openvswitch/db.sock \

--remote=db:Open_vSwitch,manager_options \

--private-key=db:SSL,private_key \

--certificate=db:SSL,certificate \

--bootstrap-ca-cert=db:SSL,ca_cert --pidfile --detach
[root@ubuntu openvsiwtch] # ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock --detach

[root@ubuntu openvsiwtch] # ovs-brcompatd --pidfile --detach


8. 利用 ovs-vsctl 查看是否安裝成功

ov-vsctl
[root@ubuntu ~] # ovs-vsctl show

85bbe26c-f2fe-49f6-aa74-e34b026a197f


9. 開機時,自動載入相關設定

可以先將下列寫成一支 shell,然後在 /etc/rc.local 載入
這樣一來,每次重開機時,就都會載入相同的設定

ovs
#!/bin/bash

 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
 
#移除原有模組並新增open vSwitch

rmmod bridge
insmod /root/openvswitch/datapath/linux/openvswitch_mod.ko
insmod /root/openvswitch/datapath/linux/brcompat_mod.ko
 
#啟動

ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \

   --remote=db:Open_vSwitch,manager_options \

   --private-key=db:SSL,private_key \

   --certificate=db:SSL,certificate \

   --bootstrap-ca-cert=db:SSL,ca_cert \

   --detach
 
#檢查是否開過

SERVICE='ovs-vswitchd'
 
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running"
else
    ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock --detach
fi
 
ovs-brcompatd --pidfile --detach
exit 0