2012-01-26 7 views
8

テーブルからcsvにデータをエクスポートする必要があります。私は次の構造を持っています。実際のテーブルはデモ目的のものです。mysqlエクスポート後にファイルが見つかりません

CREATE TABLE `mytable` (
    `id` int(11) DEFAULT NULL, 
    `mycolumn` varchar(25) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

データあり(約3000レコード)

Query OK, 3 rows affected (0.00 sec) 

は、私が行う:

ls: cannot access /tmp/mytable.sql: No such file or directory 

ところ、私のファイルがある今、私は(私はcronジョブ経由で実行するスクリプトから)これらのレコードの一部

SELECT * INTO OUTFILE '/tmp/mytable.sql' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM mytable; 

それが示しをエクスポートします?

+1

は、/ tmpフォルダを払拭他のスクリプトの実行がありますか? –

+0

@CornelGhiban no –

答えて

8

INTO OUTFILEコマンドを使用すると、クエリを実行しているサーバーではなくサーバーのローカルフォルダにデータがエクスポートされます。

例:お使いのコンピュータ(ip:192.168.0.100)に接続し、mysqlコマンド(mysql -uuser -h192.168.0.101 -A database)を使用してmysqlserver(ip:192.168.0.101)に接続します。 SELECT * INTO OUTFILEを実行すると、ファイルはmysqlserver(ip:192.168.0.101)に保存され、コンピュータ(192.168.0.100)には保存されません。

これで、すべてのデータを選択してファイルを生成し、scpを介して他のサーバーに送信することで、CSVファイルを作成するスクリプトを使用できます。

または、NFSを/shared/にマウントして、ファイルを自動的に作成するときに、他のサーバーにもそのファイルが作成されます。

または、最初のサーバーからこのようなbashスクリプトでmysqlコマンドを実行するだけで済みます。

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv 

ソース:http://tlug.dnho.net/node/209

+0

任意の推奨されるソリューションですか? –

+1

大量のデータ(たくさんのファイルのような)を生成する必要がある場合、NFSは良い解決策です。 "csvファイルを生成する"は非常に簡単に作成することができ、paramsなどのようにカスタマイズすることができます。コマンドラインでは、非常に簡単で高速ですが、二重引用符などの文字を注意する必要がありますデバッグするのが少し難しい(SEDコマンドで)。 –

+0

私は今、mysqlサーバのファイルを参照してください、私はあなたの助けを感謝することは決してないだろう、私は病気csvにファイルを生成すると思う。 –

関連する問題