mysql導出文本文件,加分隔符


從mysql導出,再導入到oracle

#!/bin/sh

cd /u03/tools/machine_info
rm -f data/machine_info.txt

mysql -u用戶名 -p密碼 -h服務器IP -P端口 < select_machine_info.sql|awk -F"\t" ' {printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19)}' >  data/machine_info.txt

sqlldr userid=用戶名/密碼@oracledb control=machine_info.ctl data=machine_info.txt parallel=true direct=true

 

ctl文件模板

options(skip=1)
unrecoverable
load data
characterset utf8
append into table COLLECTION_LOG_tmp
FIELDS TERMINATED BY "," 
TRAILING NULLCOLS
(
  tdbank_imp_date     ,
  worldid             ,
  ip                  ,
  tablenames          ,
  gamesvrid           ,
  dteventtime         date "yyyy-mm-dd hh24:mi:ss",
  vgameappid          ,
  platid              ,
  izoneareaid         ,
  vopenid             ,
  stageid            ,
  stagetype           ,
  stageindexid        ,
  doodadid            ,
  x                   ,
  y                   ,
  z                   ,
  opendoodadresult    ,
  mindeyestate        ,
  toplevel            ,
  originalplayerlevel 
)

 

 

mysql> select * into outfile 'D:/temp/20150410.txt' FIELDS TERMINATED BY ',
' from `2015-04-10`;

 把命令存成sql,在shell里面執行 

mysql -uroot -ppassword < update.sql  

 

a.sql

select DATE_SUB(sysdate(), INTERVAL 1 DAY), * into outfile '\data\player\equip.log' FIELDS TERMINATED BY ';' from `equip` limit 1;

a.sh

cd  /data/player
rm -rf *
mysql -uroot -ppassword < a.sql  
MYDATE=$(date +%Y%m%d)
mv equip.log equip-1-$MYDATE.log

 

 

SELECT INTO…OUTFILE語法:

select * from Table into outfile '/路徑/文件名'
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'

(1)路徑目錄必須有讀寫權限777
(2)文件名必須唯一
(3)fields terminated by ','必須存在,否則打開的文件的列在同一的單元格中出現
(4)我驗證的表結構為gbk的,否則出現亂碼

●  fields子句:在FIELDS子句中有三個亞子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,則這三個亞子句中至少要指定一個。

(1)TERMINATED BY用來指定字段值之間的符號,例如,“TERMINATED BY ','”指定了逗號作為兩個字段值之間的標志。

(2)ENCLOSED BY子句用來指定包裹文件中字符值的符號,例如,“ENCLOSED BY ' " '”表示文件中字符值放在雙引號之間,若加上關鍵字OPTIONALLY表示所有的值都放在雙引號之間。

(3)ESCAPED BY子句用來指定轉義字符,例如,“ESCAPED BY '*'”將“*”指定為轉義字符,取代“\”,如空格將表示為“*N”。

(4) LINES子句:在LINES子句中使用TERMINATED BY指定一行結束的標志,如“LINES TERMINATED BY '?'”表示一行以“?”作為結束標志。

 

 

導出mysql,並執行rsync

#
time=`date +%Y%m%d`
mysql -uroot -p'密碼' -e "show databases;" >/tmp/database.txt
db=`cat /tmp/database.txt |grep _ws|awk -F'[ws_]+' '{print $2}'`
bak_path=/data/player_rsync/
for i in ${db[@]}
do
mkdir /data/player_rsync/$time/
chmod 777 /data/player_rsync/$time/
#mysqldump -uroot -p'密碼' _ws${i}_branch  player_query_data > /data/player_rsync/$time/tw${i}.txt
mysqldump --tab='/data/player_rsync/'$time'/' --fields-terminated-by='|' -h 127.0.0.1 -u root -p'密碼' _ws${i}_branch player_query_data 
mv /data/player_rsync/$time/player_query_data.txt   /data/player_rsync/$time/game_tw${i}.txt
sed -i 's/^/playerquerydata|100'$i'|&/g' /data/player_rsync/$time/game_tw${i}.txt
done
sleep 20

sed -i "s/\\\\|/\&/g"  /data/player_rsync/$time/*.txt
rm -r /data/player_rsync/$time/player_query_data.sql

rsync -vzrtp --progress --password-file=/etc/rsync.passwd /data/player_rsync/ qysql@127.0.0.1::qy_sql


num=`ls /data/player_rsync/|wc -l`


if [[ $num > 5 ]];then
file=`ls /data/player_rsync/|grep $time`
for a in ${file[@]}
do
cd $bak_path
rm -rf $a
done
fi

exit

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM