8

テーブルから csv にデータをエクスポートする必要があります。私は次の構造を持っています(実際には私のテーブルではありませんが、デモ用です)

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

データ付き (約 3000 レコード)。今、これらのレコードのいくつかをエクスポートしたい (cronjob を介して実行するスクリプトから)

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

それが示している:

Query OK, 3 rows affected (0.00 sec)

それから私は:

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

私のファイルはどこですか?

4

1 に答える 1

8

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

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

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

または - 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

于 2012-01-26T02:11:53.757 に答える