2011-01-20 12 views
12

私は立ち往生しています。基本的には、OUTFILEコマンドを使用してリモートデータベースからLOCALデータファイル(csvファイル)を作成します。リモートデータベースからローカルホストへのmysqlダンプ

私は基本的にはデータをプルしていますが、リモートサーバー上でoutfileを作成するのに対してローカルファイルサーバーで作成したいと考えています。私はスペースが限られているので、ファイルをローカルに作成したい。私はこれをどうやって行方不明になっていますか?ありがとう!

これは(それは私がしたいファイルを作成されますが、リモートサーバ上の)コマンドラインで、これまでの私の作業構文です

mysql -u test -pfoo --database test -h testdb201.name.host.com --port 3306 -ss -e "SELECT 'a','b','c' UNION SELECT col1, col2, col3 INTO OUTFILE '/tmp/mytest.csv' FIELDS TERMINATED BY ',' FROM tst_p000 limit 10" 
+0

リモートサーバーまたはローカルサーバーでこのコマンドを実行していますか? – Raghuram

+0

私は実行可能だとは思わない、あなたはデータベースサーバーにsshのログインを持っていますか? – ajreal

+0

ローカルサーバー上でこのコマンドを実行しています。すべてのsshキーが正しく動作しています。私は、ファイルをダンプすることができますが、リモートサーバー上に。私は今OUTFILEがdbのサーバーにローカルであることを見ている。 – jdamae

答えて

19

MySQL Select syntaxによると、あなたが出力にOUTFILE使用することはできませんがサーバー自体の外部にあるファイルに送信します。

クエリのタブ区切りの出力をこの(sed command credited here)のようなCSV形式に変換する必要があります。

mysql -u test -pfoo --database test -h testdb201.name.host.com --port 3306 -ss -e "SELECT 'a','b','c' UNION SELECT col1, col2, col3 " | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > myDump.csv 
+0

甘い!素敵なトリック。私はsedでうまかったと思う。魅力のように働く。ご協力いただきありがとうございます! – jdamae

+1

あなたはsedの構文を精緻化できますか?再度、感謝します! – jdamae

+1

イメージsedコマンドは4つの部分に分割され、それぞれがセミコロンで区切られています。 sedコマンドの最初の部分は、すべてのタブを "、"(引用符を含む)に置き換えます。 2番目の部分は、すべての開始行を二重引用符で置き換えます。 3番目の部分は、すべての終了行を二重引用符で置き換えます。最後の部分は、すべての改行をクエリから削除します。 –

関連する問題