如果是对mysql整个表数据导出,可以参照文章:http://www.crazyant.net/1355.html
然而也会遇到的场景是,需要执行一个sql语句,然后将sql语句的结果输出到文件;
方法一:使用mysql的select * into outfile ‘/tmp/rs.txt’ from tb_name句型
这是个不可行的方法;
举个例子,执行以下的sql语句:
mysql -h10.10.10.10 -ucrazyant -p123456 -p3306 -e use test; select * into outfile '/tmp/rs.txt' from tb_test;
mysql-h10.10.10.10-ucrazyant-p123456-p3306-euse test; select * into outfile '/tmp/rs.txt' from tb_test;
这个sql总会报出下面的错误:
error 1045 (28000) at line 1: access denied for user 'crazyant'@'10.10.10.10' (using password: yes)
error1045(28000)atline1:accessdeniedforuser'crazyant'@'10.10.10.10'(usingpassword:yes)
原因是这个语句并不是在mysql客户端,而是在mysql的服务器上执行的,通常用于服务器管理员在服务器机器上进行数据备份使用,由于mysql客户端账号并没有访问服务器机器本身的权限,所以这个sql执行不会成功。
方法2:直接将sql执行的结果重定向到文件即可执行下面的命令,能够将sql语句执行的结果输出到文件:
mysql -h10.10.10.10 -ucrazyant -p123456 -p3306 -ne use test; select * from tb_test; > /tmp/rs.txt
mysql-h10.10.10.10-ucrazyant-p123456-p3306-neuse test; select * from tb_test;>/tmp/rs.txt
其中-ne是执行这个sql语句的选项,-n代表输出sql语句执行结果中不带第一行的字段名称,-e表示要执行sql语句;
执行下面的命令,则可以执行sql文件,并把结果输出到文件:
新建一个文件,名称为runsql.sql,内容为:
use test; select * from db_test;
usetest;select *fromdb_test;
然后这样执行命令:
mysql -h10.10.10.10 -ucrazyant -p123456 -p3306 -n /tmp/rs.txt
mysql-h10.10.10.10-ucrazyant-p123456-p3306-n/tmp/rs.txt
其中-n命令仍然表示不输出表头字段说明(第一行),小于号表示输入重定向,runsql.sql的文件内容会被发送给mysql的命令,大于号则表示输出重定向,会将命令执行的结果输出到文件;
总结:
select into outfile只能在mysql服务器上执行,客户端上无法执行;mysql -ne “sql” > rs.txt可以将sql语句执行后输出为文件mysql -n rs.txt可以执行sql文件中的内容,然后将结果输出到文件;mysql -n的选项,表示输出时不带表头