前回記事:MySQLでCSVファイルを使って結果出力やデータ入力を行う方法では、MySQL環境にてCSVファイルを用いてデータのインポートやエクスポートを行う方法についてご紹介しました。今回は、同じくバックアップやデータ移行に使用できるコマンド「mysqldump」の基本的な使い方や主要なオプションについてご紹介したいと思います。
目次
1.1 mysqldumpコマンドの基本形
1.2 エラー1064の発生原因と対処法
1.3 実行例と実行結果
1.4 出力されたdumpファイルの保存場所
1.5 CSVファイルに出力したい場合
1.mysqldumpでバックアップ
1.1 mysqldumpコマンドの基本形
mysqldumpの基本の構文は、次のようになります。
mysqldump -u[ユーザ名] -p[パスワード] -h[ホスト名]
[データベース名] [テーブル名1],[テーブル名2],... [オプション]
> [保存先ファイル名] (※以降、<および>は半角)
<注意点>
・テーブル名をカンマ区切りで並べることで、複数テーブルの指定が可能です。
・テーブル名を指定しない場合、指定したデータベースの全てのテーブルが出力対象となります。
・コマンドラインクライアントではなくコマンドプロンプト上で実行しているため、末尾に「;」は不要です。
1.2 エラー1064の発生原因と対処法
Windowsの場合に注意が必要なのが、mysqldumpはMySQL Command Line Client上で実行するためのコマンドではなく、Windows用の実行ファイルであるという点です。そのためコマンドラインクライアント上で実行すると、1064エラーが表示されます。
Windowsの場合、mysqldumpはコマンドプロンプト上から実行するのが正解になります。 なおコマンドプロンプトは、「管理者として実行」を選択しなくても大丈夫です。
1.3 データベース作成を行うユーザに設定が必要な権限
例として、「db_01」データベースの「USER_DATA」テーブルを、「dump.sql」というファイルに出力します。
<実行コマンド>
mysqldump -uroot -ppassword -hlocalhost db_01 USER_DATA > dump.sql
(ユーザ:root、パスワード:password、ホスト名:localhost)
図に表示されているWarningは、パスワードをコマンドに直接書き込んで実行した際に表示されるセキュリティ警告です。実行には特に影響ありませんが、気になる方は次のように指定し個別にパスワード入力を行うことで、警告を回避することができます。
mysqldump -uroot -p -hlocalhost db_01 USER_DATA > dump.sql
出力されたsqlファイルはデータの差し替えがしやすいように、古いテーブルの「DROP TABLE」と、新しいテーブルの「CREATE TABLE」と、テーブルの中身の「INSERT文」、そしてINSERT中の「LOCK」と「UNLOCK」のセットとなっています。
本来のdump対象はCREATEとINSERTのみでDROPとLOCKは「-opt」オプションの産物ですが、何も指定しなければデフォルトで「-opt」が有効になっているため、DROPとLOCKも出力対象になります。不要なものを出力対象から外したい場合は、後述するオプションで細かく指定することができます。
1.4 出力されたdumpファイルの保存場所
出力したファイルの保存先は、コマンドを実行した時点でのカレントディレクトリ(現在のフォルダ)になります。例えば次の図の場合であれば、「D:\db_backup」フォルダに保存されています。
1.5 CSVファイルに出力したい場合
結果をdmpファイル(中身はSQL)でなくCSVファイル形式で出力したい場合は、以下の関連記事をご参照下さい。
2.mysqldumpのオプション
2.1 よく使うオプションまとめ
mysqldumpでよく使うオプションを、一覧にまとめてみました。
オプション | 概要 |
---|---|
-opt |
次の8つのオプションをセットにしたもの(デフォルトで有効) --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset |
-user(-u) | MySQLに接続するユーザ名を指定する |
-password(-p) | 接続するユーザのパスワードを指定する |
-host(-h) | 接続先のホストを指定する |
-port(-P) | 接続するポート番号を指定する |
-all-databases(-A) | 全てのデータベースを出力対象とする(このオプションを付ける場合、データベース名は指定しない) |
-add-drop-table | DROP TABLE文を出力対象とする |
-add-locks | INSERT前後のLOCKとUNLOCKを出力対象とする |
-no-data(-d) | データのINSERT文を出力対象としない |
-no-create-info(-t) | CREATE TABLE文を出力対象としない |
-create-options | CREATE TABLE文にMySQL固有のオプションを含める |
-lock-all-tables(-x) | バックアップ実行中は全テーブルをロックする |
-default-character-setdump | ファイルの文字コードを指定する(未指定時:utf8) |
-ignore-table=[データベース名].[テーブル名] | 指定したテーブルを出力対象から除外する |
3.dumpしたファイルのリストア(復元)
3.1 mysqlコマンドの基本形
dumpファイルの復元には、「mysql」コマンドを使用します。
基本の構文は、次の通りです。
mysql -u[ユーザ名] -p[パスワード] -h[ホスト名]
[データベース名] [テーブル名1],[テーブル名2],... [オプション]
< [復元元ファイル名] (※<は半角)
先ほど抽出したdumpファイルは、次のようなコマンドで復元可能です。
mysql -uroot -ppassword -hlocalhost db_01 USER_DATA < dump.sql
4.まとめ
出力されたファイルの内容からmysqlddumpで取得したdumpファイルは、バイナリデータではなくテキストデータ(SQL)であることがわかります。前回のCSVと、状況に応じて使い分けてみて下さい。
次回はMySQLにおけるインデックスの貼り方について、ご紹介したいと思います。
よければ合わせてご覧下さい。
関連記事:
無料でも使える高機能データベース「MySQL」とは
関連記事:
MySQLのダウンロード&インストールと初期設定方法
関連記事:
MySQLのデータベースに接続する3つの方法と接続手順
関連記事:
便利な公式ツールMySQL Workbenchの使い方と日本語化方法
関連記事:
MySQLでユーザを作成し、権限を設定する方法
関連記事:
MySQLで新規にデータベースを作成・削除する方法
関連記事:
MySQLでテーブルを作成・削除・変更する方法