119

私はPHPで常にMySQLクエリを使用していますが、試してみると

LOAD DATA INFILE

次のエラーが発生します

#1045-ユーザー'user' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

これが何を意味するのか誰か知っていますか?

4

11 に答える 11

224

私もこの問題に遭遇しました。LOCALSQL ステートメントに追加する必要がありました。

たとえば、これによりパーミッションの問題が発生します。

LOAD DATA INFILE '{$file}' INTO TABLE {$table}

ステートメントに追加LOCALすると、権限の問題は解消されます。そのようです:

LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
于 2010-11-12T06:59:49.237 に答える
35

この問題がありました。私は周りを検索しましたが、満足のいく答えは見つかりませんでした。以下に検索結果をまとめます。

アクセス拒否エラーは、次のことを意味している可能性があります。

  • 'user'@'localhost' には FILE 権限がありません ( GRANT FILE on *.* to user@'localhost')。また、
  • ロードしようとしているファイルは、mysql サーバーを実行しているマシンに存在しません (LOAD DATA INFILE を使用している場合)。また、
  • ロードしようとしているファイルがローカル マシンに存在しない (LOAD DATA LOCAL INFILE を使用している場合)。また、
  • ロードしようとしているファイルは誰でも読み取り可能ではありません (ファイルとすべての親ディレクトリを誰でも読み取り可能にする必要があります: chmod 755 ディレクトリ、および chmod 744 file.dat)。
于 2013-05-27T01:42:49.113 に答える
10

MySQL ユーザーに FILE 権限が付与されていることを確認します。

共有 Web ホスティングを使用している場合、ホスティング プロバイダーによってブロックされる可能性があります。

于 2010-02-08T23:46:22.940 に答える
3

Lyon からの文字列は、非常に良いヒントを与えてくれました。Windows では、バックスラッシュではなくスラッシュを使用する必要があります。このコードは私のために働きます:

    File tempFile = File.createTempFile(tableName, ".csv");
    FileUtils.copyInputStreamToFile(data, tempFile);

    JdbcTemplate template = new JdbcTemplate(dataSource);
    String path = tempFile.getAbsolutePath().replace('\\', '/');
    int rows = template.update(MessageFormat
            .format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''",
                    path, tableName));
    logger.info("imported {} rows into {}", rows, tableName);

    tempFile.delete();
于 2013-08-09T17:50:28.763 に答える
2

これは私にも起こり、ヤミールが彼の投稿で説明したすべての手順に従ったにもかかわらず、機能させることができませんでした.

ファイルは /tmp/test.csv にあり、アクセス許可は 777 でした。MySQL ユーザーにはファイル権限があり、MySQL バージョンでは LOCAL オプションが許可されていなかったため、行き詰まりました。

最後に、次を実行して問題を解決できました。

sudo chown mysql:mysql /tmp/test.csv
于 2017-08-21T15:02:46.950 に答える
-6

指定したパスワード'user'@'localhost'が間違っている可能性があります。

于 2010-02-08T11:55:42.343 に答える