本文針對window操作系統與mysql8.0的版本。 1.mysql導出sql文件 這裡直接使用mysql提供的mysqlpump工具,以下是mysqlpump說明 mysqlpump客戶實用程式執行邏輯備份,產生一組能夠被執行以再現原始資料庫對象定義和表數據的SQL語句。它轉儲一個或多個MySQ ...
本文針對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
, MEMORY
和MERGE
)。
CONCURRENT:如果使用滿足併發插入條件CONCURRENT
的MyISAM
表指定修飾符 (即,它在中間不包含空閑塊),則其他線程可以在LOAD DATA
執行時從表中檢索數據 。LOAD DATA
即使沒有其他線程同時使用該表,此修飾符也會影響位的性能。
LOCAL:如果LOCAL
指定,則文件由客戶端主機上的客戶端程式讀取併發送到伺服器。該文件可以作為完整路徑名提供,以指定其確切位置。如果以相對路徑名的形式給出,則相對於啟動客戶端程式的目錄解釋名稱。
如果LOCAL
未指定,則文件必須位於伺服器主機上,並由伺服器直接讀取。非LOCAL
載入操作讀取位於伺服器上的文本文件。出於安全原因,此類操作要求您擁有該FILE
許可權。此外,非LOCAL
載入操作受 secure_file_priv
系統變數設置的限制。如果變數值是非空目錄名,則要載入的文件必須位於該目錄中。如果變數值為空(這是不安全的),則文件只需要伺服器可讀。
file_name:文件路徑,在Windows上,將路徑名中的反斜杠指定為正斜杠或加倍反斜杠。
在REPLACE
與IGNORE
輸入行的修飾處理控制複製唯一鍵值的現有行:
-
如果指定
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
字元集轉儲值。實際上,沒有字元集轉換。如果結果集包含多個字元集中的列,則輸出數據文件也將如此,您可能無法正確重新載入文件。