Mysqlの読み取りにのみ便利な形式で出力されるため、mysqldumpは避けたいと思います。 CSVはより普遍的です(テーブルごとに1つのファイルで十分です)。しかし、mysqldumpに利点がある場合、私はすべて耳にします。また、コマンドライン(Linux)から実行できるものが欲しいです。それがmysqlスクリプトである場合、そのようなものを作成する方法へのポインターが役立ちます。
一度にテーブルを処理でき、データがバイナリでない場合は、mysql
コマンドに-B
オプションを使用します。このオプションを使用すると、TSV(タブ区切り)ファイルが生成され、Excelなどに非常に簡単にインポートできます。
% 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
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の--tabオプションを使用すると、データベース全体を一度にダンプできます。ディレクトリパスを指定すると、CREATE TABLE DROP IF EXISTS構文の1つの.sqlファイルと、内容がタブ区切りの.txtファイルが作成されます。コンマ区切りファイルを作成するには、次を使用できます。
mysqldump --password --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --tab /tmp/path_to_dump/ database_name
そのパスはmysqlユーザーとコマンドを実行するユーザーの両方が書き込み可能である必要があるため、簡単にするためにchmod 777 /tmp/path_to_dump/
最初。
Select to outfileオプションは機能しませんが、SEDを介してタブ区切りファイルをパイピングする以下のラウンドアバウト方法は機能しました。
mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv
これが最も簡単なコマンドです
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を処理します。
mk-parallel-dump を確認してください。これは、常に便利な maatkitスイートスイート の一部です。これにより、--csvオプションを使用してコンマ区切りファイルをダンプできます。
これにより、個々のテーブルを指定せずにデータベース全体を実行できます。また、backupsetテーブルでテーブルのグループを指定できます。
また、テーブル定義、ビュー、トリガーを個別のファイルにダンプすることに注意してください。より普遍的にアクセス可能な形式で完全なバックアップを提供することに加えて、 mk-parallel-restore ですぐに復元することもできます。
データベース全体を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
PowerShellの2行の答え:
# Store in variable
$Global:csv = (mysql -uroot -p -hlocalhost -Ddatabase_name -B -e "SELECT * FROM some_table") `
| ConvertFrom-Csv -Delimiter "`t"
# Out to csv
$Global:csv | Export-Csv "C:\temp\file.csv" -NoTypeInformation
ブームバタブーム
-D
=データベースの名前
-e
=クエリ
-B
=タブ区切り