1. 程式人生 > >通過shell指令碼 動態批量匯出mysql 資料

通過shell指令碼 動態批量匯出mysql 資料

一般mysql匯出資料會使用select into outfile  匯出,這種方式只有在命令列模式下才能把檔案生成 到本地,如果通過儲存過程執行,檔案會生成到mysql資料庫所在的主機上。

這個時候如果你需要動態配置查詢條件來匯出檔案,就會變得很麻煩。這種情況下,可以使用shell指令碼來解決這個問題 ,具體shell指令碼如下:

####MYSQL資料庫賬號
MYSQL_USER=root
MYSQL_PWD=****
MYSQL_NAME=mtg
MYSQL_HOST=XXX.XXX.XXX.XXX
MYSQL_PORT=3306

function exp_mysql_data()
{
#statement="select * from member;"
statement=$1
mysql -u${MYSQL_USER} -p${MYSQL_PWD} -P${MYSQL_PORT} -h${MYSQL_HOST} -D${MYSQL_NAME} >1.log << EOF
set character_set_client = utf8;     
set character_set_results = utf8;    
set character_set_connection = utf8; 
$statement
EOF

#cat the 1.log file and convert it to csv file
cat 1.log | while read line
do
echo $line | tr " " ","
#done > /exp.csv
done > $2
rm 1.log	
}

通過呼叫函式時傳入的查詢語句和 匯出檔名,輕鬆批量動態匯出資料檔案。

另附shell 指令碼下 執行sql語句塊的 程式碼示例

function excute_mysql()
{
mysql -u${MYSQL_USER} -p${MYSQL_PWD} -P${MYSQL_PORT} -h${MYSQL_HOST} -D${MYSQL_NAME} <<!

  delete from cdr_table where yearmonth= ${_INSERT_MONTH};
  -- 這是註釋
  update cdr_table a set file_name = concat(yearmonth,'_',CUST_ID,'.tar.gz');
  update cdr_table a set member_id = '0';
  update cdr_table a set file_path = 'cdr_download/';
  
  commit;
!
}

當然 感嘆號內 包住的 文字可以通過引數傳進來,將函式打包成公共 函式。

此外在這個範圍內還能使用mysql 的註釋 --