我需要以CSV格式转储MySQL中的所有表。
是否有一个命令使用mysqldump
只输出CSV格式的每个表的每一行?
答案 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