MySQLのallテーブルをCSV形式でダンプする必要があります。
mysqldump
を使用してjust CSV形式のすべてのテーブルのすべての行を出力するコマンドはありますか?
まず、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
に置き換えます。
このコマンドは、/ 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=','
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
試してみる !!!
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;
これで、他の手法を使用して、このコマンドを複数のテーブルに対して繰り返すことができます。詳細はこちらをご覧ください:
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
これは私にとってはうまくいきました:
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'の実行時にこのステートメントを実行できません
dbForge Studio for MySQL のデータエクスポートツールを使用して行うこともできます。
一部またはすべてのテーブルを選択して、CSV形式にエクスポートできます。
より簡単な方法であるcsvdumpツールを使用して、mysqlからリモートcsvファイルを印刷できます: https://github.com/bobby96333/csvdump
それは単にcsvとしてエクスポートするだけのことです。なぜ ここにリンクの説明を入力してください からDbeaverをインストールしないのですか
Nosqlを除くほとんどの一般的なデータベースをカバーし、csvやsqlを含むさまざまな形式でエクスポートできます。