11

SQL LOAD_FILE関数を機能させたいと思っており、これに関するすべての質問/回答とドキュメントを読みましたが、これが起こっていることです。

ホームディレクトリからLOAD_FILEしたい場合:

mysql> SELECT LOAD_FILE('/home/myuser/somefile.txt');
+----------------------------+
| LOAD_FILE('/home/myuser/somefile.txt') |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (0.00 sec)

これを入手した後、おそらく問題は MySQL がホーム ディレクトリにアクセスできないことだと思いました。そして、これを実行してみましたが、うまくいきました:

SELECT LOAD_FILE('/etc/mysql/my.cnf');

その後SELECT LOAD_FILE('/etc/passwd');もうまくいきました。

だから私は言いました、それはファイル/フォルダーの読み取り/所有権の問題です。そのため、ファイルを /etc/mysql/ に移動しましたが、それでも機能しませんでした。私は試しましchown mysql:mysql somefile.txtたが、それでも運がありませんでした:

mysql> SELECT LOAD_FILE('/etc/mysql/somefile.txt');
+----------------------------+
| LOAD_FILE('/etc/mysql/somefile.txt') |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (0.00 sec)

PS 1.すべてのユーザー グループがすべてのファイルを読み取ることができるため、chmod を実行する必要はありません。しかし、お聞きになりたい場合は、 chmod 777も試してみました。2. MySQL で secure-file-priv 変数が設定されていないことを確認したため、いいえ、LOAD_FILE はどのパスにも制限されていません。

ここで何が問題になる可能性がありますか?

4

5 に答える 5

8

AppArmor と関係があることがわかりました。MySQL の AppArmor を無効にしましたが、うまくいきました。同じ問題を抱えている人は、こちらをお読みください: http://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/

于 2014-06-27T23:06:27.430 に答える
3

ドキュメントごと

この機能を使用するには、ファイルがサーバー ホストに配置されている必要があります。

ファイルへの絶対パス名を指定する必要があります。

FILE 権限が必要です。

ファイルは全員が読み取り可能である必要があります

max_allowed_packetファイル サイズはバイト未満である必要があります。

secure_file_priv システム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。

ファイルが存在しないか、前述の条件のいずれかが満たされていないために読み取ることができない場合、関数は NULL を返します

したがって、上記のすべての条件が満たされていることを確認してください。

編集:

あなたが正しく理解したかどうかわからない..

  1. ファイルの親ディレクトリに実行権限があることを確認してください。したがって、ディレクトリsomefile.txtの下にある場合。ディレクトリmyuserに対する実行権限が必要です。myuser

  2. You must have the FILE privilege.を使用して明示的に FILE 権限を付与する必要があることを意味します。GRANT FILE on . TO user@localhost

  3. 特権をフラッシュする

  4. ログアウトして再度ログインし、機能しているかどうかを確認します。

この投稿を参照してくださいMySQL LOAD_FILE() は null 値をロードします

于 2014-06-27T19:14:44.947 に答える
0

Load data infile file_name... は、MySQL の適切なコマンドです。また、ファイル内のデータの例を示していないため、それを正確に使用することを知っていることを示すことはできません. 区切り文字と行末特性を処理する変数があります。幸運を。

于 2014-06-27T20:01:15.853 に答える