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 -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 -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進行相應的轉化,最終解決了問題,但願對須要的人有所幫助。