Mysql、outfile に関する問題、簡単な解決策、またはより良い方法はありますか?
-
04-10-2019 - |
質問
現時点では、DBからいくつかの文字列を取得してシェルにリストする単純なスクリプトをkshで作成しています。これは次のように動作するはずです。
- DB にすべてのデータを問い合わせる
- テキスト ファイルにエクスポートする
- 使用する ああ さまざまな列を表示するには
問題は、クエリを実行しているテーブルの 2 つのフィールドに文が含まれていることです。したがって、awk は、明らかに、異なる単語間の空白が列間の区切り文字であると「考えている」ため、次の解決策を思いつきました。
- SELECT * INTO OUTFILE "出力" FIELDS TERMINATED BY ',' FROM table
- awk を使用して結果をリストする (明らかに、区切り文字は「,」になっています)
しかし、ここで別の問題が発生しました。
- 使用しているmysqlユーザーにFILE権限を付与しました
- mysql 777 に書き込むべきディレクトリを渡します。
それでも、次のエラーが表示されます。
'パス':ファイル 'file' を作成または書き込みできません (エラーコード:13)
これにイライラして、答えを見つけるためにネットサーフィンを始めたところ、「不完全な」答えを見つけました。特定のサイトでは、次のことを提案しています。
chown ルート:root /tmp
chmod 1777 /tmp
/etc/init.d/mysqld 開始
この解決策が /tmp で正常に動作するのであれば、選択した他のディレクトリでも問題はないはずだと思いました。明らかに私は完全に間違っていました:)。outfile オプションに指定しているパスが /tmp/'file' であれば問題はありませんが、他のパスを指定すると前のエラーが返されます。それで、私は問題の「解決策」を見つけたでしょうか?確かにそうですが、このスクリプトを使用するには次のことを行う必要があります。
- FILE権限を持つmysqlユーザーがいる
- /tmp 内のファイルを「rm」する権限を持っています (mysql の出力ファイルは一時的なものです)
そして、私はこれが甘くて良いものだとは思いません。それで、私があなたに何を尋ねているのですか?次の:
- mysql にファイルを任意の場所に強制的に書き込むにはどうすればよいですか?
- 私の提案よりも実行可能で「魅力的な」解決策はありますか?
ああ、Ubuntu 10.4を使用しています。助けていただきありがとうございます。
解決
より良い解決策は、出力をリダイレクトすることです。
mysql --default-character-set=utf8 -uuser -ppass -s -e "SELECT * FROM mytable;" > results.txt
注意してください -s
オプション:
-s, --silent Be more silent. Print results with a tab as separator,
each row on new line.
所属していません StackOverflow