Mysqldump以CSV格式

我需要以CSV格式转储mysql中的所有表。

是否有一个命令使用mysqldump来只输出CSV格式的每一个表的每一行?

首先,我可以给你一个表的答案:

所有这些INTO OUTFILE--tab=tmpfile (和-T/path/to/directory )的问题都是需要在与 MySQL服务器相同的服务器上运行mysqldump ,并具有这些访问权限。

我的解决scheme是简单地使用带有-B参数的mysql (不是mysqldump ),用-e内联SELECT语句,然后使用sed ASCII输出,然后用包含头字段行的CSV结束:

例:

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

“id”“login”“password”“folder”“email”“8”“mariana”“xxxxxxxxxx”“mariana”“”“3”squaredesign“xxxxxxxxxxxxxxxxx”平面devise“,”mkobylecki@squaredesign.com“”4“,”miedziak“,”xxxxxxxxxx“,”miedziak“,”miedziak@mail.com“”5“,”Sarko“,”xxxxxxxxx“,”Sarko“ “6”,“Logitrans Poland”,“xxxxxxxxxxxxxxxx”,“LogitransPolland”,“”7“,”Amos“,”xxxxxxxxxxxxxxxxxxxxxx“,”Amos“,”“”9,“Annabelle”,“xxxxxxxxxxxxxxxx” “Annabelle”“11”“品牌与儿子”“xxxxxxxxxxxxxxxxx”“BrandfathersAndSons”“12”“Imagine Group”“xxxxxxxxxxxxxxxx”“ImagineGroup”“”13“ EduSquare.pl“,”xxxxxxxxxxxxxxxxxxx“,”EduSquare.pl“,”“101”,“tmp”,“xxxxxxxxxxxxxxxxxxxxxxx”,“_”,“WOBC-14.squaredesign.atlassian.net@yoMama.com”

在该单行的末尾添加> outfile.csv ,以获取该表的CSV文件。

接下来,获取所有你的表的清单

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

从那里,这只是一个循环,例如。 在bash shell中遍历这些表:

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

do和之间; done ; done插入我在上面第1部分中写的长命令,而是用$tbreplace你的表名。

该命令将在/ path / to /目录下创build2个文件table_name.sql和table_name.txt。

sql文件将包含表创build模式,并且txt文件将包含带逗号分隔的字段的mytable表的logging。

 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每个表单独

我build议你在一个文本文件中收集所有的表名。 然后,遍历所有运行mysqldump的表。 这里是一个脚本,将一次转储和gzip 10个表:

 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 

试一试 !!!

看起来像别人也有这个问题, 现在有一个简单的python脚本 ,用于将mysqldump的输出转换成csv文件。

 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 

您也可以使用dbForge Studio for MySQL中的“数据导出”工具。

它将允许您select一些或全部表格并将其导出为CSV格式。

如果您正在使用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; 

现在您可以使用其他技术为多个表重复执行此命令。 在这里看到更多细节: