有没有一种简单的方法可以从Linux命令行运行MySQL查询并以CSV格式输出结果?
这就是我现在正在做的事情:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Run Code Online (Sandbox Code Playgroud)
当有很多列需要用引号括起来,或者结果中有引号需要转义时,它会变得混乱.
我有一个文件,可以包含3到4列数字,用逗号分隔.当空字段位于行的末尾时,将定义空字段:
1,2,3,4,5
1,2,3,,5
1,2,3
Run Code Online (Sandbox Code Playgroud)
下表是在MySQL中创建的:
+-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | one | int(1) | YES | | NULL | | | two | int(1) | YES | | NULL | | | three | int(1) | YES | | NULL | | | four | int(1) | YES | | NULL | | | five | int(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+
我正在尝试使用MySQL LOAD命令加载数据:
LOAD DATA …Run Code Online (Sandbox Code Playgroud) 我在Ubuntu 12 LTS上运行Mysql 5.5.我应该如何在my.cnf中启用LOAD DATA LOCAL INFILE?
我已经尝试在我的配置中在各个地方添加local-infile但是我仍然得到"这个MySQL版本不允许使用的命令"
我想避免使用mysqldump,因为它以一种只便于mysql读取的形式输出.CSV似乎更通用(每个表一个文件很好).但如果mysqldump有优势,我全都耳朵.另外,我想从命令行(linux)运行一些东西.如果这是一个mysql脚本,指向如何制作这样的东西会有所帮助.
有任何想法吗?
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) 我不明白其他人对类似问题的回答,除了最明显的问题,例如下面的问题:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
我的意思是提供了确切的代码。如果有人能一步一步地引导我了解在“客户端”端和“服务器”端启用本地数据需要做什么,我将不胜感激。好像我在客户端启用了本地数据,但我不知道我需要给我的电脑什么指令才能启用“服务器端”。我根本不精通技术,我只是希望能够将数据上传到 MySQL 工作台。
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE toys (
uniq_id VARCHAR(1000),
product_name VARCHAR(1000),
manufacturer VARCHAR(1000),
price VARCHAR(1000),
number_available_in_stock VARCHAR (1000),
number_of_reviews INT,
number_of_answered_questions INT,
average_review_rating VARCHAR(1000), …Run Code Online (Sandbox Code Playgroud) 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能够处理这个问题吗?
我遇到了这样的问题:错误代码:1290.MySQL服务器运行时带有--secure-file-priv选项,因此 当我尝试执行MySQL语句时,它无法执行此语句(Windows):
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE 'report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)
当我执行它时:
INTO OUTFILE 'report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)
然后它工作.此外,在INTO OUTFILE xxx重新安装MySQL服务器之前,实际工作的相同声明.
有人有想法如何处理这个错误?
我在Windows 10机器上运行MySQL 5.7.我已经阅读了关于这个主题的所有SO线程,但仍然没有弄清楚如何加载我的数据并通过此错误:
Error Code: 1290. The MySQL server is running with the --secure-file-priv
option so it cannot execute this statement
Run Code Online (Sandbox Code Playgroud)
我有1)检查设置以更改它们以便能够从我保存数据集的目录中加载,2)以管理员身份打开MySQL并检查命令行并确认安全文件确实指向我的目录,3)并在init文件中确认它指向包含我的文件的正确目录.我尝试更改数据集的位置,使其位于新文件夹中,并确认已使用上述方法将其移动到那里,但仍然无效.
欢迎任何和所有的帮助,谢谢.
有没有办法允许MySQL从多个目录加载数据而无需设置secure-file-priv=''?
例如,类似:
secure-file-priv="path/to/dir1","path/to/dir2"
Run Code Online (Sandbox Code Playgroud)
通过阅读文档,尚不清楚是否允许多个目录,以及是否允许多个目录。