PHPでは常にMySQLクエリを使用しますが、LOAD DATA INFILEを試行すると、次のエラーが表示されます#1045 - Access denied for user 'user'@'localhost' (using password: YES)
私もこの問題に出くわしました。 SQLステートメントに「LOCAL」を追加する必要がありました。
たとえば、これは許可の問題を与えます:LOAD DATA INFILE '{$file}' INTO TABLE {$table}
ステートメントに「LOCAL」を追加すると、権限の問題はなくなります。そのようです:LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
この問題がありました。私はあちこち検索しましたが、満足のいく答えは見つかりませんでした。検索結果を以下に要約します。
アクセス拒否エラーの意味は次のとおりです。
GRANT FILE on *.* to user@'localhost'
);または、次のコマンドを使用してみてください。
load data local infile 'home/data.txt' into table customer;
これは動作するはずです。私の場合はうまくいきました。
MySQLユーザーにFILE権限が付与されていることを確認してください。
共有Webホスティングを使用している場合、これがホスティングプロバイダーによってブロックされる可能性があります。
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();
これは私にも起こり、Yamirの投稿で説明されているすべての手順を実行したにもかかわらず、機能しませんでした。
ファイルは/tmp/test.csvにあり、777のアクセス許可があります。 MySQLユーザーにはファイル権限があり、LOCALオプションはMySQLバージョンで許可されていなかったため、立ち往生しました。
最後に、次を実行することで問題を解決できました。
Sudo chown mysql:mysql /tmp/test.csv
私は同じ問題に遭遇し、それらの手順を実行することで解決します:
この3番目のポイントについては、次を参照できます。 https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR、
広告
MySQLテーブルの読み込みは高速で簡単であることがわかりました(python/Djangoモデルマネージャスクリプト)を使用していました):
1)すべての列がVARCHAR(n)NULLのテーブルを作成します。例:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2)csvからヘッダー(最初の行)を削除し、ロードします(LOCALを忘れると、「#1045-ユーザー 'user' @ 'localhost'のアクセスが拒否されました(パスワード:YES)」が表示されます)。
mysql> LOAD DATA LOCAL INFILE "/home/magula6/cogswatch2/well2.csv" INTO TABLE cw_well2 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' -> ; Query OK, 119426 rows affected, 19962 warnings (3.41 sec)
3)列の変更:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
ほら!