質問

mysqlは素晴らしいです!私は現在、主要なサーバーの移行に関与しており、以前は小さなデータベースがクライアントと同じサーバーでホストされていました。
だから私たちはこれを行っていました: SELECT * INTO OUTFILE .... LOAD DATA INFILE ....

次に、データベースを別のサーバーに移動し、 SELECT * INTO OUTFILE .... もはや機能していない、理解できる - 私が信じているセキュリティ上の理由。しかし、興味深いことに LOAD DATA INFILE .... に変更できます LOAD DATA LOCAL INFILE .... そしてバム、それは機能します。

私は不平を言っていませんし、mysqlに対する嫌悪感を表明していません。追加の2行の追加コードとシステムコールフォームA .SQLスクリプトに代わるもの。私が知りたかったのはその理由だけです LOAD DATA LOCAL INFILE 作品と、なぜそうなのか SELECT INTO OUTFILE LOCAL?

私は宿題をしましたが、上記の質問に対する直接的な答えが見つかりませんでした。機能リクエストも見つかりませんでした @ mysqlも見つかりませんでした。誰かがそれをクリアすることができれば、それは素晴らしいことでした!

Mariadbはこの問題を処理できますか?

役に立ちましたか?

解決

マニュアルから: The SELECT ... INTO OUTFILE ステートメントは、主にサーバーマシンのテキストファイルにテーブルを非常にすばやくダンプできるようにすることを目的としています。サーバーホスト以外のクライアントホストに結果のファイルを作成する場合は、使用できません SELECT ... INTO OUTFILE. 。その場合、代わりに次のようなコマンドを使用する必要があります mysql -e "SELECT ..." > file_name クライアントホストにファイルを生成するには。」

http://dev.mysql.com/doc/refman/5.0/en/select.html

例:

mysql -h my.db.com -u usrname--password=pass db_name -e 'SELECT foo FROM bar' > /tmp/myfile.txt

他のヒント

渡された-s( - silent)オプションを使用して、mysqlコンソールで必要なものを実現できます。

特殊なキャラクターが逃げられないように、-R( - raw)オプションも渡すことをお勧めします。これを使用して、あなたが望んでいるようにクエリをパイプすることができます。

mysql -u username -h hostname -p -s -r -e "select concat( 'this'、 ''、 'works')"

編集:また、出力から列名を削除する場合は、別の-sを追加するだけです(mysql -ss -rなど)

あなたが与える道 LOAD DATA INFILE 接続するマシンではなく、サーバーが実行されているマシン上のファイルシステム用です。 LOAD DATA LOCAL INFILE クライアントのマシン用ですが、サーバーが適切な設定で開始される必要があります。それ以外の場合は許可されていません。あなたはそれについてすべてここで読むことができます: http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html

はどうかと言うと SELECT INTO OUTFILE なぜローカルバージョンがないのかはわかりませんが、それに加えて、おそらく接続を介してやるのが難しいでしょう。同じ機能を介して取得できます mysqldump ツールですが、サーバーにSQLを送信することではありません。

waverly360として-eオプションを使用してmysql CLIを使用することは良いものであることを示唆していますが、それは記憶から外れて大規模な結果で殺される可能性があります。 (その背後にある理由を見つけていません)。その場合、すべてのレコードが必要な場合、私の解決策は次のとおりです。MySqlDump + mysqldump2csv:

wget https://raw.githubusercontent.com/jamesmishra/mysqldump-to-csv/master/mysqldump_to_csv.py
mysqldump -u username -p --host=hostname database table | python mysqldump_to_csv.py > table.csv

Re:outfileに *を選択します

MySQLがサーバー上のOutfileディレクトリにファイルを書き込む権限があるかどうかを確認します。

私はこの正確な問題をかなり定期的に探していることに気づいたので(以前に何かを逃したことを期待して...)、ついに時間をかけて書き上げることにしました CSVファイルとしてMySQLクエリをエクスポートするための小さな要点, 、ちょっと好きです https://stackoverflow.com/a/28168869 しかし、PHPに基づいて、さらにいくつかのオプションがあります。これは私のユースケースにとって重要でした。なぜなら、私はCSVパラメーター(デリミッター、ヌル値処理)を微調整できる必要があり、ファイルが実際に有効なCSVである必要があるため、単純なものにする必要があるため CONCAT 値にラインの破損またはCSVデリミターが含まれている場合、有効なCSVファイルが生成されないため、十分ではありません。

注意:サーバーにPHPをインストールする必要があります!(介してチェックできます php -v)

"インストール" mysql2csv 経由

wget https://gist.githubusercontent.com/paslandau/37bf787eab1b84fc7ae679d1823cf401/raw/29a48bb0a43f6750858e1ddec054d3552f3cbc45/mysql2csv -O mysql2csv -q && (sha256sum mysql2csv | cmp <(echo "b109535b29733bd596ecc8608e008732e617e97906f119c66dd7cf6ab2865a65  mysql2csv") || (echo "ERROR comparing hash, Found:" ;sha256sum mysql2csv) ) && chmod +x mysql2csv

(GISTのコンテンツをダウンロードし、チェックサムをチェックし、実行可能にします)

使用例

./mysql2csv --file="/tmp/result.csv" --query='SELECT 1 as foo, 2 as bar;' --user="username" --password="password"

ファイルを生成します /tmp/result.csv コンテンツ付き

foo,bar
1,2

参照のためのヘルプ

./mysql2csv --help
Helper command to export data for an arbitrary mysql query into a CSV file.
Especially helpful if the use of "SELECT ... INTO OUTFILE" is not an option, e.g.
because the mysql server is running on a remote host.

Usage example:
./mysql2csv --file="/tmp/result.csv" --query='SELECT 1 as foo, 2 as bar;' --user="username" --password="password"

cat /tmp/result.csv

Options:
        -q,--query=name [required]
                The query string to extract data from mysql.
        -h,--host=name
                (Default: 127.0.0.1) The hostname of the mysql server.
        -D,--database=name
                The default database.
        -P,--port=name
                (Default: 3306) The port of the mysql server.
        -u,--user=name
                The username to connect to the mysql server.
        -p,--password=name
                The password to connect to the mysql server.
        -F,--file=name
                (Default: php://stdout) The filename to export the query result to ('php://stdout' prints to console).
        -L,--delimiter=name
                (Default: ,) The CSV delimiter.
        -C,--enclosure=name
                (Default: ") The CSV enclosure (that is used to enclose values that contain special characters).
        -E,--escape=name
                (Default: \) The CSV escape character.
        -N,--null=name
                (Default: \N) The value that is used to replace NULL values in the CSV file.
        -H,--header=name
                (Default: 1) If '0', the resulting CSV file does not contain headers.
        --help
                Prints the help for this command.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top