若是是对MySQL整个表数据导出,能够参照文章:http://www.crazyant.net/1355.htmlhtml
然而也会遇到的场景是,须要执行一个SQL语句,而后将SQL语句的结果输出到文件;mysql
这是个不可行的方法;git
举个例子,执行如下的SQL语句:github
1
|
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -e "use test; select * into outfile '/tmp/rs.txt' from tb_test;"
|
这个SQL总会报出下面的错误:sql
1
|
ERROR1045(28000)atline1:Accessdeniedforuser'crazyant'@'10.10.10.10'(usingpassword:YES)
|
缘由是这个语句并非在MySQL客户端,而是在MySQL的服务器上执行的,一般用于服务器管理员在服务器机器上进行数据备份使用,因为MySQL客户端帐号并无访问服务器机器自己的权限,因此这个SQL执行不会成功。服务器
执行下面的命令,可以将SQL语句执行的结果输出到文件:post
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语句;spa
执行下面的命令,则能够执行SQL文件,并把结果输出到文件:.net
新建一个文件,名称为runsql.sql,内容为:code
1
|
usetest;select *fromdb_test;
|
而后这样执行命令:
1
|
mysql-h10.10.10.10-ucrazyant-p123456-P3306-N<runsql.sql> /tmp/rs.txt
|
其中-N命令仍然表示不输出表头字段说明(第一行),小于号表示输入重定向,runsql.sql的文件内容会被发送给mysql的命令,大于号则表示输出重定向,会将命令执行的结果输出到文件;
导出csv文件,逗号分隔符:
1
|
mysql-h10.10.10.10-ucrazyant-p123456-P3306-N<runsql.sql | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/rs.txt
|
总结: