首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 命令行備份與還原數據庫完整指南

     編輯:MySQL 資料庫相關知識

備份工具:mysqldump

官方邏輯備份工具,輸出 SQL 文本文件,跨版本、跨平台遷移首選。

常用備份命令

場景命令說明
單庫備份mysqldump -u root -p game > game_backup.sql交互式輸入密碼,輸出含建表+插入語句
全庫備份mysqldump -u root -p --all-databases > all_backup.sql包含 mysql 系統庫,遷移實例適用
僅結構不數據mysqldump -u root -p -d game > game_schema.sql-d / --no-data
僅數據不結構mysqldump -u root -p -t game > game_data.sql-t / --no-create-info
壓縮備份mysqldump -u root -p game | gzip > game_backup.sql.gz管道壓縮,節省 70%+ 空間
指定表備份mysqldump -u root -p game user order > game_core.sql表名空格分隔
遠程備份mysqldump -h 10.0.0.1 -u root -p game > game_backup.sql-h 指定主機

生產環境必加參數 (一致性與效能)

mysqldump -u root -p \
  --single-transaction \      # InnoDB 熱備份核心,不加鎖,基於 MVCC 一致性視圖
  --quick \                   # 不緩存結果集,逐行輸出,防 OOM
  --master-data=2 \           # 記錄 binlog 位點 (註釋形式),從庫搭建必備
  --hex-blob \                # 二進制列 (BLOB/BINARY) 導出為 0x... 十六進制,防編碼問題
  --routines --triggers \     # 包含存儲過程/觸發器/事件
  --set-gtid-purged=OFF \     # 避免 GTID 污染目標實例
  game > game_backup.sql

還原方案

方案一:mysql 命令管道 (中小文件 < 1GB)

# 建庫 (若備份文件無 CREATE DATABASE)
mysql -u root -p -e "CREATE DATABASE game CHARSET utf8mb4;"

# 還原
mysql -u root -p game < game_backup.sql

方案二:source 命令 (大文件、需顯示進度)

mysql -u root -p game
mysql> SET NAMES utf8mb4;
mysql> SOURCE /path/to/game_backup.sql;

優點:在 MySQL 客戶端內部執行,網絡中斷不影響,可見執行進度。

方案三:並行還原 (極大文件,需工具支援)

  • mydumper/myloader:多線程導出導入,效能提升 5-10 倍。
  • 將大 SQL 拆分為多個表級文件,GNU Parallel 並行導入。

進階場景:異構遷移與增量同步

場景方案
MySQL 5.7 → 8.0 升級mysqldump --column-statistics=0 (關閉統計信息導出) + mysql_upgrade
跨版本/引擎遷移mysqldump --compatible=mysql40/ansi + 手工調整 SQL_MODE
增量備份二進制日志 + mysqlbinlog --start-position/--stop-position
庫表重命名遷移sed 替換 SQL 文件中庫表名 + 還原

避坑清單

  1. 字符集陷阱:備份/還原全鏈路指定 --default-character-set=utf8mb4,防止亂碼。
  2. 權限不足:備份用戶需 SELECT, LOCK TABLES, SHOW VIEW, TRIGGER, PROCESS, RELOAD 權限。
  3. --single-transaction 僅對 InnoDB 有效,MyISAM 仍會加表鎖。
  4. 大事務長時間運行可能導致 Undo Log 膨脹,監控 History list length。
  5. 還原前關閉 foreign_key_checks=0 unique_checks=0 autocommit=0 加速,還原後重開。

總結

mysqldump 是 MySQL 備份的「瑞士軍刀」。掌握核心參數組合 (--single-transaction --quick --master-data=2 --hex-blob),配合壓縮、並行工具,可覆蓋從開發環境到 TB 級生產庫的全場景備份還原需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved