序文
多くの場合、mysqlへのバックアップ転送などの操作を実行する必要があります。バックアップする方法はたくさんありますが、そのうちの1つはmysql独自のもの、つまりmysqldumpです。
Mysqldumpコマンド
mysqldumpツールは、mysqlインストールディレクトリの/ binディレクトリにあるmysqlに付属するクライアントアプリケーションです。mysqldumpは論理バックアップに使用され、SQLステートメントのセットを生成できます。これらのステートメントを実行すると、元のデータベースオブジェクト定義とテーブルデータを再生成できます。mysqldumpは、バックアップまたは別のSQLサーバーへの転送のために1つ以上のMySQLデータベースをダンプするためによく使用されます。mysqldumpコマンドは、CSV、その他の区切りテキスト、またはXML形式で出力を生成することもできます。
mysqldumpには、少なくともダンプ表のSELECT権限、ダンプビューのSHOW VIEW権限、およびダンプトリガーのトリガー権限が必要です。--single-transactionオプションを使用しない場合、テーブルはロックされます。 -no-tablespacesオプションは使用されず、(MySQL 5.7.31以降)プロセス権限が使用されます。一部のオプションには、オプションの説明に記載されている他の特権が必要な場合があります。
mysqldumpの利点には、リカバリ前に出力を表示および編集することの利便性と柔軟性が含まれます。開発およびDBA作業のためにデータベースのクローンを作成するか、テストのために既存のデータベースにわずかな変更を加えることができます。ただし、大量のデータをバックアップするための高速でスケーラブルなソリューションではありません。ビッグデータの場合、バックアップ手順にかなりの時間がかかる場合でも、SQLステートメントの再生には挿入、インデックスの作成などのディスクI / Oが含まれるため、データの復元は非常に遅くなります。
大規模なバックアップとリカバリには、物理バックアップの方が適しています。物理バックアップでは、データファイルを元の形式にコピーして、すばやく復元できます。
呼び出し構文
mysqldumpを使用するには、通常、グループまたは複数のテーブルをダンプする、グループまたは複数の完全なデータベースをダンプする、または完全なMySQLサーバーをダンプするという3つの方法があります。
shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
ご使用のバージョンのmysqldumpでサポートされているオプションのリストを表示するには、コマンドmysqldump--helpを使用して表示します。
上記のオプションは通常、データベースのユーザーとパスワードです。通常、2つの方法があります。
方法1:コマンドに手動でパスワードを書き込む必要はありません。-uusername-pを使用します。この方法でコマンドを実行し、パスワードを入力します。
文法:
mysqldump -u 用户名 -p 数据库名 > (目录)导出文件名
例:
[root@localhost mysql-5.7.24]# mysqldump -uroot -p --all-databases > dump.sql
方法2:コマンドに直接パスワードを入力し、-uの後にユーザー名を入力し、-pの後にスペースを入力してからパスワードを入力します
文法:
mysqldump -u用户 -p 密码 数据库名 > (目录)导出文件名
インスタンス
[root@localhost bin]# mysqldump -uroot -proot --all-databases > dbdump.sql
注:-pの後にスペースを入れることはできません。パスワードを直接書き込む必要があります。コマンドを実行すると、次のプロンプトが表示されます。これは、コマンドラインインターフェイスでパスワードを使用するのは安全ではないことを意味します。
mysqldump: [Warning] Using a password on the command line interface can be insecure.
バックアップにmysqldumpを使用する
以下では、mysqldumpを使用してダンプファイルを生成する方法と、ダンプファイルをリロードする方法について説明します。ダンプファイルは、いくつかの方法で使用できます。
1、作为备份,以便在数据丢失的情况下恢复数据。
2、作为设置副本的数据源。
3、作为实验数据的来源:
- 制作可在不更改原始数据的情况下使用的数据库副本。
- 测试潜在的升级不兼容性。
mysqldumpを使用してSQL形式でデータをダンプします
以下では、mysqldumpを使用してSQL形式のダンプファイルを作成する方法について説明します。
デフォルトでは、mysqldumpは情報をSQLステートメントとして標準出力に書き込みます。出力をファイルに保存できます。
shell> mysqldump [arguments] > file_name
すべてのデータベースをダンプするには、次のオプションを指定してmysqldump–all-databasesを呼び出します。
shell> mysqldump --all-databases > dump.sql
特定のデータベースのみをダンプするには、コマンドラインでそれらに名前を付け、-databasesオプションを使用します。
shell> mysqldump --databases db1 db2 db3 > dump.sql
–databasesオプションを使用すると、コマンドラインのすべての名前がデータベース名として扱われます。このオプションを指定しない場合、mysqldumpはデータベース名として名を使用し、テーブル名として次の名前を使用します。
--all-databasesまたは--databasesを使用する場合、mysqldumpは各データベースのダンプ出力の前にCREATEDATABASEおよびUSEステートメントを書き込みます。これにより、ダンプファイルが再ロードされたときに、ダンプファイルが存在しない場合は、各データベースが作成され、デフォルトデータベースとして設定されるため、データベースの内容を元のデータベースと同じデータベースにロードできます。各データベースを作成する前にダンプファイルで各データベースを強制的に削除する場合は、-add-drop-databaseオプションも使用してください。
単一のデータベースをダンプするには、コマンドラインで名前を付けます。
shell> mysqldump --databases test > dump.sql
単一のデータベースの場合、次の--databasesオプションは無視できます。
shell> mysqldump test > dump.sql
前の2つのコマンドの違いは、データベースがない場合、ダンプ出力にCREATEDATABASEまたはUSEステートメントが含まれないことです。これにはいくつかの意味があります。
1、重新加载转储文件时,必须指定默认数据库名称,以便服务器知道要重新加载哪个数据库。
2、对于重新加载,您可以指定与原始名称不同的数据库名称,这使您能够将数据重新加载到不同的数据库中。
3、如果要重新加载的数据库不存在,则必须先创建它。
4、因为输出不包含CREATE DATABASE语句,所以——add-drop-database选项不起作用。如果您使用它,它不会产生DROP DATABASE语句。
データベース内の特定のテーブルのみをダンプするには、コマンドラインでデータベース名の後に名前を付けます。
shell> mysqldump test t1 t3 t7 > dump.sql
テーブルの定義とコンテンツを別々にダンプします
-no-dataオプションは、mysqldumpにテーブルデータをダンプしないように指示します。これにより、ダンプファイルにはテーブル作成ステートメントのみが含まれます。代わりに、–no-create-infoオプションは、mysqldumpにCREATEステートメントを出力しないように指示するため、ダンプファイルにはテーブルデータのみが含まれます。
たとえば、テストデータベースのテーブル定義とデータを別々にダンプするには、次のコマンドを使用します。
shell> mysqldump --no-data test > dump-defs.sql
shell> mysqldump --no-create-info test > dump-data.sql
定義済みダンプの場合、-routinesおよび--eventsオプションを追加すると、ストアドプロシージャとイベント定義を含めることもできます。
shell> mysqldump --no-data --routines --events test > dump-defs.sql
バックアップをSQL形式でリロードします
mysqldumpによって記述されたSQLステートメントを含むダンプファイルをリロードするには、それをmysqlクライアントへの入力として使用します。ダンプファイルがmysqldumpによって--all-databasesまたは--databasesオプションを指定して作成された場合、CREATE DATABASEステートメントとUSEステートメントが含まれ、データをロードするためにデフォルトのデータベースを指定する必要はありません。
例:
shell> mysql < dump.sql
または、mysqlでsourceコマンドを使用します。
mysql> source dump.sql
ファイルがCREATEDATABASEステートメントとUSEステートメントを含まない単一のデータベースダンプである場合は、最初にデータベースを作成してください。
shell> mysqladmin create db1
次に、ダンプファイルをロードするときにデータベース名を指定します。
shell> mysql db1 < dump.sql
あるサーバーから別のサーバーにデータベースをコピーします
サーバー1:
shell> mysqldump --databases db1 > dump.sql
ダンプファイルをサーバー1からサーバー2にコピーします。
サーバー2:
shell> mysql < dump.sql