回答:
一度にテーブルに対応でき、データがバイナリでない-B
場合は、mysql
コマンドのオプションを使用します。このオプションを使用すると、Excelなどに簡単にインポートできるTSV(タブ区切り)ファイルが生成されます。
% echo 'SELECT * FROM table' | mysql -B -uxxx -pyyy database
または、サーバーのファイルシステムに直接アクセスできる場合は、SELECT INTO OUTFILE
これを使用して実際のCSVファイルを生成できます。
SELECT * INTO OUTFILE 'table.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM table
\. file.sql
読み取り元)ではなく、MYSQLディレクトリに表示されます。そのため、インストールによっては、おそらく次の場所にあります/var/lib/mysql/[db_name]/table.csv
MySQL自体では、次のようなCSV出力を指定できます。
SELECT order_id,product_name,qty
FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/から
mysqldump's --tab
オプションを使用して、データベース全体を一度にダンプできます。ディレクトリパスを指定する.sql
と、CREATE TABLE DROP IF EXISTS
構文で1つのファイルと.txt
、タブで区切られた内容のファイルが作成されます。コンマで区切られたファイルを作成するには、以下を使用できます。
mysqldump --password --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --tab /tmp/path_to_dump/ database_name
そのパスは、mysqlユーザーとコマンドを実行するユーザーの両方が書き込み可能である必要があるため、簡単にするために、chmod 777 /tmp/path_to_dump/
最初にお勧めします。
mysqldump: You must use option --tab with --fields-...
GRANT FILE ON *.* TO 'user1'@'localhost';
- stackoverflow.com/a/15014385/1707015。私が取らなければならなかった私の場合は/var/lib/mysql-files/
(代わりに/tmp/
)、MySQLへユーザーを設定します。mysqlと777に権限を設定- stackoverflow.com/a/32737616/1707015。
select into outfileオプションは私には機能しませんが、SEDを介してタブ区切りファイルをパイプする以下のラウンドアバウトの方法は機能しました:
mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv
t
が置き換えられまし", "
た。私が求めていたものとは正確には違います。
これが最も簡単なコマンドです
mysql -h<hostname> -u<username> -p<password> -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > output.csv
列の値にカンマがある場合、次のコマンドで.csvではなく.tsvを生成できます。
mysql -h<hostname> -u<username> -p<password> -e 'select * from databaseName.tableNaame' > output.csv
「バックアップ」が本当に必要な場合は、テーブル定義、ビュー定義、ストアプロシージャなどのデータベーススキーマも必要です。データベースのバックアップはデータだけではありません。
バックアップ用のmysqldump形式の価値は、mysqlデータベースの復元に使用するのが非常に簡単であることです。簡単に復元できないバックアップはあまり役に立ちません。mysqlサーバーに復元できるようにmysqlデータを確実にバックアップする方法を探している場合は、mysqldumpツールを使用する必要があります。
Mysqlは無料で、さまざまなプラットフォームで動作します。復元できる新しいmysqlサーバーの設定は簡単です。mysqlをセットアップできないため、復元を実行できることをまったく心配していません。
csv / tsvのような壊れやすい形式に基づくカスタムバックアップ/復元が失敗することについては、はるかに心配です。データに含まれるすべての引用符、カンマ、またはタブが正しくエスケープされ、復元ツールによって正しく解析されますか?
データを抽出する方法を探している場合は、他の回答でいくつか参照してください。
以下のスクリプトを使用して、csvファイルへの出力を取得できます。ヘッダー付きのテーブルごとに1つのファイル。
for tn in `mysql --batch --skip-page --skip-column-name --raw -uuser -ppassword -e"show tables from mydb"`
do
mysql -uuser -ppassword mydb -B -e "select * from \`$tn\`;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > $tn.csv
done
userはユーザー名、passwordは各テーブルのパスワードを入力し続けたくない場合のパスワードで、mydbはデータベース名です。
スクリプトの説明:sedの最初の式はタブを "、"に置き換えます。そのため、フィールドは二重引用符で囲まれ、コンマで区切られます。2番目は最初に二重引用符を挿入し、3番目は最後に二重引用符を挿入します。そして最後の1つは\ nを処理します。
--skip-column-names
私のバージョンのmysqlでも同じように言えます
便利なmaatkitツールスイートの一部であるmk-parallel-dumpを確認してください。--csvオプションを使用して、コンマ区切りファイルをダンプできます。
これにより、個々のテーブルを指定せずにデータベース全体を実行でき、バックアップセットテーブルでテーブルのグループを指定できます。
また、テーブルの定義、ビュー、トリガーを個別のファイルにダンプします。より完全にアクセス可能な形式で完全なバックアップを提供することに加えて、それはまたmk-parallel-restoreで即座に復元可能です
maatkit
percona toolkit
今の一部のようですが、対応するツールが見つかりません。
db全体をcsvとしてダンプする場合
#!/bin/bash
host=hostname
uname=username
pass=password
port=portnr
db=db_name
s3_url=s3://bxb2-anl-analyzed-pue2/bxb_ump/db_dump/
DATE=`date +%Y%m%d`
rm -rf $DATE
echo 'show tables' | mysql -B -h${host} -u${uname} -p${pass} -P${port} ${db} > tables.txt
awk 'NR>1' tables.txt > tables_new.txt
while IFS= read -r line
do
mkdir -p $DATE/$line
echo "select * from $line" | mysql -B -h"${host}" -u"${uname}" -p"${pass}" -P"${port}" "${db}" > $DATE/$line/dump.tsv
done < tables_new.txt
touch $DATE/$DATE.fin
rm -rf tables_new.txt tables.txt