遠程導出mysql的數據爲csv格式的文件

Mysql自帶數據導出的命令

into outfile(本地導出)

SELECT * FROM server_warning_repaired

into outfile '/tmp/test.csv'

CHARACTER SET gbk                                   

fields terminated by ',' optionally enclosed by '\"';

總體來看,select語句+into outfile+ ‘文件路徑’+ 文件參數mysql

功能:導出數據到服務器本地路徑下的test.csv文件,sql

CHARACTER SET gbk            解決導出文件中文亂碼問題數據庫

相關參數:服務器

·         FIELDS TERMINATED BY '字符串':設置字符串爲字段之間的分隔符,能夠爲單個或多個字符。默認值是「\t」。編輯器

·         FIELDS ENCLOSED BY '字符':設置字符來括住字段的值,只能爲單個字符。默認狀況下不使用任何符號。spa

·         FIELDS OPTIONALLY ENCLOSED BY '字符':設置字符來括住CHAR、VARCHAR和TEXT等字符型字段。默認狀況下不使用任何符號。code

·         FIELDS ESCAPED BY '字符':設置轉義字符,只能爲單個字符。默認值爲「\」。server

·         LINES STARTING BY '字符串':設置每行數據開頭的字符,能夠爲單個或多個字符。默認狀況下不使用任何字符。ip

·         LINES TERMINATED BY '字符串':設置每行數據結尾的字符,能夠爲單個或多個字符。默認值是「\n」。字符串

Mysqldump(本地導出)

mysqldump -h 172.16.81.236 -uusername -ppassword -t -T/tmp/waring.csv nms_db server_warning_unrepaired  --fields-enclosed-by=\" --fields-terminated-by=,

 

因爲mysqldump的實現方法,其根本仍是into outfile,故導出的文件也只能到本地

mysql(遠程導出)

mysql -uusername -ppassword -h 172.16.81.236 –D my_db  --default-character-set=gbk  -e 'select * from server_warning_unrepaired'  | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/file.csv

注:

-u            mysql用戶名 admin

-p              mysql密碼itserver

-h              mysql所在終端ip

-D              所選數據庫nms_db

--default-character-set=gbk       解決中文顯示亂碼問題

-e              ‘select語句’

sed                     在線編輯器,一般用來處理行內容,詳細的用法網上有不少

在這裏會將文件內容轉化爲咱們須要的格式

問題解決

         本次問題,是爲了實現遠程導出mysql表格數據爲csv格式的文件而產生的,最先的解決思路是獲取到mysql的數據後,再自行對相關的數據進行格式轉化,如數據之間添加逗號,換行添加\n之類的操做,可是該方法的實現須要對全部的數據進行遍歷,在數據量較大時,會消耗大量的時間;我在處理5萬條數據的數據的時候,就花費了將近5分鐘的時間,所以將其捨棄。

         後來發現mysql自帶的命令,into outfile,能夠按照須要的文件格式進行導出,實現效率很快,可是產生的文件只會導出到mysql所在的終端上,而想要獲取該文件,還須要該終端的用戶信息,顯示是不合理的,所以捨棄.

         最後,使用了mysql和sed結合的方法,將查出的文件內容使用sed進行相應的轉化,最終解決了問題,但願對須要的人有所幫助。

相關文章
相關標籤/搜索