mysql导出后找不到文件
-
14-11-2019 - |
题
我需要将数据从表导出到 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
不隶属于 StackOverflow