Mar*_*cos 106
首先,我可以给你一个表的答案:
所有这些INTO OUTFILE或--tab=tmpfile(和-T/path/to/directory)答案的问题在于它需要在与 MySQL服务器相同的服务器上运行mysqldump ,并具有这些访问权限.
我的解决方案只是使用mysql(NOT mysqldump)-B参数,内联SELECT语句-e,然后按下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"
Run Code Online (Sandbox Code Playgroud)
"id","login","password","folder","email""8","mariana","xxxxxxxxxx","mariana","""3","squaredesign","xxxxxxxxxxxxxxxxx"," squaredesign","mkobylecki @ sqdesign.com""4","miedziak","xxxxxxxxxx","miedziak","miedziak @mail.com""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","_","WOBC-14.squaredesign.atlassian.net@yoMama.com"
> outfile.csv在该单行的末尾添加一个,以获取该表的CSV文件.
接下来,获取所有表的列表
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
Run Code Online (Sandbox Code Playgroud)
从那里开始,制作循环只需要一步.在bashshell中迭代这些表:
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Run Code Online (Sandbox Code Playgroud)
间do和; done 插入长命令我在上面第1部分写道,但替换您的表名$tb来代替.
Arm*_*nce 25
此命令将在/ 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=','
Run Code Online (Sandbox Code Playgroud)
Rol*_*DBA 19
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
Run Code Online (Sandbox Code Playgroud)
对name应包含下列之一
`--fields-terminated-by`
Run Code Online (Sandbox Code Playgroud)
\t 要么 "\""
`--fields-enclosed-by=name`
Run Code Online (Sandbox Code Playgroud)
输出文件中的字段由给定的数据括起来
和
--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
Run Code Online (Sandbox Code Playgroud)
试试看 !!!
如果您使用的是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;
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用其他技术为多个表重复此命令.在这里查看更多详情:
看起来其他人也有这个问题,现在有一个简单的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
Run Code Online (Sandbox Code Playgroud)
这对我来说很好:
mysqldump DBNAME --fields-terminated-by ',' \
--fields-enclosed-by '"' --fields-escaped-by '\' \
--no-create-info --tab /var/lib/mysql-files/
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想转储TABLENAME:
mysqldump DBNAME TABLENAME --fields-terminated-by ',' \
--fields-enclosed-by '"' --fields-escaped-by '\' \
--no-create-info --tab /var/lib/mysql-files/
Run Code Online (Sandbox Code Playgroud)
我转储以/var/lib/mysql-files/避免此错误:
mysqldump:得到错误:1290:MySQL服务器正在使用--secure-file-priv选项运行,因此在执行“ SELECT INTO OUTFILE”时无法执行该语句
| 归档时间: |
|
| 查看次数: |
117002 次 |
| 最近记录: |