你我都會遇到的需求:如何匯出MySQL中的資料~ 簡單!實用!

賜我白日夢發表於2022-02-04

你我都有的需求

日常的工作中難免有需求分析想把資料庫中的資料匯出來分析,注意只是將資料匯出來,而不是(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、資料庫中介軟體視訊課程配套文件

相關文章