天天看點

Linux下用Ant進行msyql資料庫定時複制和全量備份

  • ant的轉義字元

 $是ant中需要轉義的,使用$$代替$,不能使用\$,在linux控制台下,輸入指令時用的是\$.

  • ant的通配符和轉義字元

三種通配符:

**,*,?

?用于比對1個字元

*,比對任意字元,0個或者多個,常用于比對檔案類型,或者URL

**,任意目錄或者檔案,包含任意多個子目錄

以ant中copy的用法為例:

<copy todir="${src.dir}" verbose="false" preservelastmodified="true" >
                        <fileset dir="${home.dir}">
                                <exclude name="**/build?/**"/>
                                <exclude name="**/workspace/**"/>
                                <exclude name="**/*.java"/>
                                <exclude name="**/log.*"/>
                        </fileset>
                </copy>      

其中 <exclude name="**/build?*.java"/>,表示不包含所有java類型的檔案

<exclude name="**/log.*"/>,表示不包含所有檔案名為log,檔案擴充名任意的檔案

verbose="false" :不顯示copy的詳細資訊,比如哪個檔案被copy了;但如果出錯,或顯示copy出錯資訊。

preservelastmodified="true" :保留修改時間,這樣就容易看出哪些是新檔案。

ant中的copy 還可以指定編碼。

  • ant在Linux下的遠端執行指令
<target name="copydb"  description="backup db">
        <tstamp/>
        <mkdir dir="${db.bak.dir}"/>
         <sshexec host="${db.host}"
username="${user}"
password="${password}"
command="mysqldump -uuser -ppassword -h192.168.1.2 -B t_work |gzip >${db.bak.dir}/${DSTAMP}${TSTAMP}t_work.sql.gz" trust="t
rue"/>
</target>      

   上述指令可實作 ssh登入,并遠端執行資料庫備份指令,

其中<tstamp/> ,會生産2個屬性,後面用到的${DSTAMP}和${TSTAMP},表示日期和時間,用于生産唯一id,使得檔案不重複

     mysqldump -uuser -ppassword -h192.168.1.2 -B t_work |gzip >${db.bak.dir}/${DSTAMP}${TSTAMP}t_work.sql.gz" trust="true"

     前半部分是一個 資料庫備份指令,後半部分是通過管道使用gzip壓縮,trust=”true"這個很有必要,表示2台機器互信,否者通常會失敗。許多人不知道mysql可以很好的管道支援。如果需要從192.168.1.2上将t_work資料庫導入192.168.1.3上,可以如下指令替換:

     mysqldump -uuser -ppassword -h192.168.1.2 -B t_work |mysql -uuser -ppassword -h192.168.1.3

   在實作用ant腳本進行2台機器的遠端登入執行指令前,需要使用RSA認證。可搜尋“Linux ssh 不輸入密碼”

其實scp也是一樣的。使用了該密鑰認證後,ssh,scp均不需要輸入密碼。

Linux SSH 互信 不需要輸入密碼具體操作

這一段不知道從哪摘下來的 寫道

Linux scp複制檔案,不需要輸入密碼的技巧

一,在linux100主機裡的使用者

運作

#ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/.username/ssh/id_rsa):#回車

Enter passphrase (empty for no passphrase):#回車

Enter same passphrase again:#回車

會在使用者目錄~/.ssh/産生兩個檔案,id_rsa,id_rsa.pub

二,把linux100主機上的id_rsa.pub檔案拷貝到linux200主機的root使用者主目錄下的.ssh目錄下,并且改名為authorized_keys

這樣在linux100主機上使用scp指令複制檔案到linux200上将不提示輸入密碼了,直接複制了。

寫道 在上面一步改名authorized_keys,有可能以及存在了,是以可以改成追加:

cat id_rsa.pub >>~/.ssh/authorized_keys

然後測試下:

[[email protected]]# ssh 10.2.50.26

顯示如下結果:

Last login: Wed Dec 12 13:40:39 2012 from 10.2.144.59

表明ssh不輸入密碼已經可以正常工作了

基于上述的幾個步驟,就可以實作ant腳本,遠端登入并執行簡單mysql複制和備份以及檔案的複制備份功能。