若是是對MySQL整個表數據導出,能夠參照文章:http://www.crazyant.net/1355.html
然而也會遇到的場景是,須要執行一個SQL語句,而後將SQL語句的結果輸出到文件;
方法一:使用MySQL的select * into outfile ‘/tmp/rs.txt’ from tb_name句型
這是個不可行的方法;
舉個例子,執行如下的SQL語句:html
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -e "use test; select * into outfile '/tmp/rs.txt' from tb_test;"
這個SQL總會報出下面的錯誤:mysql
ERROR 1045 (28000) at line 1: Access denied for user 'crazyant'@'10.10.10.10' (using password: YES)
緣由是這個語句並非在MySQL客戶端,而是在MySQL的服務器上執行的,一般用於服務器管理員在服務器機器上進行數據備份使用,因爲MySQL客戶端帳號並無訪問服務器機器自己的權限,因此這個SQL執行不會成功。sql
方法二:直接將SQL執行的結果重定向到文件便可服務器
執行下面的命令,可以將SQL語句執行的結果輸出到文件:.net
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,內容爲:code
use test; select * from db_test;
而後這樣執行命令:htm
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -N < runsql.sql > /tmp/rs.txt
其中-N命令仍然表示不輸出表頭字段說明(第一行),小於號表示輸入重定向,runsql.sql的文件內容會被髮送給mysql的命令,大於號則表示輸出重定向,會將命令執行的結果輸出到文件;test
總結:
select into outfile只能在MySQL服務器上執行,客戶端上沒法執行;
mysql -Ne 「sql」 > rs.txt能夠將SQL語句執行後輸出爲文件
mysql -N < runsql.sql > rs.txt能夠執行sql文件中的內容,而後將結果輸出到文件;
mysql -N的選項,表示輸出時不帶表頭file