Perl で ETL ツールを作成しました。ETL ツールが通信する 3 つのデータベース サーバーがあります。たとえば、dbserver1 (OLTP サーバー - Windows ボックス)、dbserver2 (ステージング サーバー - Linux ボックス)、dbserver3 (OLAP サーバー、Linux ボックス) です。私の ETL スクリプトは dbserver 2 にあります。
スクリプトは、dbserver1 からデータを読み取り、いくつかの変換のために dbserver2 に取り込み、変換を実行してから、データを dbserver3 に入れます。これを実現するために、スクリプトは dbserver2 にいくつかの OUTFILE データを作成します。したがって、OUTFILE クエリには次の 2 つのタイプがあります。
- dbserver1 で実行される OUTFILE クエリは、dbserver2 に .data を作成し、
- dbserver2 で実行される OUTFILE クエリは、dbserver2 に .data ファイルを作成します。
2 番目のクエリは、同じサーバー上にファイルを作成しているため、正常に機能します。しかし、最初のタイプのクエリでは、次のエラーが発生します。
DBD::mysql::st execute failed: Can't create/write to file '\home\dbserver2\dumpfile.2011-11-04-03:02.data' (Errcode: 2) at stagingtransform.pl line 223, <> line 8.
これは、いくつかのユーザー権限に関連していると思います。私が間違っていなければ、dbserver2 の MySQL には dbserver2 への読み取り/書き込み権限がありますが、dbserver1 の MySQL にはありません。
dbserver1 が Windows で dbserver2 が Linux ボックスであるためでしょうか?
どうすればこれを解決できますか?
参考までに: ファイル形式は次のとおりです: dumpfile.yyy-mm-dd-hh:mm.data また、dbserver2 の MySQL の AppArmor 設定を dbserver2 の MySQL に設定しました。