通過mysqlimport定時將遠端文字檔案匯入mysql

myownstars發表於2011-05-03


文字檔案存放在伺服器a上,且文字檔案的命名方式為yyyymmddhh,每小時匯入24小時前生成的檔案,而mysql安裝在b上
首先在a上,從現有的文字檔案擷取所需的列(使用cut命令),然後傳輸到b。
b這臺伺服器既不能連線ftp伺服器,也不能與其他機器配置使用者等價性,因此向它傳輸檔案只能使用scp,為了避免人機互動輸入密碼,採用了autoexpect命令
[root@justin]# autoexpect scp /var/www/data/info.txt root@b:/var/lib/mysql/market
autoexpect started, file is script.exp
root@b's password:
生成script.exp


[root@justin]# more generate_mysql_info.sh
#!/bin/bash

folder=/var/www/data/

#get the past time value
date1=`date --date='24 hour ago'  +%Y%m%d%H`

cat "$folder""$date1" | cut -d '"' -f 19,20,21,31,32,33,34,35,36,37,41,42,43,61,62,63,64 | cut -d ',' -f 2,4,5,6,8,10 > info.txt

cd $folder
./script.exp

[root@justin]# crontab -l | grep generate
#generate and scp the info.txt to b for testing
30 * * * * sh /var/www/data/generate_mysql_info.sh >> /var/www/data/generate_mysql_info.log 2>&1

傳輸到64之後,然後呼叫mysqlimport匯入mysql
欄位中包含中文,資料庫採用utf8字符集,為避免亂碼,mysql建表語句後面加上 DEFAULT CHARSET=utf8
[root@db market]# more import_into_mysql.sh
#!/bin/bash
cd /var/lib/mysql/market
mysqlimport --user=root --password=******* --fields-enclosed-by='"' --fields-terminated-by=',' --default-character-set='utf8'  market info.txt  

[root@db market]# crontab -l
#import the info.txt into market.info
50 * * * * sh /var/lib/mysql/market/import_into_mysql.sh >> /var/lib/mysql/market/import_into_mysql.log 2>&1
至此job完成

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-694353/,如需轉載,請註明出處,否則將追究法律責任。

相關文章