我试图使用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太棒了!我目前正在参与主要的服务器迁移,之前,我们的小型数据库曾经与客户端托管在同一台服务器上.
所以我们习惯这样做: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表,其中包含HTML代码和一些其他信息.
这样的一个例子:
SELECT id, lang, html
FROM mytable t
WHERE type = 10
Run Code Online (Sandbox Code Playgroud)
给出结果:
id lang html
-------------------------------------------------------
20 fr '<html> ... html code here </html>'
21 de '<html> ... html code here </html>'
22 it '<html> ... html code here </html>'
23 en '<html> ... html code here </html>'
Run Code Online (Sandbox Code Playgroud)
我的想法是每行输出html代码到一个文件中
20_fr.html 将包含id 20的html列21_de.html 将包含id 21的html列是否可以在SQL语言中这样做,就像这个例子一样,将所有行导出到一个文件中.
我知道我可以用Java或任何其他语言来做,但我只对SQL感兴趣(存储过程可以没问题).