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 - 他のすべてのテーブルとビューについて上記を繰り返します
-
DROPsが最初のルーチンが含ま -
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 。