我需要将数据从表导出到 csv。我有以下结构(不是真正的我的表,而是用于演示目的)

CREATE TABLE `mytable` (
  `id` int(11) DEFAULT NULL,
  `mycolumn` varchar(25) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

有数据(约3000条记录)。现在我想导出其中一些记录(从我通过 cronjob 运行的脚本)

SELECT * INTO OUTFILE '/tmp/mytable.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mytable;

表明:

Query OK, 3 rows affected (0.00 sec)

然后我做:

ls: cannot access /tmp/mytable.sql: No such file or directory

我的文件在哪里?

有帮助吗?

解决方案

当您使用 INTO OUTFILE 命令,它将数据导出到服务器的本地文件夹,而不是您正在执行查询的文件夹。

例子:你在你的电脑上(ip:192.168.0.100) 并且连接到 mysqlserver (ip:192.168.0.101)使用mysql命令: mysql -uuser -h192.168.0.101 -A database. 。通过执行 SELECT * INTO OUTFILE 该文件保存在 mysqlserver 上(ip:192.168.0.101)并且不在您的计算机上(ip:192.168.0.100)。

现在,您可以使用创建 CSV 文件的脚本(在 cronjob 中 - 选择所有数据,生成文件并通过 scp 发送到其他服务器)。

或者 - 您也可以安装 NFS /shared/ 当您自动创建该文件时,其他服务器就会拥有该文件。

或者 - 您可以简单地从您的第一台服务器在 bash 脚本中运行 mysql 命令,如下所示。

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv

来源: http://tlug.dnho.net/node/209

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top