4

この投稿(http://stackoverflow.com/questions/1814297/cant-load-file-data-in-the-mysql-directory)を検索して見つけましたが、機能していません。

私はUbuntu12.04で、MySQLのバージョンは5.5.22-0ubuntu1です。

私はrootとしてMySQLにログインしているので、助成金はすべて問題ないはずです。

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+

テキストファイルからMySQLデータベースにデータを挿入しようとしていますが、LOAD_FILE関数が正しく機能していないようです

テストファイル、パーミッション777を作成し、インストールのルートにコピーしました(所有者/グループをroot:rootおよびmysql:mysqlに変更しようとしましたが、それでもうまくいきません):

mysql> select load_file('/test.txt');
+------------------------+
| load_file('/test.txt') |
+------------------------+
| NULL                   |
+------------------------+
1 row in set (0.00 sec)

しかし、私がこれを試してみると:

mysql> select load_file('/etc/hosts');

正常に動作します。テストファイルをコピーし/etcても失敗します。

誰かがこれを以前に見たことがありますか、またはデータベースにロードする別の方法を私に指摘することができますか?

4

4 に答える 4

1

を使用するload_fileには、次の条件が満たされている必要があります(ドキュメントから)。

  1. ファイルはサーバーホスト上にある必要があります
  2. ファイルへのフルパス名を指定する必要があり、FILE特権が必要です。
  3. max_allowed_packetファイルはすべての人が読み取れる必要があり、そのサイズはバイト未満である必要があります。
  4. secure_file_privシステム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。

実行するSQLステートメントがファイルに含まれている場合は、次の方法でファイルをパイプ処理する方が簡単です。

mysql -u foo -p dbname < filename.sql

于 2012-06-13T10:00:25.950 に答える
0

今後の参考のためにこれを追加します。おそらくOPには役立たないでしょう。

前に述べたように、AppArmorのせいです。load_file に必要なパスを、/etc/apparmor.d/usr.sbin.mysqld にある提供されたプロファイルにホワイトリストに登録する必要があります。apparmor.d のドキュメントは、ここにあります。AppArmor にはその理由があるため、これが推奨される方法です。

代替案:

  • これは非推奨の方法です。usr.sbin.mysqld プロファイルを無効にして、すべてのサービスを公開しないようにします。プロファイルを /etc/apparmor.d/disable にリンクするだけln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqldです。でプロファイルをリロードします/etc/init.d/apparmor restart。おそらく開発マシンにとっては理にかなっています。
  • 実際にAppArmor を必要としない場合、これは非常に推奨されない方法です。プロファイルは でアンロードできます/etc/init.d/apparmor teardown。でinitスクリプトを無効にしますupdate-rc.d -f apparmor remove

上記のものにはすべてルート権限が必要ですがsudo、すべてのコマンドの前にある繰り返しをスキップしました。

于 2014-02-24T14:01:25.820 に答える
0

私は MySQL の専門家ではありませんが、MySQL バージョン 5.5 には UBUNTU OS に関する問題があることに気付きました。

mysql docs LOAD_FILE()のドキュメントに従っても機能しませんでした。apparmour というサービスがあり、関数 LOAD_FILE() の実行を妨げています。そのサービスを停止しようとしましたが、それでも持続しました.....

これで問題が解決しないことはわかっていますが、少なくとも問題の場所を見つけるのに役立ちます......

于 2013-09-19T07:34:55.730 に答える