2012年7月18日 星期三

Unison file-synchronization tool SOP


Unison file-synchronization tool SOP


1.       下載相關套件 (請注意OS版本)
OCaml compiler : http://caml.inria.fr/download.en.html
Unison : http://www.cis.upenn.edu/~bcpierce/unison/download.html

2.       安裝套件 (unison若為使用同一份source,請先執行make clean)
OCaml compiler : 直接RPM安裝即可

Unison : 解TAR之後修改Makefile下的INSTALLDIR = /usr/local/unison/bin/
修改完後存檔離開,先建立資料夾mkdir –p /usr/local/unison/bin/,建立資料夾後直接make;make install

※     /usr/local/unison/bin/資料夾要自行手動建立,程式不會自動產生,注意Makefile的路徑後面不要有空格,否則make install時會出現錯誤,檢查方式為/usr/local/unison/bin/下若只有一個檔案,表示Makefile的路徑有問題,造成檔案無法正常複製到路徑下

3.       copy script範本並修改

Script內容 (注意紅字部分的修改,每個網站不同)
#!/bin/bash

DATE=`date +'%Y%m%d'`
TIME=`date +'%H%M'`
HOSTNAME=`hostname -a | tr -d " "`
REMOTE_DIR=/pda
LOCALHD=/backuphd/pdawb
HOME=/root
LOG=/var/log/unison.log
SNAPSHOT=/backuphd/pdawb/.snapshot/$DATE/$TIME
UNISON=/usr/local/unison/bin/unison
OLDDATE=`date -d '7 day ago' +%Y%m%d`
OLDSNAPSHOT=/backuphd/pdawb/.snapshot/$OLDDATE
DU=`du -s -h $LOCALHD`

##### Create Snapshot Directory
if [ ! -d "$SNAPSHOT" ];then
    mkdir -p $SNAPSHOT
fi
##### Create Snapshot
TIME=`date +'%Y%m%d %H:%M:%S'`
echo "Start Create Snapshot at $TIME" > $LOG
cp -apl $LOCALHD/* $SNAPSHOT
TIME=`date +'%Y%m%d %H:%M:%S'`
echo " " >> $LOG
echo "Create Snapshot Done at $TIME" >> $LOG
echo " " >> $LOG
##### run unison
echo "Change File List: " >> $LOG
$UNISON -silent -batch -owner -group -times $REMOTE_DIR $LOCALHD -force $REMOTE_DIR -logfile $LOG >> /var/log/messages 2>&1
echo " " >> $LOG
#####delete old snapshut
rm -rf $OLDSNAPSHOT
##### check backup status
DATE=`date +'%Y%m%d'`
TIME=`date +'%Y%m%d %H:%M:%S'`
TIME1=`date +'%H%M'`
FOLDERPATH=/backuphd/pdawb/.snapshot/$DATE
FOLDERLIST=`ls -lh /backuphd/pdawb/.snapshot/$DATE/ | awk '{print $6,$7,$8,$9}'`
echo "Folder List: " >> $LOG
ls -lh $LOCALHD | awk '{print $5"\t"$6"\t"$7"\t"$8"\t"$9}' >> $LOG
echo " " >> $LOG
echo "Total Usage: $DU" >> $LOG
echo " " >> $LOG
echo "Unison Done at $TIME" >> $LOG
echo " " >> $LOG
echo "Check Folder Path : $FOLDERPATH" >> $LOG
echo " " >> $LOG
echo "Check Folder List :" >> $LOG
echo "$FOLDERLIST" >> $LOG
##### mail to
HOURSET=`date +'%H'`
TIME=`date +'%Y%m%d-%H:%M:%S'`
MAILLIST= "XXXX@XXX.XXX"
if [ $HOURSET -eq 4 ] || [ $HOURSET -eq 8 ] || [ $HOURSET -eq 12 ] || [ $HOURSET -eq 16 ] || [ $HOURSET -eq 20 ] || [ $HOURSET -eq 00 ]; then
   mail -s ''$HOSTNAME' unison Backup Status-'$TIME'' $MAILLIST < $LOG
fi

修改完畢存檔後建立備份資料夾 mkdir /backuphd/pdawb
並手動執行一次unison,讓/root/.unison/default.prf產生

執行完畢之後,編輯/root/.unison/default.prf,加入要排除的資料夾
ex:
        ignore = Name {.snapshot}
        ignore = Name {public}


修改完畢後,手動執行一次unison,做第一次同步
/usr/local/unison/bin/unison -batch -owner -group -times /pda /backuphd/pdawb -force /pda -logfile /var/log/unison.log
語法:
/usr/local/unison/bin/unison -batch -owner -group -times /pda /backuphd/pdawb -force /pda -logfile /var/log/unison.log
Unison command [預設回應] [同步onwer權限] [同步group權限] [同步檔案時間] [遠端資料夾] [目的資料夾] [強制設定來源] [log檔案路徑]

加入crontab,重啟service


注意事項:
1.       若不指定執行時的profile,unison預設會採用/root/.unison/default.prf當成profile,若有多個資料夾要備份,可編輯不同的profile,執行時加入profile name即可,此處以managermx為範例說明,請注意紅字部分

#!/bin/bash
DATE=`date +'%Y%m%d'`
TIME=`date +'%H%M'`
HOSTNAME=`hostname -a | tr -d " "`
REMOTE_DIR=/manager
LOCALHD=/backuphd/manager
HOME=/root
PROFILE=manager.prf
LOG=/var/log/unison-manager.log
SNAPSHOT=/backuphd/manager/.snapshot/$DATE/$TIME
UNISON=/usr/local/unison/bin/unison
OLDDATE=`date -d '7 day ago' +%Y%m%d`
OLDSNAPSHOT=/backuphd/manager/.snapshot/$OLDDATE
DU=`du -s -h $LOCALHD`
##### Create Snapshot Directory
if [ ! -d "$SNAPSHOT" ];then
    mkdir -p $SNAPSHOT
fi
##### Create Snapshot
TIME=`date +'%Y%m%d %H:%M:%S'`
echo "Start Create Snapshot at $TIME" > $LOG
cp -apl $LOCALHD/* $SNAPSHOT
TIME=`date +'%Y%m%d %H:%M:%S'`
echo " " >> $LOG
echo "Create Snapshot Done at $TIME" >> $LOG
echo " " >> $LOG
##### run unison
echo "Change File List: " >> $LOG
$UNISON $PROFILE -silent -batch -owner -group -times $REMOTE_DIR $LOCALHD -force $REMOTE_DIR -logfile $LOG >> /var/log/messages 2>&1
echo " " >> $LOG

Tomcat 5.0/5.5 with SSL + cluster + load balance


Tomcat 5.0/5.5 with SSL + cluster + load balance


Tomcat 5.0/5.5 with SSL + cluster + load balance

Tomcat如果作cluster的話,通常都會同時配合load balance的方案。而Tomcat的load balance解決方案,最多人用的是利用apache http server搭配jk module來當Tomcat前端的load balance server。不過在網路上查到的大多是apache http server與tomcat都走http protocol的設置說明。如果tomcat要走https的話,前端當load balance的apache http server當然也一定要走https才行。但是這部份的文件實在是少的不行,讓人很...囧rz

以下是自己試過後確定可以同時讓tomcat與前端load balance的apache http server都可以走https的設置方式,有需要的可以參考一下

1.安裝軟體清單
linux AS 4U4
N個Tomcat 5.0/5.5 (N >= 2)
Apache HTTP Server 2.2.4 with SSL version
JK module for Apache HTTP Server 2.2.4

2.Tomcat with SSL
2.1 官方文件
http://tomcat.apache.org/tomcat-5.0-doc/ssl-howto.html (for Tomcat 5.0)
http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html (for Tomcat 5.5)

2.2 設置方式
step1 : 在Console執行%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA指令,將password的值設成changeit
step2 : 將$CATALINA_HOME/conf/server.xml中的<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->的comment給拿掉


3.Tomcat with cluster
3.1 官方文件
http://tomcat.apache.org/tomcat-5.0-doc/cluster-howto.html (for Tomcat 5.0)
http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html (for Tomcat 5.5)

3.2 設置方式
Step1 : 將要做cluster的所有Tomcat APServer裡$CATALINA_HOME/conf/server.xml中的<Cluster>...</Cluster>的comment給拿掉,在<Engine>tag中加入jvmRoute="你指定的woker"此項attribute
Step2 : 要做cluster的所有Tomcat APServer用的multicast address,multicast port都要相同

3.3 注意事項
3.3.1 如果是同台Server上裝多個Tomcat的話必需要把下列的几個Port調開
Server port
non-SSL Coyote HTTP/1.1 Connector port
SSL Coyote HTTP/1.1 Connector port
Coyote/JK2 AJP 1.3 Connector on port
Cluster tcpListenPort

3.3.2 存放在HttpSession的Object都必需實作java.io.Serializable Interface

3.3.3 可用下列jsp文檔進行測試,測成功的話不同url取回的session id值會相同

<%@ page contentType="text/html; charset=UTF-8" import="java.util.*"%>
<html>
<head>
<title>Cluster App Test</title>
</head>
<body>
Server Info:
<% out.print(request.getLocalAddr() + " : " + request.getLocalPort()); %>
<% out.println("<br> ID " + session.getId());   // 如果有新的 Session 屬性設置 String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); }
out.print("<b>Session 列表</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements())
{ String name = (String) e.nextElement(); String value = session.getAttribute(name).toString(); out.println(name + " = " + value); } %>
 <form action="index.jsp" method="POST"> 名稱:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit>
</form>
</body>
</html>

4.Tomcat with load balance
4.1 官方文件
http://tomcat.apache.org/tomcat-5.0-doc/balancer-howto.html (for Tomcat 5.0)
http://tomcat.apache.org/tomcat-5.5-doc/balancer-howto.html (for Tomcat 5.5)


4.2 設置方式
Step1 : 將ApacheHttpServer安裝目錄/conf/httpd.conf加入下述設定片段

#(httpd.conf) #載入 mod_jk 模組
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties

            # Where to put jk logs

            JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]

            JkLogLevel error
JkRequestLogFormat     "%w %V %T %U %q"
# Add the jkstatus mount point

            JkMount /jkmanager/* jkstatus
# # Configure mod_jk #                                                                                                                
 <Location /jkmanager>
JkMount jkstatus Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

Step2 : 在ApacheHttpServer安裝目錄/conf中加入workers.properties文字檔,該檔的設置可參考下述範例(記的改host跟port的值以符合實際的狀況)

# The advanced router LB worker
worker.list=router,jkstatus
# Define a worker using ajp13
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
# Define prefered failover node for worker1
#worker.worker1.redirect=worker2
# Define another worker using ajp13
worker.worker2.port=9009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
# Disable worker2 for all requests except failover
#worker.worker2.activation=disabled
# Define the LB worker
worker.router.type=lb
worker.router.balance_workers=worker1,worker2
# Define a 'jkstatus' worker using status
worker.jkstatus.type=status

Step3 : 在ApacheHttpServer安裝目錄/conf中加入uriworkermap.properties文字檔,該檔的設置可參考下述範例

/*=router
/jkmanager=jkstatus

4.3 load balance監控方式
在安裝balance程式的那台電腦本機利用browser開啟http://localhost/jkmanager進行監控


5.Apache HTTP Server with SSL
5.1 設置方式
Step1 : 將ApacheHttpServer安裝目錄/conf/httpd.conf裡的LoadModule ssl_module modules/mod_ssl.so的comment給拿掉

Step2 : 將ApacheHttpServer安裝目錄/conf/httpd.conf裡的Include conf/extra/httpd-ssl.conf的comment給拿掉

Step3 : 產生CA相關憑証
在Console中切換到ApacheHttpServer安裝目錄/bin路徑
在Console中執行openssl req -config ../conf/openssl.cnf -new -out ../conf/server.csr,並輸入自己指定的密碼
在Console中執行openssl rsa -in privkey.pem -out ../conf/server.key,並輸入剛剛自己指定的那組密碼
在Console中執行openssl x509 -in ../conf/server.csr -out ../conf/server.crt -req -signkey ../conf/server.key -days 3650
在Console中執行openssl x509 -in ../conf/server.crt -out ../conf/server.der.crt -outform DER

有關Step3寫的產生憑証設定,我是看的很頭大不確定這樣設置所產生的憑証有沒有問題,有高人知道怎麼設最安全的話,麻煩指點一下...<(_ _)>

6.補充事項
6.1 如果想讓User只能經由HTTPS的連線連至Tomcat,可以改下述設定
將ApacheHttpServer安裝目錄/conf/httpd.conf裡的Listen 80給comment起來
將$CATALINA_HOME/conf/server.xml中的<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->那段設定給comment起來

6.2 Tomcat的cluster是利用multicast的方式達成,要做cluster的Tomcat APServer最好在同個switch的網段內,否則cluster很可能會失效。因為有可能跨switch後multicast就送不出去了。

7.參考文檔
http://zanyking.java.pro/post/23/81
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html
http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html
http://www.pczone.com.tw/vbb3/thread/47/96241/
http://www.pczone.com.tw/vbb3/thread/47/96447/
http://xiaoant.blog.sohu.com/40503251.html


vi 與 vim 的指令整理


vi 是 unix 家族下最功能強大的文字編輯器,讓用戶只要使用一個鍵盤就可以完成所有的編輯。而 vim 則是 vi 的加強版,甚至在 Windows 上也找得到 vim 的芳蹤。但 vi/vim 眾多的指令卻經常令初學者卻步,以下就是我所整理出來那些令人卻步的指令:


指令 說明
i 在游標位置進入編輯模式
I 在游標行的第一個非空白字元進入編輯模式
a 在游標位置後進入編輯模式
A 在游標行的最後一個字元進入編輯模式
o 向下新增一行,並進入編輯模式
O 向上新增一行,並進入編輯模式
cc 刪除游標行,並進入編輯模式
[ESC] 取消指令或退出編輯模式
游標移動

指令 說明
gg 移到第一行
G 移到最後一行
行數 → G 移動到第 n 行
0 移動到該行最前面
$ 移動到該行最後面
字數 → [Space] 向右移動 n 個字元
行數 → [Enter] 向下移動 n 行 <h3>標記與複製</h3>
指令 說明
v 開始字串標記
V 開始行標記
v → [Ctrl]-V 開始區塊標記
d 刪除標記的內容
y 複製標記的內容
yy 複製游標行
yG 複製游標行到最後一行
y1G 複製游標行到第一行
y$ 複製游標處到最後一個字元
y0 複製游標處到第一個字元
p 在下一行貼上複製或刪除的內容
P 在上一行貼上複製或刪除的內容
[Ctrl]-R → 0 在下一行貼上複製或刪除的內容,適用於編輯模式及指令行 <h3>搜尋與取代</h3>
指令 說明
/搜尋字串 向下搜尋字串
* 將游標移到字串上,直接按 “*” 也可以做向下搜尋
?搜尋字串 向上搜尋字串
:set ic 搜尋時不分大小寫
:set noic 搜尋時要分大小寫
n 繼續下一個搜尋結果
N 繼續上一個搜尋結果
:起始行,終止行s/搜尋字串/取代字串/gic 從第 n 行到第 n 行取代字串 (後面的 g: 整行全部, i: 不分大小寫,


c: 詢問)

:1,$s/搜尋字串/取代字串/gic 全部取代字串 (後面的 g: 整行全部, i: 不分大小寫,
c: 詢問) <h3>刪除</h3>
指令 說明
dd 刪除游標行
dG 刪除游標行到最後一行
d1G 刪除游標行到第一行
d$ 刪除游標處到最後一個字元
d0 刪除游標處到第一個字元 <h3>檔案功能</h3>
指令 說明
:w 存檔 (加 ! 表示強制存檔)
:w 檔案名稱 另存新檔
:wq 存檔並退出 vi
:e 檔案名稱 編輯其它檔案
:e! 還原至檔案編修前的狀態
:r 檔案名稱 讀入檔案內容,並加到游標行的後面
:n 切換到下一個開啟的檔案
:N 切換到上一個開啟的檔案
:set nu 顯示行號
:set nonu 取消行號顯示
:files 列出所有開啟的檔案 <h3>視窗分割</h3>
指令 說明
:new 新增水平視窗
:new 檔案名稱 新增水平視窗,並在新增的視窗載入檔案
:vnew 新增垂直視窗
:vnew 檔案名稱 新增垂直視窗,並在新增的視窗載入檔案
[Ctrl]-W → [方向鍵] 切換視窗
:only 僅保留目前的視窗 <h3>其它</h3>
指令 說明
J 將游標行與下一行合併
u 還原指令
[Ctrl]-R 重做指令
. 重覆上一個指令
! 命令 執行 linux 指令,並顯示執行結果
:q 退出 vi (加 ! 表示強制退出) <h3>vim 的設定檔</h3>
通常我會編輯 /etc/vimrc,在檔案最後加入:

" 顯示列號
    set number
    " 語法高亮度顯示
    syntax on
    " 標記搜尋到的字串
    set hlsearch
    " 自動縮排
    set autoindent
    " 顯示說明
    set ruler
    " 顯示編輯狀態
    set showmode
    " 設定註解的顏色
    highlight Comment ctermfg=cyan
    " 設定搜尋到的字串顏色
    highlight Search term=reverse ctermbg=4 ctermfg=7
    " 設定 tab 鍵的字元數
    set tabstop=4


好用的 netcat 指令


netcat 就像 cat 指令一樣,只是將簡單的 cat 功能完全「網路化」,好用與靈活的程度可說是很驚人,而在 Top 100 Network Security Tools 排行榜中還排行第四名呢!

netcat 除了可以當 TCP Client 工具以外,還可以當 TCP Server 的工具,以下我用幾個簡單的例子說明:

示範 netcat 如何當 TCP Client 工具

底下這段指令代表你要將 /etc 目錄整個打包並壓縮起來,並將資料傳送到 10.0.0.99 主機的 Port 3456,並指定若超過 30 秒沒有連上目的地或 30 秒沒有回應的話自動 Timeout。

# tar -zcf - /etc | netcat -w 30 10.0.0.99 3456
示範 netcat 如何當 TCP Server 工具

如果拿以上的例子,你可能會想說那你還要自己寫一個 Server 接受這些封包啊!答案是:「只要用 netcat 就可以拿來當 Server 用了,一行程式也不用寫」,底下這段指令是假設從 10.0.0.99 主機執行的。

# netcat -l -p 3456 > /backup/my_etc_backup.tar.gz
-l 參數代表進入 Listen mode

-p 代表 Listen 的 Port 為 3456

之後的 > my_etc_backup.tar.gz 代表你要將從 TCP 傳入的所有資料都導入到 /backup/my_etc_backup.tar.gz 檔案中。

用以上兩個非常簡單的例子就可以知道,原來在網路之間傳輸資料可以如此的簡單。若知道 rsync 工具的人可能會笑說:「用 netcat 太麻煩了吧,用 rsync 同步或備份檔案才更好用吧」。是的,如果要「同步檔案」的話,當然用 rsync 比較好用,不過 netcat 還可以做的更多!

因為 netcat 可以模擬任何所有 TCP Protocol 的動作,就如同我們常用 telnet 測試 HTTP、POP3、或 SMTP 協定的時候一樣,只是使用 netcat 可以讓我們更自動化的做些測試,舉幾個例子如下:

1. 測試 HTTP 運作是否正常

首先,必須先建立要下的 HTTP 指令檔,假設叫 GET_tw.yahoo.com.txt,內容如下:

GET / HTTP/1.0
Host: tw.yahoo.com
注意:在指令的最後面必須要有兩個「斷行」符號,所以你可以在文字檔後面加上兩行空白行。

然後就可以用以下指令取得 Yahoo! 奇摩 的首頁 HTML:

# cat GET_tw.yahoo.com.txt | nc tw.yahoo.com 80
再透過一些指令或程式就可以將測試網頁是否還活著的偵測程式完成且自動化了。

2. 測試 SMTP 運作是否正常

測試 SMTP 的方式也跟 HTTP 一樣,就是先把指令都給先寫好,假設檔名是 SMTP_test.txt,內容如下:

HELO localhost
MAIL FROM:<will@test.com>
RCPT TO:<will@test.com>
DATA
To: Will <will@test.com>
Subject: This is a test
This is first line
.
QUIT
然後就可以用以下指令將 SMTP Command 送到 smtp.test.com 了:

#  cat SMTP_test.txt | nc smtp.test.com 25
執行的結果如下:

# cat SMTP_test.txt | nc smtp.test.com 25
220 smtp.test.com ESMTP Service ready Fri, 11 Jul 2008 19:13:17 +0800 (CST)
250 smtp.test.com
250 Sender <doggy@test.com> OK
250 Recipient <doggy@test.com> OK
354 Enter mail, end <CRLF>.<CRLF>
250 Message accepted for delivery
221 smtp.test.com

如何讓 tomcat 支援 WMA


解壓後的tomcat 預設是不支援 wma 檔的
只需要在 tomcat/conf/web.xml 加入
   <mime-mapping>
        <extension>wma</extension>
        <mime-type>audio/x-wma</mime-type>
    </mime-mapping>
重啟後即可...

引數列項目過長?什麼鬼


引數列項目過長

查了一下好像是系統限制,處理的檔案數列

A.當檔案數太多, 砍不掉的時後該怎麼辦(錯誤訊息: rm: too many arguments 或 rm: Argument list too long)

先轉成 file owner 的身份去下指令(不然就轉成 root 吧!)

 ls -l | awk '{print $9}' | xargs rm  # 再來這樣子就可以砍掉

 ls -l *.jpg | awk '{print $9}' | xargs rm # 如果只要砍那目錄下的所有 jpg 檔簡單的 shell script 就搞定囉 :)

不過使用前請小心確認一下, 最後 xargs rm 先拿掉, 改成 less, 先確定一下是自己要砍的, 再下此指令吧 :)

B.-bash: /bin/mv: 引數列項目過長 or /bin/find 引數列項目過長
 
     解法: find $path -name '*.*' |xargs grep -i XXX

好像是使用xargs 就可以處理

Install Mysql Replcation


groupadd mysql
useradd -g mysql mysql
cd /usr/local
gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf -
ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql
cd mysql
scripts/mysql_install_db --user=mysql
chown -R root  .
chown -R mysql data
chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

./bin/mysqladmin -u root password 'XXXXXXX"
./bin/mysqladmin -u root -h vipms01.104.com.tw password 'XXXXXX'



MASTER:
./bin/mysqladmin create dbmail -u root -p
mysql -u root -p
GRANT ALL ON dbmail.* to dbmail@localhost identified by 'XXXXXXXX';
GRANT ALL ON dbmail.* to dbmail@10.0.2.73 identified by 'XXXXXXXX';
mysql -u dbmail dbmail -p < sql/mysql/create_tables_innoDB.mysql

mysql -u root -p

GRANG ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'XXXXXXXX'
GRANT FILE ON *.* TO dbmail@172.16.31.11 IDENTIFIED BY 'XXXXXXXX'
GRANT FILE,SELECT,REPLICATION SLAVE ON  *.* TO dbmail@172.16.31.11 IDENTIFIED BY 'XXXXXXXX';
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;


UNLOCK TABLES;

mysqldump -u root --password=1qaz2wsx -a dbmail > /tmp/vipmsdb.sql
mysqladmin -u root --password=1qaz2wsx flush-hosts

mysql -u root dbmail -p < dump_file.sql


Master# vi /etc/my.cnf


在[mysqld]添加或修改以下的


[mysqld]
log-bin                              
server-id=1
sql-bin-update-same
binlog-do-db= reptest


Master# /var/eyou/mysql/bin/mysqladmin –u root –p shutdown
Master# /var/eyou/mysql/bin/safe_mysqld --user=mysql &


#chang slave my.cnf
2、Slave

修改my.cnf,增加如下几行:

server-id = 2

master-host = 172.16.31.111

master-user = dbmail

master-password = XXXXXXXX

master-port = 3306

set-variable=replicate-ignore-db=mysql

set-variable=replicate-do-db=dbmail

restart services

    $mysqld_safe &
mysql>change master to master_Host='172.16.31.111',master_user='dbmail',master_password='XXXXXXXX',master_log_file='mysql-bin.000074',master_log_pos=98;

    mysql>start slave;