データベース管理者とシステム管理者は、MySQL データベースのバックアップを取る必要があり、mysqldump ユーティリティは、データベース全体または単一のオブジェクトをテキスト・ファイルに変換するために使用される最も一般的なツールです。mysqldump ユーティリティがバックアップ・ファイルを作成した後、データをサーバーにリストアしたり、データを別のデータベースに移行したりするために使用できます。
mysqldump とは
mysqldump ツールは、MySQL に含まれるコマンドラインユーティリティで、データベースまたはデータベース内のオブジェクトのサブセットを再構築できる SQL ステートメントのエクスポートに使用します。データベース・オブジェクトとデータのバックアップを作成する場合や、データベースをあるサーバーから別のサーバーに転送する場合に使用できます。管理者は mysqldump を使用して、XML や CSV などの特定の形式にデータをエクスポートできます。
mysqldump を使用して単一のテーブルをバックアップする方法
mysqldump ユーティリティは、データベース内の特定のテーブルのみをエクスポートするために使用できます。例えば、eコマース・データベースから 1 つの顧客テーブルのみをエクスポートする場合を想定します。その後、顧客テーブルのデータを使用してマーケティング・メールを送信できます。mysqldump ユーティリティは、カスタマー・テーブルとそのデータをテキスト・ファイルにエクスポートします。
注記:mysqldump でコマンドを正常に実行するには、データベースへのアクセスに使用するユーザー名に、オブジェクトにアクセスする適切な権限が必要です。アクセスなしでは、コマンドはスキーマ、オブジェクト、またはデータをエクスポートしません。
オブジェクトをテキスト・ファイルにエクスポートするには、データベース名とテーブル名を指定する必要があります。正しいテーブル名を持っていることを確認する場合は、まず、使用するデータベースで認証されていることを確認してください。次に、MySQL コマンド・ラインまたは Workbench アプリケーションで次の SQL コマンドを実行します。
SHOW TABLES;
適切なテーブル名を見つけたら、そのテーブルをテキスト・ファイルにエクスポートできます。次のコマンドは、データベース myDB から Customer テーブルをファイルの customers.sql にエクスポートします。
mysqldump -u username -p password myDB Customer > customers.sql
"ユーザー名" と "パスワード" は、独自のユーザー名とパスワードと入れ替える必要があります。各テーブルをスペース文字で区切ることで、複数のテーブルをエクスポートできます。顧客テーブルと注文テーブルをcustomer_orders.sql にエクスポートします。
mysqldump -u username -p password myDB Customer Order > customers_orders.sql
SQL ステートメントをファイルにエクスポートした後、標準テキストエディタで SQL ファイルを開くか、MySQL Workbench で開くことができます。MySQL Workbench は、MySQL データベースとは別のインストールですが、MySQL の Web サイトから無料でダウンロードできます。Workbench で開くのがベストです。ステートメントを実行して、ターゲットの MySQL データベース・サーバーにデータをインポートできます。
mysqldump の例
mysqldump ユーティリティは、主にバックアップや別のデータベース・サーバーへのデータ転送に使用されます。データベースのバックアップを取ったり、別のサーバーにデータを転送したりする場合も、mysqldump ユーティリティは同じように機能します。mysqldump バックアップの一般的な用途の 1 つは、実稼働データベースからテスト環境を作成することです。
実稼働データベースを使用してテスト環境を作成するには、mysqldump ユーティリティを使用してデータベースの完全なバックアップを取ることができます。次のコマンドは、myDB という名前のデータベース全体のバックアップを取り、myDB.sql という名前のファイルにエクスポートします。
mysqldump -u username -p password -databases myDB > myDB.sql
テスト・サーバーにログインします。また、エクスポートされたデータをインポートするには、MySQL をインストールする必要があります。export コマンドは、'>' 文字を使用して、データをデータベースから SQL ファイルに移動させます。インポート・プロセスでは、< 文字を使用します。次のコマンドは、myDB.sql ファイル内の全てのデータを、myDB という名前の同じデータベースを持つテスト環境にインポートします。
mysqldump -u username -p password -databases myDB < myDB.sql
上記の 2 つのコマンドでは、本番環境の元の myDB データベースからテスト環境にデータをレプリケートします。テスト環境により、開発者や品質保証担当者は、実際のデータと、トラブルシューティングのために顧客や従業員の問題を模倣したデータベース構造を扱うことができます。
mysqldump の基本的な使い方
mysqldump 中に作成された .sql ファイルは、シンプルなテキストファイルです。任意のテキストエディタで開くことができますが、MySQL Workbenchで開くのが最善です。ワークベンチのカラー・コード・コマンドとデータ・タイプにより、SQL コマンドの読み取りが容易になります。
.sql ファイルは、File メニューを使用して Workbench で開くことができます。ダイアログボックスの "SQL スクリプトを開く" をクリックして、読みたい .sql ファイルを選択します。.sql ファイルを開くと、コマンドの実行を選択した場合は、SQL スクリプトの実行ファイルメニュー項目でファイルを読み、実行できます。Workbench は Windows と Linux で実行されるため、スクリプトは両方のオペレーティング・システムでこのように実行できます。
また、mysqldump ユーティリティを使用して、Windows と Linux で mysqldump ファイルを実行することもできます。次のコマンドは、mysqldump ユーティリティから Windows と Linux の両方の MySQL データベースで SQL ステートメントを実行します。
mysqldump -u username -p password -databases myDB < myDB.sql
上記のコマンドは、myDB.sql mysqldump ファイルからデータをインポートし、ローカル・データベース・サーバー上で SQL ステートメントを実行します。コマンドは、myDB データベースにデータをインポートします。
データベースやデータベースのテーブルにデータが存在しない場合も、データベース構造が作成され、データベースがスキーマに追加されます。テーブル構造は、将来データを追加するために利用できます。
mysqldump の高度な使用
大規模なデータベースには、テラバイトのデータを含むテーブルが含まれている可能性があります。エクスポートが多すぎるとストレージ・リソースが枯渇する可能性がありますが、各ファイルを圧縮して、MySQL データ・エクスポートに必要なストレージ・スペースを減らすことができます。ファイルを圧縮することで、非常に大きなファイルに必要なストレージ容量を数ギガバイト節約できます。次の mysqldump コマンドは、myDB データベースをエクスポートし、gzip ユーティリティを使用して myDB.sql.gz という名前のファイルに圧縮します。
mysqldump -u username -p password -databases myDB | gzip myDB.sql.gz
バックアップには機密データが含まれていることが多いため、コンプライアンスとデータ保護のために暗号化が必要です。データを暗号化するには、サードパーティ製のツールが必要です。この例では、myDB.sql ファイルを暗号化するために ccrypt を使用します。ファイルを暗号化するには(パスフレーズに似た)キーが必要ですが、復号するにはこのキーを覚えておく必要があります。暗号化ユーティリティは、ファイルを暗号化するときにキーを入力するように促します。または、安全なファイルにキーを保存し、.sql ファイルの暗号化と復号化に再利用することができます。
次の例では、エクスポートされた .sql ファイルは mykey.key という名前のファイルに保存されているキーを使用して暗号化されています。
mysqldump -u username -p password -databases myDB | ccrypt -k mykey.key > myDB.sql.cpt
データは .cpt ファイルにエクスポートされます。この .cpt ファイルは、暗号化された全てのデータを保存する場所です。ファイルを復号化するには、同じキーが必要です。復号化には、次のコマンドを使用します。
cdecrypt -k mykey.key myDB.sql.cpt
ほとんどのデータベースには、 を超えるテーブルとデータが含まれています。トリガーと手順もバックアップする必要があります。既定では、mysqldump ユーティリティのエクスポートは標準エクスポートでトリガーされますが、管理者は明示的にコマンドを指定してエクスポートできます。プロシージャはデフォルトでエクスポートされないため、管理者は明示的にエクスポートする必要があります。次のコマンドは、他のデータベース・オブジェクトやデータとともに、トリガーや手順をエクスポートします。
mysqldump -u username -p password -databases myDB –triggers=true –routines=true > myDB.sql
mysqldump のベストプラクティス
mysqldump ユーティリティは、いつでも自由に使用できます。データベースとそのデータのバックアップやエクスポートを頻繁に行う必要がある場合に特に便利です。バックアップは、データベースの障害、マルウェア、データ破損が発生した場合にデータを取得できるように頻繁に行う必要があります。
バックアップの頻度は、データベースに毎日追加するデータの量と、データベースへの変更の頻度によって異なります。一般的に、mysqldump コマンドを使用する頻度は、収益や事業継続性に悪影響を及ぼすことなく失われるデータの量によって異なります。必ずしもフル・バックアップが必要なわけではありませんが、mysqldump ユーティリティを週に 1 回使用する企業もあれば、1 日に 1 回使用する企業もあります。ビジネスに必要なフル・バックアップの頻度を決定し、自動化ツールを使用して、mysqldump を一定の間隔で実行します。
まとめ
データベースの管理はフルタイムの仕事ですが、mysqldump ユーティリティは管理をより効率的にします。データのフル・バックアップや、サーバー間でのデータ転送に使用できます。Windows または Linux と互換性があるため、MySQL サーバーをホストするあらゆる環境で使用できます。