最近一直忙於實驗室的事情,沒有好好更新博客,在抓包的過程中,遇到了很多問題。
因為我常用Wireshark將抓包信息導出為csv文件,這里簡單mark一下將csv文件導入/導出到數據庫的2種方法:
一.簡單,但是稍慢的方法,使用Navicat for MySQL,傻瓜式導入數據庫:
流程如下:
安裝完成並配置好連接后界面如下:
新建數據庫
進入導入向導
選擇導入類型:
然后選擇文件作為數據源,這里是我之前抓好的包,300w+條抓包記錄
這里直接采取默認設置
同樣默認
自己設置了下表明,新建了表
這里是程序根據文件內容進行的猜測,注意要修改下數據類型,並根據需要做相應調整,這里有點不太好,目前只找到了通過方向鍵“下”來添加,沒有其他操作,如果增加的數據記錄沒有填寫,則自動刪除。
我將包的信息縮減到只用我需要的,這樣抓取的信息就從1G銳減到200+M
半小時,300w+個記錄
這慢的,誰用誰知道~~~~
二.使用SQL語句導入csv為表,速度快!
使用SQL語句可以快速實現大量數據導入數據庫的效果。示例如下:
# Windows 中 load data infile '..\\uploads\\test.csv' into table sampleTableName fields terminated by ',' optionally enclosed by '"' escaped by ',' lines terminated by '\r\n' ignore 1 lines; # Linux 中 load data infile '..\\uploads\\test.csv' into table sampleTableName fields terminated by ',' optionally enclosed by '"' escaped by ',' lines terminated by '\n' ignore 1 lines;
解釋:
- load data infile + 文件路徑:這里使用了相對路徑,我的機子上安裝的MySQL在'C:\ProgramData\MySQL\MySQL Server 5.7'中,一般情況下,csv文件中第一行一般是每列屬性的名稱,因此在導入數據庫時應省略第一行
- 句子中sampleTableName應替換為對應的表的名稱
- csv文件中,域一般用逗號分隔,域的字段值一般用一對雙引號包裹,換行一般用‘\r\n’(windows下),因此我發現一般escaped by+逗號與lines terminated by+'\r\n'有對應關系,如果用escaped by """,即引號分隔,則只有將lines terminated by改成'\n'才能導入,並且此時不能ignore 1 lines;
常見錯誤:
Error Code 1290:
我機子上安裝的是MySQL5.7,
MySQL5.7默認運行的狀態是:
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
這是因為需要導入的文件不再MySQL認為的安全文件夾內,因此MySQL拒絕了導入操作。
使用如下語句可看到MySQL當前認為的安全文件夾,將文件放入文件夾內即可
SHOW VARIABLES LIKE 'secure_file_priv';
三、使用SQL語句將數據庫表導出為csv文件:
鑒於Navicat比較容易上手,所以這里只介紹一下如何用SQL語句將數據庫表導出為csv文件:
用select語句選擇需要導出的字段、表,說明其他附加條件(例如用where子句,還可以進行排序),然后說明導出文件的路徑和文件名,注意,如果是MySQL是在 secure-file-priv 選項下運行,則必須將路徑調整為上文說過的
secure-file-priv路徑,如果不知道,就用show variables like查看,否則報錯Error 1209
當然,這樣導出要求導出的文件不存在,否則報錯 Error 1086
示例如下:
select * from newdb2.dataset where vendor = 'xiaomi' order by time into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\test.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
此示例用到了where 子句和order by 排序,應該夠用了
那就這樣~see you~