數據遷移的幾種方式 - MySQL數據庫

寫在前面:博主是一只經過實戰開發歷練後投身培訓事業的“小山豬”,暱稱取自動畫片《獅子王》中的“彭彭”,總是以樂觀、積極的心態對待周邊的事物。本人的技術路線從Java全棧工程師一路奔向大數據開發、數據挖掘領域,如今終有小成,願將昔日所獲與大家交流一二,希望對學習路上的你有所助益。同時,博主也想通過此次嘗試打造一個完善的技術圖書館,任何與文章技術點有關的異常、錯誤、注意事項均會在末尾列出,歡迎大家通過各種方式提供素材。

  • 對於文章中出現的任何錯誤請大家批評指出,一定及時修改。
  • 有任何想要討論和學習的問題可聯繫我:[email protected]
  • 發佈文章的風格因專欄而異,均自成體系,不足之處請大家指正。

數據遷移的幾種方式 - MySQL數據庫

本文關鍵字:MySQL、數據庫、數據遷移、導入、導出


開始和數據庫玩耍以後,我們將一直與SQL和數據打交道。在日常的操作中,我們只需要對指定的數據庫進行操作,執行增刪改查,權限管理等。但有些時候由於項目的升級,或者服務器的更換,我們要將數據從一個地方轉移到另一個地方,準確的說是從一個數據庫服務轉移到另一個數據庫服務中,因爲我們還要繼續使用這些數據。

一、數據遷移

數據遷移的操作在應用運行或數據使用過程中十分常見,這裏爲了讓大家對數據有一個更完善的認識,先給大家科普一下數據的生命週期。

1. 數據的生命週期

在數據使用的過程中,同樣有一個生命週期的貫穿其中:

  • 創建:創建是數據的起點,對應業務中的邏輯,如:用戶註冊、開卡、登記等,此時數據從客觀世界流入到數據庫。
  • 存儲:存儲是數據生存的過程,按照需要被管理,在複雜系統中會有嚴格的訪問權限控制。
  • 使用:使用是數據存在的意義,會在保障數據安全的情況下進行數據的變更與查詢。
  • 共享:在數據的使用過程中,經常會涉及到數據的共享,用於打通各平臺或子系統,合理的共享數據有利於更好的支持和發展業務。
  • 歸檔:一旦數據歸檔,意味着數據的使用頻次將明顯下降,歸檔數據的存儲位置一般是適合長久保存的介質,有需要也會進行加密處理。
  • 銷燬:數據銷燬代表數據生命週期的結束,會將數據完全刪除,但在大數據時代下,數據即財富,通常只會進行歸檔操作。

2. 數據遷移的發生

引述維基百科中對數據遷移的解釋,可以說比較親民也很全面了:

數據遷移(data migration)是指選擇、準備、提取和轉換數據,並將數據從一個計算機存儲系統永久地傳輸到另一個計算機存儲系統的過程。此外,驗證遷移數據的完整性和退役原來舊的數據存儲,也被認爲是整個數據遷移過程的一部分。
數據遷移是任何系統實現、升級或集成的關鍵考慮因素,通常以儘可能自動化的方式執行,從而將人力資源從繁瑣的任務中解放出來。數據遷移有多種原因,包括服務器或存儲設備更換、維護或升級、應用程序遷移、網站集成、災難恢復和數據中心遷移。

如果按照數據的流向來分類,可以將數據遷移分爲數據導出和數據導入兩種操作,這種方式通常會存在一箇中間文件,有可能是sql格式的文件,也有可能是各種格式的數據文件。將這些文件保存在磁盤上,需要時再導入到另外的數據庫中,這種方式雖然會生成文件,但是可以隨時進行數據的恢復。另外一種方式是在原數據庫服務與目標數據庫服務均開啓的情況下,直接進行數據的傳輸。
由於數據文件的格式多種多樣,數據遷移的方式也是多種多樣,所以本文只介紹常用的轉儲SQL運行SQL數據傳輸數據同步

二、數據導出

SQL作爲通用的數據庫語言,可以將數據庫中存在的結構和數據轉換爲完整的SQL語句,包含建表語句以及數據插入語句,並且會根據表間關係自動生成順序合理的SQL。通常情況下,如果我們以導出數據文件的方式進行數據的遷移,SQL格式將成爲首先,甚至可以跨庫進行(由於SQL語法通用,經過處理後可以在不同的DBMS之間遷移數據)。

1. 命令方式

  • 單表數據導出

如果使用單表數據導出,需要提前已經配置了secure-file-priv選項,來指定一個導出目錄,如果未配置則無法導出,導出時會生成一個新的文件。

如果是第一次配置,配置完成後需要重啓MySQL服務。(如果是Windows系統,請使用Windows路徑寫法)

SELECT * FROM `表名` INTO OUTFILE '文件路徑';

在這裏插入圖片描述
單表數據的導出會以數據文件的形式存在,每條數據單獨成行,每列數據以分隔符隔開,可以用記事本直接打開,在進行數據導入的時候也可以直接使用。

同時,我們也可以使用mysqldump工具直接導出爲SQL文件,這其實是個備份工具,支持數據表及數據庫的導入導出操作。

mysqldump -u 用戶名 -p 數據庫名 數據表名 > '文件路徑'


會生成建表語句及數據插入語句。

  • 數據庫轉儲
mysqldump -u 用戶名 -p 數據庫名 > '文件路徑' 


會自動生成數據庫中所有表的建表語句以及數據插入語句。
在這裏插入圖片描述

2. 軟件方式

沒有使用過Navicat工具的小夥伴可以查看這篇文章,插看基本操作:MySQL數據庫界面化工具 - Navicat的常用功能

  • 單表數據導出

使用界面化工具來進行數據導出十分簡單,以Navicat爲例。選擇某一個數據表,右鍵點擊:導出嚮導

根據需要選擇對應的數據文件格式:



在這裏插入圖片描述

通過這種方式導出的sql文件只包含數據,並不包含表結構,如下:

  • 數據庫轉儲

打開數據庫連接後,選擇要導出的數據庫,右鍵:轉儲SQL -> 結構+數據 -> 選擇路徑

三、數據導入

準備好數據文件或SQL文件後,就可以開始進行數據導入的操作,如果SQL文件中不包含建表語句,則需要先建立表結構,保證字段名稱、字段類型(長度)、約束條件等於數據兼容。

1. 命令方式

  • 單表數據導入

對於導出得到的數據文件,需要使用LOAD DATA INFILE語句來插入數據:

load data local infile '文件路徑' into table 表名;


導入完成後會顯示執行狀態,如果表中已經存在相同數據將會跳過。

  • SQL導入

如果在進行數據導出時,直接生成了可執行的SQL文件,則可以使用source命令執行該文件,這種方式同時適用與單表數據導入與整個數據庫導入。

source 文件路徑;


加載sql文件後會顯示每條SQL語句的執行結果,其中Query OK代表成功,rows affected代表當前語句對數據庫的影響行數(0 rows affected對應建表語句和各種指令,只要顯示Query OK就證明執行成功)。

2. 軟件方式

  • 單表數據導入

選擇需要導入數據的數據表,右鍵:導入嚮導








根據需要選擇導入模式,最後點擊開始即可。

  • SQL導入

如果根據已有的SQL文件執行數據導入,可以直接在打開一個數據庫後,新建一個查詢窗口,然後將sql文件中的內容粘貼到窗口中執行就好了,這種方式同時適用於單表數據導入與數據庫整體導入。
除此之外,如果我們想要進行整個數據庫的數據導入,也可以直接右鍵數據庫:運行SQL

四、數據傳輸與數據同步

1. 數據傳輸

使用數據傳輸功能的效果與通過SQL語句進行數據導入類似,一般都會先刪除已存在的相同的表,這一點一定要注意,使得最終結果與數據源相同,完成完整的數據遷移。
點擊工具菜單中的數據傳輸開始使用:




2. 數據同步

數據同步的操作步驟與數據傳輸類似,同樣需要先指定數據源與目標數據庫,區別在於數據同步會先比較兩個數據庫的差異,用戶可以自行決定是否進行同步,主要適用於有相同表結構的數據庫以及主從分佈等場景。




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