MySQL
mysqldumpを使ったバックアップ
サーチ…
構文
- mysqldump -u [ユーザ名] -p [パスワード] [その他のオプション] db_name> dumpFileName.sql ///単一のデータベースをバックアップするには
- mysqldump -u [ユーザ名] -p [パスワード] [その他のオプション] db_name [tbl_name1 tbl_name2 tbl_name2 ...]> dumpFileName.sql /// 1つ以上のテーブルをバックアップする
- mysqldump -u [ユーザ名] -p [パスワード] [その他のオプション] --databases db_name1 db_name2 db_name3 ...> dumpFileName.sql /// 1つ以上の完全なデータベースをバックアップする
- mysqldump -u [ユーザ名] -p [パスワード] [その他のオプション] --all-databases> dumpFileName.sql /// MySQLサーバ全体をバックアップする
パラメーター
オプション | 効果 |
---|---|
- | #サーバログインオプション |
-h (-- --host ) | 接続先のホスト(IPアドレスまたはホスト名)。デフォルトはlocalhost ( 127.0.0.1 )です。例: -h localhost |
-u (-- --user ) | MySQLユーザー |
-p (-- --password ) | MySQLパスワード。 重要 -p を使用する場合、オプションとパスワードの間にスペースを入れてはいけません。例: -pMyPassword |
- | #ダンプオプション |
--add-drop-database | 各CREATE DATABASE 文の前にDROP DATABASE 文を追加します。サーバー内のデータベースを置換する場合に便利です。 |
--add-drop-table | 各CREATE TABLE ステートメントの前にDROP TABLE ステートメントを追加してください。サーバのテーブルを置き換える場合に便利です。 |
--no-create-db | ダンプ内のCREATE DATABASE 文を非表示にします。これは、ダンプしているデータベースが、ダンプをロードするサーバにすでに存在していることを確信している場合に便利です。 |
-t (-- --no-create-info ) | ダンプ内のすべてのCREATE TABLE ステートメントを抑制します。これは、テーブルのデータだけをダンプし、ダンプファイルを使用して別のデータベース/サーバの同一のテーブルにデータを入れる場合に便利です。 |
-d (-- --no-data ) | テーブル情報を書き込まないでください。これは、 CREATE TABLE ステートメントだけをダンプします。 「テンプレート」データベースの作成に役立ちます |
-R ( - --routines ) | ダンプにストアドプロシージャ/関数をインクルードします。 |
-K (-- --disable-keys ) | データを挿入する前に各テーブルのキーを無効にし、データを挿入した後にキーを有効にします。これにより、一意ではないインデックスを持つMyISAMテーブルでのみ挿入が高速化されます。 |
備考
mysqldump
操作の出力は、生成するために使用されたバージョンのMySQLユーティリティと互換性のあるシーケンシャルなSQL文を含む軽くコメントされたファイルです(以前のバージョンとの互換性に注意を払っていますが、将来の保証はありません)。したがって、 mysqldump
データベースの復元は、それらの文の実行を含みます。一般に、このファイル
-
DROP
初の指定されたテーブルまたはビュー - そのテーブルまたはビューを
CREATE
- データでダンプされたテーブル(
--no-data
オプションなし)では、- テーブルを
LOCK
する - 1つの文で元の表のすべての行を
INSERT
- テーブルを
-
UNLOCK TABLES
- 他のすべてのテーブルとビューについて上記を繰り返します
-
DROP
sが最初のルーチンが含ま -
CREATE
そのルーチン秒 - 他のすべてのルーチンで同じことを繰り返す
各テーブルのCREATE
前にDROP
存在するということは、スキーマが存在する場合、スキーマが空であるかどうかにかかわらず、リストアのためにmysqldump
ファイルを使用すると、そこにデータが移入または上書きされることを意味します。
データベースまたはテーブルのバックアップを作成する
データベース全体のスナップショットを作成する:
mysqldump [options] db_name > filename.sql
複数のデータベースのスナップショットを作成する:
mysqldump [options] --databases db_name1 db_name2 ... > filename.sql
mysqldump [options] --all-databases > filename.sql
1つまたは複数のテーブルのスナップショットを作成する:
mysqldump [options] db_name table_name... > filename.sql
1つ以上のテーブルを除いたスナップショットを作成します。
mysqldump [options] db_name --ignore-table=tbl1 --ignore-table=tbl2 ... > filename.sql
ファイル拡張子.sql
は完全にスタイルの問題です。任意の拡張機能が動作します。
ユーザー名とパスワードの指定
> mysqldump -u username -p [other options]
Enter password:
コマンドラインでパスワードを指定する必要がある場合(スクリプトなど)、- -p
オプションの後ろにスペースを入れずに追加できます。
> mysqldump -u username -ppassword [other options]
パスワードにスペースや特殊文字が含まれている場合は、シェル/システムに応じてエスケープを使用してください。
オプションで、拡張形式は次のとおりです。
> mysqldump --user=username --password=password [other options]
(コマンド行でのパスワードの明示は、セキュリティ上の理由から推奨されていません。)
データベースまたはテーブルのバックアップを復元する
mysql [options] db_name < filename.sql
ご了承ください:
-
db_name
は既存のデータベースである必要があります。 - 認証されたユーザは、
filename.sql
内のすべてのコマンドを実行するのに十分な特権を持っていfilename.sql
。 - ファイル拡張子
.sql
は完全にスタイルの問題です。任意の拡張機能が動作します。 - ダンプするテーブル名を指定することはできますが、ロードするテーブル名は指定できません。これは
filename.sql
内で行う必要がありfilename.sql
。
あるいは、 MySQLコマンドラインツールで、sourceコマンドを使用してリストアする(または他のスクリプトを実行する)ことができます:
source filename.sql
または
\. filename.sql
圧縮されたリモートサーバからのmysqldump
高速転送のためにワイヤ上で圧縮を使用するために、通過--compress
オプションmysqldump
。例:
mysqldump -h db.example.com -u username -p --compress dbname > dbname.sql
重要: ソース dbをロックしたくない場合は、-- --lock-tables=false
も含める必要があり--lock-tables=false
。しかし、そのように内部的に一貫したdbイメージを得ることはできません。
ファイルを圧縮して保存するには、 gzip
パイプすることもできます。
mysqldump -h db.example.com -u username -p --compress dbname | gzip --stdout > dbname.sql.gz
解凍せずにgzipされたmysqldumpファイルを復元する
gunzip -c dbname.sql.gz | mysql dbname -u username -p
注: -c
はstdoutに出力を書き込むことを意味します。
圧縮してAmazon S3に直接バックアップ
大規模なMySqlインストールを完全にバックアップし、十分なローカルストレージがない場合は、Amazon S3バケットに直接ダンプして圧縮することができます。コマンドの一部としてDBパスワードを使用せずにこれを行うのもよい方法です:
mysqldump -u root -p --host=localhost --opt --skip-lock-tables --single-transaction \
--verbose --hex-blob --routines --triggers --all-databases |
gzip -9 | s3cmd put - s3://s3-bucket/db-server-name.sql.gz
パスワードの入力を求めるプロンプトが表示され、その後にバックアップが開始されます。
あるMySQLサーバから別のMySQLサーバへデータを転送する
あるサーバーから別のサーバーにデータベースをコピーする必要がある場合は、次の2つの方法があります。
オプション1:
- ダンプファイルをソースサーバーに格納する
- ダンプファイルをコピー先のサーバーにコピーする
- ダンプファイルをターゲットサーバーにロードする
ソースサーバー上で:
mysqldump [options] > dump.sql
宛先サーバーで、ダンプ・ファイルをコピーして次のコマンドを実行します。
mysql [options] < dump.sql
オプション2:
接続先サーバーがホストサーバーに接続できる場合は、パイプラインを使用してデータベースをあるサーバーから別のサーバーにコピーできます。
移行先サーバーで
mysqldump [options to connect to the source server] | mysql [options]
同様に、スクリプトは送信元サーバー上で実行され、送信先にプッシュされます。いずれの場合も、オプション1よりもはるかに高速である可能性が高い。
ストアドプロシージャと関数を使用したバックアップデータベース
デフォルトではストアドプロシージャと関数によって、またはmysqldump
によって生成されない場合は、パラメータ--routines
(または-R
)を追加する必要があります:
mysqldump -u username -p -R db_name > dump.sql
--routines
を使用する--routines
、作成と変更のタイムスタンプは維持されず、代わりにmysql.proc
の内容をダンプして再--routines
する必要がありmysql.proc
。