MySQL數據的導入與導出


本文針對window操作系統與mysql8.0的版本。

1.mysql導出sql文件

這里直接使用mysql提供的mysqlpump工具,以下是mysqlpump說明

mysqlpump客戶實用程序執行邏輯備份,產生一組能夠被執行以再現原始數據庫對象定義和表數據的SQL語句。它轉儲一個或多個MySQL數據庫以備份或傳輸到另一個SQL服務器。

mysqlpump功能包括:

  • 並行處理數據庫和數據庫中的對象,以加速轉儲過程

  • 更好地控制要轉儲的數據庫和數據庫對象(表,存儲程序,用戶帳戶)

  • 將用戶帳戶轉儲為帳戶管理語句(CREATE USER, GRANT)而不是作為插入mysql系統數據庫

  • 創建壓縮輸出的能力

  • 進度指標(值是估計值)

  • 對於轉儲文件重新加載,InnoDB通過在插入行之后添加索引來為表 創建更快的二級索引

mysqlpump至少需要SELECT轉儲表特權,SHOW VIEW轉儲視圖,TRIGGER轉儲觸發器以及未使用LOCK TABLES該 --single-transaction選項的 特權轉儲用戶定義需要系統數據庫SELECT權限mysql某些選項可能需要其他權限,如選項說明中所述。

(1)單個數據庫導出

語法:mysqlpump -h [ip] -P [port] -u [user_name] -p[password] db_name [tbl_name1 tbl_name2 ...] > file_path

(2)多個數據庫導出

語法:mysqlpump -h [ip] -P [port] -u [user_name] -p[password] --databases db_name1 db_name2 ... > file_path

mysqlpump功能很強大還支持多種選項,具體選項可以查看官方文檔

(3)將數據從一個MySQL服務器復制到另一個MySQL服務器

語法:mysqldump -h [ip] -P [port] -u [user_name] -p[password] --opt db_name | mysql -h [ip] -P [port] -u [user_name] -p[password] --compress db_name

--opt:默認情況下啟用此選項 它提供快速轉儲操作並生成轉儲文件,可以快速重新加載到MySQL服務器。 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset是組合的簡寫。

--compress:壓縮客戶端和服務器之間發送的所有信息(如果可能)。從MySQL 8.0.18開始,不推薦使用此選項。它將在未來的MySQL版本中刪除。

 

2.mysql執行sql文件

進入mysql客戶端執行:source file_path 或 \file_path命令。

 

3.mysql導入批量數據

LOAD DATA完整語法:

LOW_PRIORITY:如果使用LOW_PRIORITY修飾符,則LOAD DATA 語句的執行將延遲,直到沒有其他客戶端從表中讀取。這會影響只使用表級鎖只存儲引擎(例如MyISAM, MEMORYMERGE)。

 

CONCURRENT:如果使用滿足並發插入條件CONCURRENTMyISAM指定修飾符 (即,它在中間不包含空閑塊),則其他線程可以在LOAD DATA執行時從表中檢索數據 LOAD DATA即使沒有其他線程同時使用該表,此修飾符也會影響的性能

 

LOCAL:如果LOCAL指定,則文件由客戶端主機上的客戶端程序讀取並發送到服務器。該文件可以作為完整路徑名提供,以指定其確切位置。如果以相對路徑名的形式給出,則相對於啟動客戶端程序的目錄解釋名稱。

如果LOCAL未指定,則文件必須位於服務器主機上,並由服務器直接讀取。LOCAL加載操作讀取位於服務器上的文本文件。出於安全原因,此類操作要求您擁有該FILE 權限。此外,非LOCAL加載操作受 secure_file_priv系統變量設置的限制。如果變量值是非空目錄名,則要加載的文件必須位於該目錄中。如果變量值為空(這是不安全的),則文件只需要服務器可讀。

 

file_name:文件路徑,在Windows上,將路徑名中的反斜杠指定為正斜杠或加倍反斜杠。

 

REPLACEIGNORE 輸入行的修飾處理控制復制唯一鍵值的現有行:

  • 如果指定REPLACE,則輸入行將替換現有行。換句話說,主鍵或唯一索引的值與現有行的值相同。

  • 如果指定IGNORE,則會丟棄復制唯一鍵值上現有行的行。

  • 如果未指定任何修飾符,則行為取決於是否LOCAL指定修飾符。如果沒有LOCAL,則在找到重復鍵值時會發生錯誤,並忽略文本文件的其余部分。使用時LOCAL,默認行為與IGNORE 指定的相同這是因為服務器無法在操作過程中停止傳輸文件。

 

PARTITION:LOAD DATA支持顯式分區選擇,使用PARTITION 帶有一個或多個以逗號分隔的分區,子分區或兩者的名稱列表的選項。使用此選項時,如果文件中的任何行無法插入列表中指定的任何分區或子分區,則語句將失敗,並顯示錯誤“ 找到與給定分區集不匹配的行”。有關更多信息和示例。對於使用使用表鎖的存儲引擎的分區表,例如MyISAM, LOAD DATA無法修剪任何分區鎖。這不適用於使用采用行級鎖定的存儲引擎的表,例如 InnoDB

 

CHARACTER SET:服務器使用character_set_database系統變量指示的字符集 來解釋文件中的信息。 SET NAMES並且設置 character_set_client不影響輸入的解釋。如果輸入文件的內容使用的字符集與默認值不同,通常最好使用該CHARACTER SET子句指定文件的字符集

 

FIELDS:如果指定FIELDS子句,則每個子句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和 ESCAPED BY)也是可選的,但必須至少指定其中一個子句允許這些子句的參數僅包含ASCII字符。

  TERMINATED BY:字段與字段之間的分隔符。

  ENCLOSED BY:包裹字段的字符,僅用於從具有字符串數據類型。

  ESCAPED BY:控制如何讀取或寫入特殊字符,即描述的轉義字符。

 

LINES:

  STARTING BY:如果所有輸入行都有一個您想要忽略的公共前綴,則可以使用跳過前綴和前面的任何內容如果一行不包含前綴,則跳過整行。

  TERMINATED BY:每行與每行之間的分隔符。

 

IGNORE number:該選項可用於忽略文件開頭的行.

 

col_name_or_user_var:默認情況下,如果在LOAD DATA語句末尾沒有提供列列表 ,則輸入行應包含每個表列的字段。如果只想加載某些表的列,請指定列列表。

 

SET子句:每個col_name_or_user_var值都是列名或用戶變量。使用用戶變量,該SET子句使您可以在將結果分配給列之前對其值執行預處理轉換。

 

4.mysql導出批量數據

語法:SELECT [col_name [,col_name] ...] INTO OUTFILE 'file_path' [CHARACTER SET charset_name] 

    [{FIELDS | COLUMNS}

      [TERMINATED BY 'string']

      [[OPTIONALLY] ENCLOSED BY 'char']

      [ESCAPED BY 'char']

    ]

    [LINES

      [STARTING BY 'string']

      [TERMINATED BY 'string']

    ]

     FROM table_name;

SELECT ... INTO OUTFILE語句主要用於讓您快速將表轉儲到服務器計算機上的文本文件中。如果要在服務器主機之外的其他主機上創建生成的文件,通常無法使用, SELECT ... INTO OUTFILE因為無法相對於服務器主機的文件系統寫入文件的路徑。

但是,如果MySQL客戶端軟件安裝在遠程計算機上,則可以使用客戶端命令(例如 在客戶端主機上生成文件)。 mysql -e "SELECT ..." > file_name

如果可以使用服務器文件系統上的網絡映射路徑訪問遠程主機上文件的位置,則還可以在服務器主機以外的其他主機上創建生成的文件。在這種情況下,目標主機上不需要存在 mysql(或其他一些MySQL客戶端程序)。

SELECT ... INTO OUTFILE是補充LOAD DATA列值將寫入轉換為CHARACTER SET 子句中指定的字符集如果不存在此類子句,則使用binary字符集轉儲值實際上,沒有字符集轉換。如果結果集包含多個字符集中的列,則輸出數據文件也將如此,您可能無法正確重新加載文件。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM