若是是對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
|
總結: