MySQLデータベースのバックアップといえば「mysqldump」コマンドが定番です。
サーバーのトラブルや移行作業に備えて、mysqldumpの使い方をしっかりと理解しておくことは、インフラや開発に携わるエンジニアにとって必須の知識といえるでしょう。
本記事では、mysqldumpの基本的な使い方から便利なオプション、復元方法、注意点までを網羅的に解説します。
MySQL初心者の方にもわかりやすいように、実行例やコマンドの意味も丁寧に紹介していきます。
mysqldumpとは?役割と基本機能の理解
mysqldump
は、MySQLに付属するコマンドラインツールで、データベースの内容をSQL形式でエクスポート(書き出し)するために使用されます。
エクスポートされたファイルは、同じMySQL環境または別のサーバーにインポート(復元)することで、データベースを再構築できます。
用途としては主に以下のような場面で使われます。
- サーバー障害に備えたバックアップ
- サーバーやホスティング移行時のデータ移行
- バージョンアップ前のバックアップ取得
- テスト環境へのデータコピー
基本的なmysqldumpの使い方
mysqldumpは非常にシンプルに使えます。以下は最も基本的な使い方の一例です。
mysqldump -u ユーザー名 -p データベース名 > backup.sql
各オプションの意味
-u
:MySQLユーザー名を指定-p
:パスワード入力を促す(実行後に入力)データベース名
:バックアップ対象のDB名> backup.sql
:エクスポート先ファイルを指定
特定のテーブルだけをダンプする
特定のテーブルだけバックアップしたい場合は、テーブル名を指定します。
mysqldump -u ユーザー名 -p データベース名 テーブル1 テーブル2 > table_backup.sql
たとえば、users
とorders
テーブルだけをバックアップしたい場合はこのようになります。
複数のデータベースをバックアップする方法
複数のDBを1つのファイルにまとめてバックアップするには、--databases
オプションを使います。
mysqldump -u ユーザー名 -p --databases db1 db2 db3 > multi_backup.sql
MySQL全体をバックアップする(すべてのDB)
MySQLサーバー上のすべてのデータベースをバックアップするには、--all-databases
オプションを使用します。
mysqldump -u ユーザー名 -p --all-databases > all_backup.sql
ストアドプロシージャやトリガーも含めるには
MySQLにはストアドプロシージャやトリガーが含まれている場合があります。
これらもバックアップしたいときは以下のオプションをつけます。
mysqldump -u ユーザー名 -p --routines --triggers データベース名 > full_backup.sql
バックアップファイルをgzip圧縮する
バックアップファイルのサイズが大きくなる場合、gzipで圧縮すると効率的です。
mysqldump -u ユーザー名 -p データベース名 | gzip > backup.sql.gz
gunzip < backup.sql.gz | mysql -u ユーザー名 -p データベース名
バックアップの復元方法(インポート)
エクスポートしたSQLファイルを使って復元するには、以下のようにします。
mysql -u ユーザー名 -p データベース名 < backup.sql
復元先のデータベースは事前に作成しておく必要があります。
以下のようにして作成します。
mysql -u ユーザー名 -p
CREATE DATABASE データベース名;
EXIT;
自動バックアップのスクリプト例(cron対応)
日次で自動バックアップを取りたい場合は、以下のようなスクリプトを作ってcronで定期実行できます。
#!/bin/bash
DATE=$(date +%Y-%m-%d)
USER="your_user"
PASSWORD="your_password"
DBNAME="your_database"
BACKUP_DIR="/var/backups/mysql"
mkdir -p $BACKUP_DIR
mysqldump -u $USER -p$PASSWORD $DBNAME | gzip > $BACKUP_DIR/${DBNAME}_$DATE.sql.gz
cronで毎日深夜1時に実行したい場合:
0 1 * * * /path/to/backup.sh
mysqldumpを使う際の注意点
- ロックに注意:mysqldumpは
--single-transaction
を付けないとテーブルをロックします(InnoDB以外) - パスワードを平文で使わない:スクリプトに埋め込むときは
.my.cnf
に設定するとセキュアです - mysqldumpのバージョンとMySQLサーバーの互換性に注意
まとめ:mysqldumpはシンプルで強力なバックアップツール
mysqldumpはMySQLを扱う現場で非常に多く使われているツールです。
バックアップも復元も、基本的なコマンドを押さえておけば安心して扱えます。
トラブルが起きてからでは遅いので、日頃からmysqldumpでバックアップを取る習慣をつけておきましょう。
また、バックアップ後は定期的に復元テストも行うことで、確実な運用につながります。