DRBD建置要領

DRBD是三小?以下來自wiki的資料
DRBD (Distributed Replicated Block Device) 是 Linux 平台上的分散式儲存系統。其中包含了核心模組,數個使用者空間管理程式及 shell scripts,通常用於高可用性(high availability, HA)叢集。DRBD 類似磁碟陣列的RAID 1(鏡像),只不過 RAID 1 是在同一台電腦內,而 DRBD 是透過網路。

建置一個DRBD的架構,必需要一些條件:
二台以上的伺服器。
每台伺服器中都要再多一個分割區給DRBD同步資料。

DRBD運作時只有一台為Primary並且這台才有權將DRBD的磁區掛載,其餘機器只能同步。
Continue reading DRBD建置要領

用命令列管理MySQL使用者

過去的單純的網路環境中,常時會安裝phpMyadmin來管理MySQL ,好處是有完善的使用者UI因此就變的容易管理,如果想要成為駭客級的使用者,那麼指令模式就必需要拿來練功了。

在文字指令中,輸入 mysql -uroot -p
顯示使用者清單:
[cc lang=”bash”]
mysql > select * from mysql.user;
[/cc]
會顯示全部列表,但不容易看得清楚。
只顯示 mysql 這個資料庫中 user 資料表的 Host 及 User 共2個欄位
[cc lang=”bash”]
mysql > select Host, User from mysql.user;
[/cc]
新增使用者:
[cc lang=”bash”]
mysql > create user ‘UserName’@’Host’ identified by ‘Password’;
[/cc]
給予某些權限 OPTION 如 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
TARGET 為指定資料庫
[cc lang=”bash”]
mysql > grant OPTION on TARGET to USER;
[/cc]
刪除使用者:
[cc lang=”bash”]
mysql > drop user ‘UserName’@’Host’;
[/cc]

新增使用者:
[cc lang=”bash”]
mysql > create user ‘marry’@’localhost’ identified by ‘abcd2345’;
mysql > create user ‘marry’@’%’ identified by ‘abcd2345’;
[/cc]
其中要注意的是使用者名稱跟指定來源主機的字串需要各別加單引號。

給予權限:
[cc lang=”bash”]
mysql > grant all on *.* to ‘marry’@’localhost’;
[/cc]
這樣 marry 對整個資料庫的所有資料表都擁有全部的權利
[cc lang=”bash”]
mysql > grant select,insert on myFirstDB.* to ‘marry’@’localhost’;
[/cc]
marry 只擁有對 myFirstDB 這個資料檔[的所有表格]的查詢及新增權利。

以上大概就是這個樣子,當然這個只是簡單的指令,要當成駭客級的使用者,我還遠的咧 ~

建立一個MySQL伺服器的備援(M/S Replication)

如果目前服務的MySQL只有一台,卻沒有備援機制,是一件非常危險的事。哪天主機壞了,硬碟壞了,所有資料都付之一炬。因此就必需要建立一個能備援資料的機制。
這次建立的環境為內網一台主要(Master)跟次要(Slave)的MySQL,次要機器為養機千日用在一時的備用。
要建立的步驟大約為以下幾點:
在Master要做的事

  • 建立同步資料用的帳號
  • 於my.cnf設定master該有的設定參數
  • 重啟MySQL以啟用設定

在Slave要做的事

  • 於my.cnf設定slave該有的設定參數
  • 將同步帳號輸入進slave中
  • 重啟MySQL以啟用設定

Master主機資訊: FreeBSD 9 , Mysql 50 server , if : 192.168.101.141
Slave 主機資訊: FreeBSD 9 , Mysql 50 server , if : 192.168.101.142

in Master
進入Master修改my.cnf,如果找不到my.cnf,就到/usr/local/share/mysql/my-large.cnf給它cp一份到/etc/my.cnf。
一般來說,你複製過來的設定檔已經是完整的了,只要查詢以下的設定是否有打開或是參數是否有正確。
[cc lang=”bash”]
[mysqld]
server-id=1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=1
[/cc]
重啟MySQL
[cc lang=”bash”]
$ /usr/local/etc/rc.d/mysql-server restart
[/cc]
然後進入msql的命令列新增同步用的使用者帳號
[cc lang=”bash”]
mysql>create user syncer@192.168.101.142;
mysql>grant replication slave on *.* to syncer@192.168.101.142 identified by ‘abc123’;
[/cc]
先鎖定主機,以查詢二進制的相關資料
[cc lang=”bash”]
mysql>flush tables with read lock;
mysal>show master status;
[/cc]
大概會出現像這樣的資訊

一定要記住File跟Position
然後釋放主機鎖定功能
[cc lang=”bash”]
mysql>unlock tables;
[/cc]

in Slave
修改Slave的my.cnf,其中的server-id不可以跟Master一樣,盡量小點的數字,不用太多。
[cc lang=”bash”]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
[/cc]
完成之後,重啟MySQL,並進入命令列。
[cc lang=”bash”]
mysql>slave stop;
mysql>change master to master_host=’192.168.1.141′,
->master_user=’syncer’,
->master_password=’abc123′,
->master_log_file=’mysql-bin.000006′,
->master_log_pos=1951;
[/cc]
記得master_log_file與master_log_pos都是剛才在Master的show master status所得的資訊。
然後,開啟slave機制。
[cc lang=”bash”]
mysql>start slave;
[/cc]
重看slave的狀態
[cc lang=”bash”]
mysql>show slave status\G
[/cc]
只要看到Slave_IO_Running: Yes 跟 Slave_SQL_Running: Yes 都表示皆在運作中。所以你就可以在Master試一下編修資料。照理來說,你的Slave就會即時吸取你所修改的資料進來了,因此你就得到一台一模一樣的第二台Mysql,並為你的資料做備援的準備以便未來保障你的資訊。
如果你在Slave做change master時輸入錯了相關的資訊,可以使用
[cc lang=”bash”]
STOP SLAVE;
RESET SLAVE;
[/cc]
將Slave的資訊重新設定。

mysqldump 指令備忘

由於時常在用phpmyadmin來管理資料庫,所以指令很少在使用,但在純 command line 還是不得不下指令來管理 mysql 這才是系統管理的最根本。

指定某個資料庫全部 dump 出來:
[cc lang=”bash”]mysqldump -h 192.168.XX.XX -u username -p database > Data.sql[/cc]

如果mysql不在localhost上,可以用 -h 指定host name 或是遠端ip 。

指定某資料庫又指定某table :
[cc lang=”bash”]mysqldump -h 192.168.XX.XX -u username -p database table1 table2 > ADumpingData.sql[/cc]

把資料倒回去:
[cc lang=”bash”]mysql -u username -p dbname < Data.sql[/cc]

Ruby on Rails 的 dbi

ruby on rails 的dbi功能可以單獨建立database server 連線,而不靠rails 內建的 ActiveRecord進行撈資料的動作。但最近真的快被搞腦袋都冒煙,無論重裝幾次,ruby 都告訴你 dbi 都require不進去。

[cc lang=”bash”]irb(main):001:0 > require ‘dbi’
LoadError: no such file to load — dbi
from (irb):1:in `require’
from (irb):1
from :0
[/cc]

但是google之後,先加進 require ‘rubygems’ 就都true了。

[cc lang=”bash”]irb(main):002:0> require ‘rubygems’
=> true
irb(main):003:0> require ‘dbi’
=> true[/cc]

Continue reading Ruby on Rails 的 dbi

php自動補零,隨機資料in mysql

讓php把數值自動補零

函數:sprintf()

一般程式在列印數值時會只印1,2,3,4,5,6,7….9,10….15……,若想要讓數字能01,02,03,04…..就必需再寫個補零的函數,現在不必要了,已經有這個函數可以幫助你使用了。

使用方法:

$var = 1;
echo sprintf(“%02d”, $var);

則印出 01 ,若要補兩個零則可寫成 sprintf(“%03d“, $var);

在mysql中隨機篩選任何的資料列

若不知道這個方法的話,我想你會寫出一大推隨選資料的程式碼,今天起不必這樣子了,只要在sql中下這句語法:

ORDER BY RAND() LIMIT 1

就馬上讓你去好樂迪唱「哈咩送」 ,怪怪,這個問題倒是讓我存疑五、六年了,今天,這個萬年冰鎮又一次的擊破!

用法:

SELECT * FROM table_name ORDER BY RAND() LIMIT 1;

後面的 LIMIT 1 你可以修改成你要列出的資料列數,而且是每筆都隨機給你叫出來,而不是乖乖的照順序呼叫,很強吧!