mysql 从远程数据库转储到本地主机输出文件

Posted

技术标签:

【中文标题】mysql 从远程数据库转储到本地主机输出文件【英文标题】:mysql dump to localhost outfile from a remote database 【发布时间】:2011-06-12 05:17:25 【问题描述】:

我被困住了。我基本上想使用 OUTFILE 命令从远程数据库创建一个本地数据文件(csv 文件)。

我基本上是在提取数据......并且想在我的本地文件服务器上创建它而不是在远程服务器上创建输出文件。我的远程空间有限,因此我想在本地创建文件。我在如何做到这一点上缺少什么?谢谢!

到目前为止,这是我在命令行上的工作语法(它正在创建我想要的文件,但在远程服务器上)

mysql -u test -pfoo --database test -h testdb201.name.host.com --port 3306 -ss -e "SELECT 'a','b','c' UNION SELECT col1, col2, col3 INTO OUTFILE '/tmp/mytest.csv' FIELDS TERMINATED BY ','  FROM tst_p000 limit 10"

【问题讨论】:

你是在远程服务器还是本地服务器上运行这个命令? 我认为不可行,你有 ssh 登录到数据库服务器吗? 在本地服务器上运行此命令。让我所有的 ssh 密钥都能正常工作。我可以让它转储文件,但它在远程服务器上。我现在看到 OUTFILE 是数据库服务器的本地文件。 【参考方案1】:

根据MySQL Select syntax,您不能使用OUTFILE 输出到服务器本身之外的文件。

您需要像这样 (sed command credited here) 将查询的制表符分隔输出转换为 CSV 格式。

mysql -u test -pfoo --database test -h testdb201.name.host.com --port 3306 -ss -e "SELECT 'a','b','c' UNION SELECT col1, col2, col3 " | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > myDump.csv

【讨论】:

甜蜜!好把戏。我希望我对 sed 很好。奇迹般有效。感谢您的帮助! 将sed命令映像成四部分,每部分用分号隔开。 sed 命令的第一部分将每个选项卡替换为“,”(包括引号)。第二部分用双引号替换所有开始行。第三部分用双引号替换所有结束行。最后一部分从查询中删除所有换行符。 很好的答案,谢谢!我不想引用这些字段,所以我将参数更改为seds/\t/,/g,并且运行顺利。

以上是关于mysql 从远程数据库转储到本地主机输出文件的主要内容,如果未能解决你的问题,请参考以下文章

从 MySql 导出转储文件

如何将 MySQL 转储从主机恢复到 Docker 容器

使用 php 将数据库从我的实时服务器导出到我的本地主机?

sh MySQL:转储本地主机中的所有数据库

将 mongodb 数据库从本地主机迁移到远程服务器

从命令行将 mysql 数据库转储到纯文本 (CSV) 备份