mysqldump は、MySQL/MariaDB のデータベースやテーブルを SQL 形式(CREATE TABLE と INSERT 文)でエクスポートするコマンドです。
実務では、定期バックアップ、移行、特定テーブルだけのエクスポート/インポート、スキーマだけの出力などに使います。
構文(Syntax)
# 基本(対話的にパスワード入力推奨)
mysqldump -h HOST -P PORT -u USER -p [OPTIONS] DB [TABLE ...] > dump.sql
# 複数DB / すべてのDB
mysqldump [接続オプション] --databases DB1 DB2 ... > dump.sql
mysqldump [接続オプション] --all-databases > alldb.sql
# スキーマのみ / データのみ
mysqldump [接続オプション] --no-data DB [TABLE ...] > schema.sql
mysqldump [接続オプション] --no-create-info DB [TABLE ...] > data.sql
# 一貫性スナップショット(InnoDB)でのオンラインダンプ
mysqldump [接続オプション] --single-transaction [--quick] DB > dump.sql
- パスワードは
-pのみ指定し、標準入力で入力するのが安全です。 - 認証情報は
--login-path(mysql_config_editor)や--defaults-extra-fileでの利用が推奨です。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-h HOST -P PORT -u USER -p | 接続先と認証。-p はプロンプト入力 | mysqldump -h 127.0.0.1 -u backup -p DB > dump.sql |
--databases DB... | 複数 DB を 1 つのファイルに(各DBの CREATE DATABASE を含む) | mysqldump -u root -p --databases app test > dbs.sql |
--all-databases | すべての DB をダンプ | mysqldump -u root -p --all-databases > full.sql |
--single-transaction | InnoDB をロックせず整合性スナップショットでダンプ(長時間読取向き) | mysqldump --single-transaction DB > dump.sql |
--quick | 結果を逐次出力(クライアント側メモリ節約) | mysqldump --single-transaction --quick DB > dump.sql |
--lock-tables / --skip-lock-tables | テーブルを読み取りロック/ロックしない(--single-transactionとは併用不可) | mysqldump --lock-tables DB > dump.sql |
--routines / --events / --triggers | ストアドルーチン/イベント/トリガを含める(トリガは通常既定で含まれる) | mysqldump --routines --events DB > dump.sql |
--no-data / --no-create-info | スキーマのみ/データのみ | mysqldump --no-data DB > schema.sql |
--where="条件" | 条件でデータを絞り込み | mysqldump DB orders --where="created_at>=CURDATE()" > today.sql |
--ignore-table=DB.TBL | 指定テーブルを除外(複数指定可) | mysqldump DB --ignore-table=DB.logs > dump.sql |
| `–set-gtid-purged=OFF | ON | AUTO` |
| `–master-data[=1 | 2]` | バイナリログ座標をコメント/SQLで埋め込む(レプリセットアップ) |
--hex-blob | BLOB/TEXT を 16 進で出力(文字化け回避) | mysqldump --hex-blob DB > dump.sql |
--default-character-set=utf8mb4 | クライアント文字コード | mysqldump --default-character-set=utf8mb4 DB > dump.sql |
--order-by-primary | 主キー順で出力(復元性能/再現性向上) | mysqldump --order-by-primary DB > dump.sql |
--column-statistics=0 | 互換性のため列統計の出力を無効化(古いサーバ/MariaDB向け) | mysqldump --column-statistics=0 DB > dump.sql |
--result-file=FILE | リダイレクトせずに直接ファイルへ | mysqldump DB --result-file=./dump.sql |
--tab=DIR | DIR に TSV(データ) と .sql(定義) を出力 | mysqldump --tab=/tmp/out DB TABLE |
メモ:ネットワーク圧縮は
--compress(転送圧縮)。出力の圧縮はgzipなど外部コマンドで行います。
実行例
1) 単一データベースを一貫性スナップショットでバックアップ(推奨)
説明: InnoDB のオンラインバックアップに適した方法です。
コマンド:
mysqldump -h 127.0.0.1 -u backup -p \
--single-transaction --quick --routines --events \
--default-character-set=utf8mb4 shop > shop_$(date +%F).sql
2) 構造だけ/データだけを分けて出力
説明: スキーマ移行や後続のロード最適化に。
コマンド:
# スキーマのみ
mysqldump -u root -p --no-data shop > schema.sql
# データのみ
mysqldump -u root -p --no-create-info shop > data.sql
3) 条件付きで一部のデータだけを抽出
説明: 今日分の注文だけを抽出します。
コマンド:
mysqldump --login-path=report shop orders \
--where="created_at >= CURDATE()" > orders_today.sql
4) すべてのDBを丸ごと取得して圧縮保存
説明: フルバックアップを日付付きで保存します。
コマンド:
mysqldump --login-path=backup --all-databases \
--single-transaction --triggers --routines --events \
| gzip > full_$(date +%F).sql.gz
5) エラー例:権限不足で --master-data を使用
説明: バイナリログ座標を含めるには RELOAD, LOCK TABLES などが必要。
コマンド:
mysqldump -u user -p --master-data=2 shop > dump.sql
出力例(例):
mysqldump: Got error: 1227: Access denied; you need (at least one of) the SUPER privilege(s) ...
対処: 必要権限を付与、または --single-transaction のみで取得。
関連コマンド
mysql: ダンプの復元(mysql < dump.sql)や確認に使用。mysqlpump: 並列ダンプ/復元に対応した MySQL 公式の別ツール。mydumper/myloader: 高速並列ダンプ/ロードのサードパーティ。xtrabackup(物理バックアップ): Percona のホットバックアップツール(InnoDB)。gzip/zstd: ダンプの圧縮保存。
備考
- 一貫性: InnoDB 前提なら
--single-transactionを使うのが基本。MyISAM を含む場合は整合性のため--lock-tables等が必要。両者は併用不可。 - 大規模データ:
--quick(逐次フェッチ)、--hex-blob(バイナリ安全)、--order-by-primary(復元のインデックス効率)を検討。 - 認証情報の扱い: コマンドラインにパスワードを直接書かず、
--login-path(mysql_config_editor)または--defaults-extra-file=/path/secret.cnfを利用。 - 互換性: MySQL 8 系クライアントで MariaDB/古いサーバへ接続する場合は
--column-statistics=0を付与するとエラーを回避できることがあります。 - 復元の注意: ダンプは 論理バックアップ。大容量では復元に時間がかかります。重要システムでは物理バックアップとの併用を。
- トリガ/イベント/ルーチン: トリガは通常デフォルトで含まれます。ストアドルーチンやイベントは
--routines/--eventsを明示。 - 文字コード: 文字化け防止に
--default-character-set=utf8mb4を明示し、復元側でも適切なcharacter_set_serverを確認。
参考
- MySQL 公式: mysqldump — A Database Backup Program
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html - MySQL 公式: Option Files(
--defaults-extra-fileなど)
https://dev.mysql.com/doc/refman/8.0/en/option-files.html - MySQL 公式:
mysql_config_editor(--login-path)
https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html - MariaDB KB: mysqldump(MariaDB での挙動・相違点)
https://mariadb.com/kb/en/mysqldump/ - manページ(Ubuntu)
https://manpages.ubuntu.com/manpages/jammy/en/man1/mysqldump.1.html

コメント