2016-04-19 36 views
0

DBにファイルをロードしようとしています。データをSQLデータベースにロードするときのErrcode:13

CREATE TEMPORARY TABLE IF NOT EXISTS tt_emails (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    util_account_id VARCHAR(40) NULL, 
    email VARCHAR(344) NOT NULL, 
    optout INT NOT NULL 
    ); 

LOAD DATA INFILE '/shared/implementation/emails.tsv' 
    INTO TABLE tt_emails (util_account_id, email, optout); 

emails.tsvファイルには3つの列がありますが、私が作成した一時表には4つあります。これは正しい構文であるかどうかは分かりません。私はIDの主キー列を持つために4番目の列を含めました。

私はこのコードを実行するとき、私は次のエラーを取得する:

ERROR 13 (HY000): Can't get stat of '/nfs/shared/implementation/ngma/CO-48812_NGMA_Load_email/exclude_emails.tsv' (Errcode: 13) 
+1

"can not get stat" - mysqlユーザアカウント(mysqlにログインしているアカウントではなくシステムアカウント)は、そのファイルに至るパスの全部または一部に対する権限を持っていません。 –

答えて

0

これは、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ユーザが実行しようとしているファイルへのアクセスを禁止しています。

関連する問題