我试图使用MySQL SELECT INTO OUTFILE语句将表的内容转储到csv文件.如果我做:
SELECT column1, column2
INTO OUTFILE 'outfile.csv'
FIELDS TERMINATED BY ','
FROM table_name;
Run Code Online (Sandbox Code Playgroud)
outfile.csv将在服务器上创建,该数据库的文件存储在同一目录中.
但是,当我将查询更改为:
SELECT column1, column2
INTO OUTFILE '/data/outfile.csv'
FIELDS TERMINATED BY ','
FROM table_name;
Run Code Online (Sandbox Code Playgroud)
我明白了:
ERROR 1 (HY000): Can't create/write to file '/data/outfile.csv' (Errcode: 13)
Run Code Online (Sandbox Code Playgroud)
Errcode 13是一个权限错误,但即使我将/ data的所有权更改为mysql:mysql并赋予它777权限,我也能得到它.MySQL以用户"mysql"运行.
奇怪的是我可以在/ tmp中创建文件,只是没有在我尝试过的任何其他目录中,即使权限设置使得用户mysql应该能够写入目录.
这是在Ubuntu上运行的MySQL 5.0.75.
使用MySQL时是否可能以某种方式包含标题INTO OUTFILE
?
有任何想法吗?
SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property
WHERE managerGroupID = {$managerGroupID}
Run Code Online (Sandbox Code Playgroud)
错误:
Access denied for user 'asdfsdf'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud) 我写了一个大的sql脚本来创建一个CSV文件.我想每晚打电话给cronjob来创建一个新的CSV文件,并在网站上提供.
比如说我将我的文件存储在'/home/sites/example.com/www/files/backup.csv'中
我的SQL是
SELECT * INTO OUTFILE '/home/sites/example.com/www/files/backup.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM ( ....
Run Code Online (Sandbox Code Playgroud)
当文件已经存在时,MySQL给我一个错误
档案'/home/sites/example.com/www/files/backup.csv'已经存在
有没有办法让MySQL覆盖文件?
我可以让PHP检测文件是否存在并在再次创建之前将其删除但如果我可以直接在MySQL中执行它会更简洁.
我有一个包含一些常见字段的时间表数据库表.
id, client_id, project_id, task_id, description, time, date
Run Code Online (Sandbox Code Playgroud)
还有更多,但这就是它的要点.
我在该表上运行导出过夜的CSV文件,以便为用户提供其数据的备份.它还用作带有一些自定义报告的宏Excel文件的数据导入.
这一切都与我一起使用php循环遍历时间表并将行打印到文件.
问题在于大型数据库可能需要数小时才能运行,这是不可接受的.所以我用MySQL INTO OUTFILE
命令重新编写它,它将它减少到几秒钟才能运行,这很棒.
现在的问题是我似乎无法在描述字段中转义所有新行字符等.实际上,用户可以在此输入任何字符组合,包括回车/新行.
这是我的MySQL代码的片段:
SELECT id,
client,
project,
task,
REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description,
time,
date
INTO OUTFILE '/path/to/file.csv'
FIELDS ESCAPED BY '""'
TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM ....
Run Code Online (Sandbox Code Playgroud)
但...
当我尝试查看输出文件的来源时,文件中仍然存在换行符,因此Excel的CSV导入会破坏Excel向导创建的所有奇特的宏和数据透视表.
关于最佳行动方案的任何想法?
MySQL太棒了!我目前正在参与主要的服务器迁移,之前,我们的小型数据库曾经与客户端托管在同一台服务器上.
所以我们习惯这样做:SELECT * INTO OUTFILE .... LOAD DATA INFILE ....
现在,我们将数据库移动到另一台服务器,SELECT * INTO OUTFILE ....
不再有效,可以理解 - 我相信安全原因.但是,有趣的LOAD DATA INFILE ....
是可以改为LOAD DATA LOCAL INFILE ....
和bam,它有效.
我不是抱怨,也不是我对MySQL的厌恶.替代方案增加了2行额外代码和系统调用形成.sql脚本.所有我想知道的是为什么LOAD DATA LOCAL INFILE
有效,为什么没有这样的东西SELECT INTO OUTFILE LOCAL
?
我完成了我的作业,找不到上述问题的直接答案.我找不到@MySQL的功能请求.如果有人能够清除它,那就太棒了!
MariaDB能够处理这个问题吗?
我试图在MySQL中使用source命令执行foo.sql.
当我键入命令时,文件来源相应:
mysql> source ~/foo.sql
Run Code Online (Sandbox Code Playgroud)
现在,在这个文件中执行了很多语句,我想回顾一下这些语句的成功/失败.有没有办法可以将语句的结果传递给日志文件foo.txt?
我正在思考以下问题:
mysql> source ~/foo.sql into outfile ~/foo.txt
Run Code Online (Sandbox Code Playgroud)
但是,键入此命令似乎假定源语句后面的所有内容都是一个文件名; 所以它试图将一个名为'〜/ foo.sql的文件发送到outfile~/foo.txt',这显然不存在.
我无法获得以下代码来生成任何输出.MySQL用户具有"所有"授权级别,/ tmp是可写的,查询返回结果集.
mysql> SELECT field FROM test_table WHERE condition='test'
-> INTO OUTFILE '/tmp/test.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
Query OK, 1 row affected (0.00 sec)
mysql>
[1]+ Stopped mysql
[root@web1 ~]# cat /tmp/test.csv
cat: /tmp/test.csv: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如果发生故障,我应该看到MySQL的不同输出吗?
我可以比"1行受影响"更进一步验证结果吗?
我试图使用以下查询捕获MySQL中的SQL查询的输出到文本文件.
select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt';
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
ERROR 1045(28000):用户'用户名'@'%'的访问被拒绝(使用密码:是)
任何想法,我哪里错了?是一些与许可相关的问题吗?
我想做以下事情 mysql -uuser -ppass -h remote.host.tld database < script.sql
其中script.sql
包含以下内容
SELECT *
FROM webrecord_wr25mfz_20101011_175524
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)
我希望CSV输出指向标准输出.原因是因为使用an运行此查询INTO OUTFILE 'blah.csv'
将保存远程主机上的文件.我希望文件保存在本地主机上.
如果我可以将标准输出重定向到文件,那将是花花公子.