将远程服务器上的Mysql查询结果导出为CSV文件

9

我的应用程序运行在服务器1上,数据库在服务器2上。我想将select查询的输出作为CSV文件获取到服务器1,即我的应用程序服务器。我该如何实现这一目标? 使用Select into outfile不能帮助我,因为它只会在本地服务器上导出文件,所以如果我在DB服务器上运行查询,它会在DB服务器上创建文件,而不是应用程序服务器上。 mysql -e选项也无法帮助,因为它不会以CSV格式进行导出。 有人能建议如何直接从远程服务器上创建本地CSV文件吗? 谢谢。


其实我也遇到了你所描述的相同情况,我看了答案,但我还是对你实际实现的解决方案很感兴趣,你有什么经验? - Amogh
2个回答

13
您可以使用 outfile,然后将文件通过ftp传输到本地主机或者将普通查询的结果传递给sed/awk来将其转换为csv格式?
我发现以下内容可行: mysql -umysqlusername -pmysqlpass databasename -B -e "select * from \`tablename\`;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > mysql_exported_table.csv
此外,我们将采用(s)ftp解决方案。

或者在你想要CSV文件的地方运行mysql,并使用“-h yourdb.example.com”进行连接(假设它是直接可访问的)。 - symcbean
1
使用-h连接到远程服务器,如果您使用典型的SELECT... INTO OUTFILE方法,仍会将文件写入远程数据库服务器。 - mltsy
1
如果您按照上述命令运行,文件将在客户端上创建。 - symcbean

2

在Linux上,新版本的MySQL客户端(已测试14.14)在将stdout重定向到文件时默认使用制表符分隔符:

mysql -h serverhostname -uuserid -ppassword databasename -e 'select * from mytbale order by update_ts desc' >output.tsv

大多数接受csv格式的应用程序也会接受tsv格式,或者您可以轻松地自己进行转换,请参见如何将.tsv转换为.csv?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接