萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 數據導入導出實戰指南:mysqldump 與 mysql 命令詳解

前言

網站遷移或備份恢復時,MySQL 數據導入導出是核心操作。小數據量可用 phpMyAdmin,但大數據庫(超過 PHP 上傳限制、執行時間限制)必須使用命令行工具 mysqldump 導出與 mysql 導入,配合 SSH 與 wget 傳輸,效率極高。本文整理常用場景與參數,供快速查閱。

一、數據導出

基本語法

mysqldump --add-drop-table -h host -u user -p dbname > dbname.sql
  • -h:遠程主機,本機可省略
  • --add-drop-table:導出前加 DROP TABLE,便於覆蓋導入
  • 輸入密碼後,SQL 文件生成於當前目錄

常見場景範例

場景命令範例
全庫備份(含存儲過程、觸發器、鎖表、字符集)
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 \
  --routines --default-character-set=utf8 \
  --lock-all-tables --add-drop-database -A > db.all.sql
指定庫備份(如 mysql 系統庫)
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 \
  --routines --default-character-set=utf8 \
  --databases mysql > db.sql
指定表備份(如 mysql.user)
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 \
  --routines --default-character-set=utf8 \
  --tables mysql user > db.table.sql
僅導出數據(帶 WHERE 條件過濾)
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 \
  --routines --default-character-set=utf8 \
  --no-create-db --no-create-info \
  --tables mysql user --where="host='localhost'" > db.table.sql
僅導出表結構(無數據)
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 \
  --routines --default-character-set=utf8 \
  --no-data --databases mysql > db.nodata.sql
導出查詢結果為 TSV(製表符分隔)
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 \
  --default-character-set=utf8 --skip-column-names -B \
  -e 'select user,host,password from mysql.user;' > mysql_user.txt
導出查詢結果為 CSV(逗號分隔,寫入服務器本地)
# 進入 MySQL 交互模式
SELECT user,host,password FROM mysql.user
INTO OUTFILE '/tmp/mysql_user.csv'
FIELDS TERMINATED BY ',';

二、數據導入

基本語法

mysql -h host -u user -p dbname < dbname.sql
  • 大數據量導入比 phpMyAdmin 快數十倍
  • 本機導入可省略 -h

常見場景範例

場景命令範例
全量恢復(含 mysql 系統庫,需執行 FLUSH PRIVILEGES)
# 方法一:管道導入
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 < db.all.sql

# 方法二:source 命令(需絕對路徑)
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
mysql> source /tmp/db.all.sql;
恢復指定庫/表
# 管道
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 mysql < db.table.sql

# source
mysql> use mysql;
mysql> source /tmp/db.table.sql;
導入服務器端 TSV 文件(需 FILE 權限)
mysql> use mysql;
mysql> LOAD DATA INFILE '/tmp/mysql_user.txt' INTO TABLE user;
導入服務器端 CSV 文件
mysql> use mysql;
mysql> LOAD DATA INFILE '/tmp/mysql_user.csv' INTO TABLE user FIELDS TERMINATED BY ',';
導入客戶端本地 TSV/CSV(LOCAL 關鍵字)
mysql> use mysql;
# TSV
mysql> LOAD DATA LOCAL INFILE '/tmp/mysql_user.txt' INTO TABLE user;
# CSV
mysql> LOAD DATA LOCAL INFILE '/tmp/mysql_user.csv' INTO TABLE user FIELDS TERMINATED BY ',';

三、Linux 下傳統備份與還原速查

# 1. 進入數據目錄(視安裝路徑調整)
cd /var/lib/mysql

# 2. 備份單庫
mysqldump -u root -p voice > voice.sql

# 3. 還原 - 法一:進入交互模式
mysql -u root -p
mysql> use voice;
mysql> source voice.sql;

# 4. 還原 - 法二:管道直接導入
mysql -u root -p voice < voice.sql

小結

  • 導出靈活組合 --routines、--default-character-set、--lock-all-tables、--no-data、--where 等參數應對各種需求。
  • 導入優先使用管道重定向,大文件配合 source 或 LOAD DATA。
  • 遷移前務必確認字符集一致,避免亂碼。
copyright © 萬盛學電腦網 all rights reserved