MySQL执行Select语句将结果导出到文件的方法

如果是对MySQL整个表数据导出,可以参照文章:http://www.crazyant.net/1355.html


然而也会遇到的场景是,需要执行一个SQL语句,然后将SQL语句的结果输出到文件;


方法一:使用MySQL的select * into outfile ‘/tmp/rs.txt’ from tb_name句型


这是个不可行的方法;


举个例子,执行以下的SQL语句:




1
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -e "use test; select * into outfile '/tmp/rs.txt' from tb_test;"
这个SQL总会报出下面的错误:




1
ERROR 1045 (28000) at line 1: Access denied for user 'crazyant'@'10.10.10.10' (using password: YES)
原因是这个语句并不是在MySQL客户端,而是在MySQL的服务器上执行的,通常用于服务器管理员在服务器机器上进行数据备份使用,由于MySQL客户端账号并没有访问服务器机器本身的权限,所以这个SQL执行不会成功。


方法2:直接将SQL执行的结果重定向到文件即可


执行下面的命令,能够将SQL语句执行的结果输出到文件:




1
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -Ne "use test; select * from tb_test;" > /tmp/rs.txt
其中-Ne是执行这个SQL语句的选项,-N代表输出SQL语句执行结果中不带第一行的字段名称,-e表示要执行SQL语句;


执行下面的命令,则可以执行SQL文件,并把结果输出到文件:


新建一个文件,名称为runsql.sql,内容为:




1
use test; select * from db_test;
然后这样执行命令:




1
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -N < runsql.sql > /tmp/rs.txt
其中-N命令仍然表示不输出表头字段说明(第一行),小于号表示输入重定向,runsql.sql的文件内容会被发送给mysql的命令,大于号则表示输出重定向,会将命令执行的结果输出到文件;


总结:


select into outfile只能在MySQL服务器上执行,客户端上无法执行;
mysql -Ne “sql” > rs.txt可以将SQL语句执行后输出为文件
mysql -N < runsql.sql > rs.txt可以执行sql文件中的内容,然后将结果输出到文件;
mysql -N的选项,表示输出时不带表头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值