web-dev-qa-db-ja.com

CSV形式のmysqldump

MySQLのallテーブルをCSV形式でダンプする必要があります。

mysqldumpを使用してjust CSV形式のすべてのテーブルのすべての行を出力するコマンドはありますか?

62
Ken

まず、1つのテーブルの答えを示します。

これらのすべてのINTO OUTFILEまたは--tab=tmpfile(および-T/path/to/directory)の答えの問題は、同じ上でmysqldumpを実行する必要があることです。 MySQLサーバーとしてのserver、およびそれらのアクセス権を持つ。

私の解決策は、単に-Bパラメーターでmysql(NOT mysqldump)を使用し、-eでSELECTステートメントをインライン化し、ASCII出力をマッサージすることでした。 sedを使用して、ヘッダーフィールド行を含むCSVを作成します。

例:

 mysql -B -u username -p password database -h dbhost -e "SELECT * FROM accounts;" \
 | sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"

"id"、 "login"、 "password"、 "folder"、 "email" "8"、 "mariana"、 "xxxxxxxxxx"、 "mariana"、 "" "3"、 "squaredesign"、 "xxxxxxxxxxxxxxxxx"、 " squaredesign "、" [email protected] "" 4 "、" miedziak "、" xxxxxxxxxx "、" miedziak "、" [email protected] "" 5 "、" Sarko "、" xxxxxxxxx "、" Sarko "、" "" 6 "、" Logitrans Poland "、" xxxxxxxxxxxxxx "、" LogitransPoland "、" "" 7 "、" Amos "、" xxxxxxxxxxxxxxxxxxxx "、" Amos "、" "" 9 "、" Annabelle "、" xxxxxxxxxxxxxxxx "、 「Annabelle」、「」「11」、「Brandfathers and Sons」、「xxxxxxxxxxxxxxxxx」、「BrandfathersAndSons」、「」「12」、「Imagine Group」、「xxxxxxxxxxxxxxxx」、「ImagineGroup」、「」「13」、」 EduSquare.pl "、" xxxxxxxxxxxxxxxxx "、" EduSquare.pl "、" "" 101 "、" tmp "、" xxxxxxxxxxxxxxxxxxxxx "、" _ "、" [email protected] "

その1行の末尾に> outfile.csvを追加して、そのテーブルのCSVファイルを取得します。

次に、すべてのテーブルのリストを取得します

mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"

そこから、ループを作成するのはあと1つだけです。 bashシェルでこれらのテーブルを反復処理します。

 for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
     echo .....;
 done

do; doneの間に、上記のパート1で書いた長いコマンドを挿入しますが、代わりにテーブル名を$tbに置き換えます。

101
Marcos

このコマンドは、/ path/to/directory table_name.sqlおよびtable_name.txtに2つのファイルを作成します。

Sqlファイルにはテーブル作成スキーマが含まれ、txtファイルにはコンマで区切られたフィールドを持つmytableテーブルのレコードが含まれます。

mysqldump -u username -p -t  -T/path/to/directory dbname table_name --fields-terminated-by=',' 
24
Armance

mysqldumpにはCSV形式のオプションがあります

--fields-terminated-by=name
                  Fields in the output file are terminated by the given
--lines-terminated-by=name
                  Lines in the output file are terminated by the given

nameには次のいずれかを含める必要があります

`--fields-terminated-by`

\tまたは"\""

`--fields-enclosed-by=name`

出力ファイルのフィールドは、指定された

そして

--lines-terminated-by

  • \r
  • \n
  • \r\n

当然、各テーブルを個別にmysqldumpする必要があります

すべてのテーブル名をテキストファイルに収集することをお勧めします。次に、mysqldumpを実行しているすべてのテーブルを反復処理します。一度に10個のテーブルをダンプおよびgzipするスクリプトを次に示します。

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQLSTMT="SELECT CONCAT(table_schema,'.',table_name)"
SQLSTMT="${SQLSTMT} FROM information_schema.tables WHERE table_schema NOT IN "
SQLSTMT="${SQLSTMT} ('information_schema','performance_schema','mysql')"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/DBTB.txt
COMMIT_COUNT=0
COMMIT_LIMIT=10
TARGET_FOLDER=/path/to/csv/files
for DBTB in `cat /tmp/DBTB.txt`
do
    DB=`echo "${DBTB}" | sed 's/\./ /g' | awk '{print $1}'`
    TB=`echo "${DBTB}" | sed 's/\./ /g' | awk '{print $2}'`
    DUMPFILE=${DB}-${TB}.csv.gz
    mysqldump ${MYSQL_CONN} -T ${TARGET_FOLDER} --fields-terminated-by="," --fields-enclosed-by="\"" --lines-terminated-by="\r\n" ${DB} ${TB} | gzip > ${DUMPFILE}
    (( COMMIT_COUNT++ ))
    if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
    then
        COMMIT_COUNT=0
        wait
    fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
    wait
fi

試してみる !!!

19
RolandoMySQLDBA

MySQLまたはMariaDBを使用している場合、単一テーブルのCSVをダンプする最も簡単でパフォーマンスの良い方法は-

SELECT customer_id, firstname, surname INTO OUTFILE '/exportdata/customers.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM customers;

これで、他の手法を使用して、このコマンドを複数のテーブルに対して繰り返すことができます。詳細はこちらをご覧ください:

8
Anis

Mysqldumpの出力をcsvファイルに変換するための 単純なpythonスクリプトがあります 今、他にもこの問題があったようです。

wget https://raw.githubusercontent.com/jamesmishra/mysqldump-to-csv/master/mysqldump_to_csv.py
mysqldump -u username -p --Host=rdshostname database table | python mysqldump_to_csv.py > table.csv
7
Vajk Hermecz

これは私にとってはうまくいきました:

 mysqldump DBNAME --fields-terminated-by ',' \
 --fields-enclosed-by '"' --fields-escaped-by '\' \
 --no-create-info --tab /var/lib/mysql-files/

または、TABLENAMEのみをダンプする場合:

 mysqldump DBNAME TABLENAME --fields-terminated-by ',' \
 --fields-enclosed-by '"' --fields-escaped-by '\' \
 --no-create-info --tab /var/lib/mysql-files/

このエラーを回避するために/var/lib/mysql-files/にダンプしています:

mysqldump:エラーが発生しました:1290:MySQLサーバーは--secure-file-privオプションで実行されているため、 'SELECT INTO OUTFILE'の実行時にこのステートメントを実行できません

3
guaka

dbForge Studio for MySQL のデータエクスポートツールを使用して行うこともできます。

一部またはすべてのテーブルを選択して、CSV形式にエクスポートできます。

1
Devart

より簡単な方法であるcsvdumpツールを使用して、mysqlからリモートcsvファイルを印刷できます: https://github.com/bobby96333/csvdump

0
user11297642

それは単にcsvとしてエクスポートするだけのことです。なぜ ここにリンクの説明を入力してください からDbeaverをインストールしないのですか

Nosqlを除くほとんどの一般的なデータベースをカバーし、csvやsqlを含むさまざまな形式でエクスポートできます。

0
minimallinux