你我都會遇到的需求:如何導出MySQL中的數據~ 簡單!實用!

你我都有的需求

日常的工作中難免有需求分析想把數據庫中的數據導出來分析,注意只是將數據導出來,而不是(dump)備份數據庫

那本文就跟大家介紹我常用的兩種方式,如下:

方式一:tee

tee的功能是把你與MySQL-Server之間的交互記錄都記錄到你指定的文件中去。

看下的案例:

Step1:按如下的方式同MySQL交互

// tee命令執行之後,你與MySQL之間的所有交流都會被記錄到指定的文件中。
mysql> tee /root/res.txt
Logging to file '/root/res.txt'

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| runoob_tbl     |
+----------------+
1 row in set (0.00 sec)

mysql> select * from runoob_tbl;
+-----------+-----------------------+-----------------------+-----------------+
| runoob_id | runoob_title          | runoob_author         | submission_date |
+-----------+-----------------------+-----------------------+-----------------+
|         3 | 歡迎微信搜索:        | 風一樣的程序員        | 2021-11-18      |
+-----------+-----------------------+-----------------------+-----------------+
1 row in set (0.00 sec)

Step2:退出連接,然後去查看機器上的/etc/root/res.txt

方式二:mysql_use_result

第二種方式如下,在登錄MySQL時指定好用哪個數據庫和要執行的SQL語句,並將SQL的執行結果一股腦重定向到你指定的文件中。

還是上面的例子,對應的命令如下:

mysql -h 127.0.0.1 
		  -P ${端口}  
		  -p ${密碼}   
		  -u ${用戶名}  
		  -D ${數據庫名}   
		  -e"select * from runoob_tbl;" > ./info_100w & 		  

執行完之後,查看結果文件:

這時候有個風險:如果你的SQL要撈出的數據量動輒幾十幾百G,或者TB級別,且依然使用上面的方式拉數據的話,就極有可能打爆內存。因爲默認如上的情況中(使用的是mysql_store_result模式),MySQL是把你查到的數據全部加載進內存,再一股腦返回給你。

解決的方式:添加--quick參數

mysql -h 127.0.0.1 
    -P ${端口}  
    -p ${密碼}   
    -u ${用戶名}  
    -D ${數據庫名} 
      --quick
    -e"select * from runoob_tbl;" > ./info_100w &  

使用這個參數後會開啓mysql_use_result模式,MySQL每讀到一行數據,就會立刻將這行數據返回給客戶端,雖然交互的次數多了點,但是直接解決掉客戶端內存消耗問題。圖片

學廢了沒?


推薦閱讀

一、給研發同學看的面試指南

1、MySQL的修仙之路,圖文談談如何學MySQL、如何進階!

2、數據庫面經,常見的面試題....

3、談談MySQL中基數是什麼?

4、聊聊什麼是慢查?如何監控?如何排查?

5、對Not Null字段插入Null值有啥現象?

6、能談談year、date、datetime、time、timestamp的區別嗎?

7、你有沒有搞混查詢緩存和Buffer Pool?談談看!

8、你知道數據庫緩衝池中的LRU-List嗎?

9、瞭解InnoDB的FreeList嗎?談談看!

10、瞭解Flush-List嗎?順便說一下髒頁的落盤機制!

11、用 11 張圖講清楚,當你CRUD時BufferPool中發生了什麼!以及BufferPool的優化!

12、瞭解 MySQL的表空間 和 數據表嗎?談談看!

13、瞭解 MySQL的數據行嗎?行溢出機制呢?談談看!

14、瞭解MySQL數據頁嗎?說說什麼是頁分裂吧!

15、用一分鐘瞭解fsync這個系統調用

16、簡述undo log、truncate、以及undo log如何幫你回滾事務?

17、我勸!這位年輕人不講MVCC,耗子尾汁!

18、傳說中的MySQL的redo log是什麼?談談看!

19、LSN、Checkpoint?談談MYSQL的崩潰恢復是怎麼回事!

20、MySQL的 bin log有啥用?在哪裏?誰寫的?怎麼配置?

21、bin log有哪些格式?有啥區別?優缺點?線上用哪種格式?

22、刪庫後!除了跑路還能幹嘛?

23、全網最牛X的!MySQL兩階段提交串講!沒有之一!

24、自導自演的數據庫面試現場--談談MySQL的10種文件

25、大型面試現場:一條update sql的執行都經歷了什麼?

26、大型翻車現場:如何實現記錄存在的話就更新,如果記錄不存在的話就插入。

27、如何實現記錄存在的話就更新,如果記錄不存在的話就插入

28、面試現場:說說char和varchar的區別你瞭解多少?

29、沙塵暴也阻擋不了學習的腳步-- 面試官:你竟然不知道MySQL的組提交?

30、聊聊MySQL大insert buffer和change buffer吧

31、一看就懂的MySQL的double write

32、簡述3大範式

33、各種登陸MySQL的方式

34、join聯表的注意點、有哪些聯表查詢方式

35、心裏有點樹

36、心裏有點B樹

37、B+Tree到底是怎麼回事?如何長高的?

38、8分鐘回顧MySQL常見的索引

39、白日夢的Golang的SQL連接池源碼梳理筆記,建議先收藏,再閱讀哦~

40、面試被問如何排查慢查詢(執行計劃)怎麼辦?愣着幹嘛?進來白嫖呀!

41、簡單實用:瞭解後端如何存儲表情包,只需3分鐘......

連載中~,還有15篇文章,公衆號第一時間發佈~

二、MySQL-視頻

P01 如何學MySQL16:01

P02 視頻+圖文串講: MySQL行鎖、Gap鎖、Next-Key-Lock實戰23:07

三、進階MySQL中間件-視頻

P01 開場白-關於白日夢和本套視頻的介紹04:34

P02 單機安裝MySQL實踐06:09

P03 基於binlog+postion搭建MYSQL集羣原理及實戰17:47

P04 基於gtid搭建MYSQL集羣原理及實戰13:34

P05 中間件的介紹及使用09:58

P06 源碼解析中間件啓動流程22:46

P07 源碼解析中間件的權限校驗原理03:47

P08 MySQL協議-Handshake!和中間件握手機制原理11:46

P09 中間件不斷接受處理客戶端SQL源碼解讀05:10

P10 中間件是如何轉發執行你的SQL語句的?13:53

P11 中間的讀寫分離實現原理源碼解讀08:22

P12 白日夢寄語02:33

P13 數據庫中間件視頻課程配套文檔

四、白日夢的雲原生-筆記

1、這一次,讓我在百度告訴你,當你請求www.baidu.com時都發生了什麼?

2、白日夢的DNS筆記

3、白日夢的網絡筆記:iptables、防火牆

4、放點存貨:白日夢的Docker網絡筆記

5、玩轉docker容器編排調度 docker-compose、docker-swarm

6、你還不懂Docker容器間網絡互聯原理嗎?來白嫖啊...... 建議收藏哦

五、白日夢的雲原生-視頻

P01 二十分鐘徹底搞懂Docker網絡!21:46

p02 終於有人講明白了iptables和docker網絡!21:42

44、數據庫中間件視頻課程配套文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章