これは、UNIX/Linuxのファイルシステムのアクセス権の問題です。
オペレーティングシステムでは、指定したファイルにアクセスするためのOSユーザー権限が許可されていません。
ファイルへのパス内のすべてのディレクトリに対するアクセス許可は、少なくともread + executeでなければならず、ファイル自体のアクセス許可は少なくとも読み取られていなければなりません。
ファイルにアクセスしようとしているOSユーザは、MySQLサーバプロセスが実行されているunix/linuxユーザアカウントです。 (それはしばしば「mysqlの」ですが、それはする必要はありません、それは本当にMySQLのがインストールされたかに依存し、セットアップ。
MySQLサーバホスト上のシェルプロンプトから、
ps -ef | grep mysqld
実行出力は、mysqldを含む行を含める必要がありますたとえば、:。
mysql 2247 1233 0 Mar21 ? 00:24:09 /opt/mysql/bin/mysqld --basedir=/opt/...
出力の最初のフィールドは、MySQLサーバがもとで実行されていることをOSユーザーを示し、この場合には、それはOSユーザー「mysqlの」
です。
"mysql"としてOSにログインするか、 "su - mysql"を実行してそのユーザーに切り替えると、同じファイルにアクセスする際に同じアクセス権の問題が発生します。
/nfs/shared/implementation/ngma/CO-48812_NGMA_Load_email/exclude_emails.tsv
どちらのOSのユーザーによって「+読み実行」許可していないファイルを読むためにOSユーザー「mysqlの」許可されていないファイルのパーミッション、またはファイル上記のディレクトリのパーミッション」 mysql "
ディレクトリとファイルに対するアクセス許可を適切に変更する必要があります。クルージ的な回避策として
、/ tmpのにファイルをコピー(シェルプロンプトから、ファイルのアクセス権を「読み」持っているOSユーザーとしてログイン)。/tmpディレクトリには、OSユーザー「mysqlの」
cp /nfs/shared/implementation/ngma/CO-48812_NGMA_Load_email/exclude_emails.tsv /tmp/
そしてあなたは、ファイルを読むためにOSユーザー「mysqlの」許可するファイルのパーミッションを変更することができます含め、誰もが「実行+読み取り」許可する必要があります。誰でもファイルを読めるようにするには:
chmod ugo+r /tmp/exclude_emails.tsv
そして、MySQLサーバに接続し、新しい/tmp/exclude_emails.tsvファイルを参照unningにLOAD DATAをしてみてください。
「mysql」ユーザ(またはmysqldが実行されているOSユーザ)が必要な権限を持ち、その中にあるすべてのディレクトリに対して、元のファイルに適切な権限を設定することもできますパス。
要約すると...これは実際にはMySQLサーバの問題ではありません。これは、オペレーティングシステムの権限に問題があり、mysql OSユーザが実行しようとしているファイルへのアクセスを禁止しています。
"can not get stat" - mysqlユーザアカウント(mysqlにログインしているアカウントではなくシステムアカウント)は、そのファイルに至るパスの全部または一部に対する権限を持っていません。 –