昨日は MySQL データベースをバックアップするための mysqldump の基本的な使用方法について見てきました。 今日は、mysqldump を使用して、デフォルトのダンプ方法である SQL インサート クエリを使用する代わりに、MySQL データベースから CSV およびタブ区切りテキスト ファイルにデータをダンプする方法を見ていきます。
mysqldump -u -p -T/path/to/directory
-u フラグは MySQL データベース サーバへの接続に使用するユーザー名を指定するために使用し、上記の例の部分を自分のユーザー名に置き換えることになります。
-p フラグは、データベースに接続するためのパスワードを入力することを示し、コマンドの実行が開始されるとパスワードの入力を求められます。 T とディレクトリ名の始めの間にスペースを入れても、入れなくてもかまいませんが、どちらでもかまいません。 指定するディレクトリは、MySQLサーバーを実行するユーザーによって書き込み可能でなければならないことに注意する必要があります。 そうでない場合、次のようなエラーが発生します。
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Linux マシンで SELinux が有効になっている場合、ディレクトリも SELinux 設定によって MySQL が書き込むことが許可されている必要があります。
Mysqldump によって作成されるファイル
上記の例を使用すると、”something” および “something_else” という 2 つのテーブルを持つデータベースでは、次のように 4 つのファイルが作成されます:
- something.sql – テーブルを作成する SQL が含まれています。 デフォルトでは、クエリの一部として
DROP TABLE IF EXISTS `something`;
が含まれます - something.txt – “something” テーブルのデータをタブ区切りで表示します
- something_else.sql – テーブルを作成するための SQL が含まれます。 デフォルトでは、クエリの一部として
DROP TABLE IF EXISTS `something_else`;
が含まれます - something_else.txt – タブ区切り形式の “something_else” テーブルのデータ
*.sql が必要ない場合は、”something_else” テーブルを作成する必要があります。sql ファイルを作成したくない場合は、mysqldump コマンドに -t フラグを次のように追加します:
mysqldump -u -p -t -T/path/to/directory
なお、指定したディレクトリが MySQL サーバによって書き込まれない場合でも、*.sql ファイルは作成されます。作成できないのはテキストファイルだけです。
出力形式の変更
デフォルトでは、-T フラグの付いた mysqldump はデータをタブ区切りファイルにダンプします。 しかし、区切り文字を変更したり、フィールド値を引用符で囲むように指定することができます。
区切り文字を変更するには、次の例のように --fields-terminated-by=
フラグを使用します。 この例では、データをカンマ区切り値またはCSVにダンプします:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
もし、各フィールドを引用符で囲みたい場合は、--fields-enclosed-by=
フラグを使用します。 以下の例では、各フィールドが引用符で囲まれている。 コマンドラインでは、引用符をスラッシュでエスケープする必要があります。
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
できあがるファイルは、次の例のようになります。