通過shell指令碼 動態批量匯出mysql 資料
阿新 • • 發佈:2019-02-05
一般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 的註釋 --