MySQL执⾏Select语句将结果导出到⽂件的⽅法
如果是对MySQL整个表数据导出,可以参照⽂章:
然⽽也会遇到的场景是,需要执⾏⼀个SQL语句,然后将SQL语句的结果输出到⽂件;
⽅法⼀:使⽤MySQL的select * into outfile ‘/’ from tb_name句型
这是个不可⾏的⽅法;
举个例⼦,执⾏以下的SQL语句:
1mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -e "use test; select * into outfile '/' from tb_test;"
这个SQL总会报出下⾯的错误:
1ERROR1045(28000)atline1:Accessdeniedforuser'crazyant'@'10.10.10.10'(usingpassword:YES)
原因是这个语句并不是在MySQL客户端,⽽是在MySQL的服务器上执⾏的,通常⽤于服务器管理员在服务器机器上进⾏数据备份使⽤,由于MySQL客户端账号并没有访问服务器机器本⾝的权限,所以这个SQL
执⾏不会成功。
⽅法2:直接将SQL执⾏的结果重定向到⽂件即可
执⾏下⾯的命令,能够将SQL语句执⾏的结果输出到⽂件:
1mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -Ne "use test; select * from tb_test;" > /
其中-Ne是执⾏这个SQL语句的选项,-N代表输出SQL语句执⾏结果中不带第⼀⾏的字段名称,-e表⽰要执⾏SQL语句;
执⾏下⾯的命令,则可以执⾏SQL⽂件,并把结果输出到⽂件:
新建⼀个⽂件,名称为runsql.sql,内容为:
1usetest;select *fromdb_test;
mysql中select
然后这样执⾏命令:
1mysql-h10.10.10.10-ucrazyant-p123456-P3306-N<runsql.sql> /
其中-N命令仍然表⽰不输出表头字段说明(第⼀⾏),⼩于号表⽰输⼊重定向,runsql.sql的⽂件内容会被发送给mysql的命令,⼤于号则表⽰输出重定向,会将命令执⾏的结果输出到⽂件;
导出csv⽂件,逗号分隔符:
1mysql-h10.10.10.10-ucrazyant-p123456-P3306-N<runsql.sql | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /
总结:
select into outfile只能在MySQL服务器上执⾏,客户端上⽆法执⾏;
mysql -Ne “sql” > rs.txt可以将SQL语句执⾏后输出为⽂件
mysql -N < runsql.sql > rs.txt可以执⾏sql⽂件中的内容,然后将结果输出到⽂件;mysql -N的选项,表⽰输出时不带表头