CSV格式的mysqldump

时间:2012-08-20 15:41:51

标签: mysql csv

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

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

9 个答案:

答案 0 :(得分:99)

首先,我可以给你一张桌子的答案:

所有这些INTO OUTFILE--tab=tmpfile(和-T/path/to/directory)答案的问题在于它需要在同一台服务器上运行 mysqldump 作为MySQL服务器,并拥有这些访问权限。

我的解决方案只是将mysql(NOT mysqldump)与-B参数一起使用,用-e内联SELECT语句,然后用{{跟踪ASCII输出1}},最后用CSV包括标题字段行:

示例:

sed
  

" ID""登录""密码""夹""电子邮件"   #&34; 8""黑云杉"" XXXXXXXXXX""黑云杉"""   " 3"" squaredesign"" xxxxxxxxxxxxxxxxx"" squaredesign"" mkobylecki@squaredesign.com"   #&34; 4"" miedziak"" XXXXXXXXXX"" miedziak"" miedziak@mail.com"   " 5""萨科"" XXXXXXXXX""萨科"""   " 6"" Logitrans   波兰"" XXXXXXXXXXXXXX"" LogitransPoland"""   #&34; 7""摩"" XXXXXXXXXXXXXXXXXXXX""摩"""   #&34; 9""安娜贝勒"" XXXXXXXXXXXXXXXX""安娜贝勒"""   " 11"," Brandfathers和   儿子"" xxxxxxxxxxxxxxxxx"" BrandfathersAndSons"""   " 12""想象   组"" XXXXXXXXXXXXXXXX"" ImagineGroup"""   " 13"" EduSquare.pl"" xxxxxxxxxxxxxxxxx"" EduSquare.pl"""   " 101"" TMP"" xxxxxxxxxxxxxxxxxxxxx"" _"" WOBC-14.squaredesign.atlassian.net @ yoMama.com"

在该单行的末尾添加 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" ,以获取该表的CSV文件。

接着, 使用

获取所有表格的列表
> outfile.csv

从那里开始,只需再做一个循环,例如。在mysql -u username -ppassword dbname -sN -e "SHOW TABLES;" shell中迭代这些表:

bash

for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do echo .....; done do之间插入我在上面第1部分中编写的长命令,但用; done代替您的表名。

答案 1 :(得分:23)

此命令将在/ 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=',' 

答案 2 :(得分:18)

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的所有表。这是一个将一次转储和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

试一试!!!

答案 3 :(得分:8)

看起来其他人也遇到了这个问题,there is a simple python script现在用于将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

答案 4 :(得分:7)

如果您使用的是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;

现在,您可以使用其他技术为多个表重复此命令。在这里查看更多详细信息:

答案 5 :(得分:2)

这对我来说很好:

 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”时无法执行该语句。

答案 6 :(得分:1)

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

它允许您选择部分或全部表格并将其导出为CSV格式。

答案 7 :(得分:0)

很多只是为了导出为csv,你为什么不从enter link description here安装Dbeaver

它涵盖了除nosql之外的大多数流行数据库,并且可以以各种格式导出,包括csv和sql。

答案 8 :(得分:0)

您可以使用简单的更多方法csvdump工具从mysql打印远程csv文件: https://github.com/bobby96333/csvdump