我在 Perl 中创建了一个 ETL 工具。ETL 工具正在与之通信的三个数据库服务器,例如 dbserver1(OLTP 服务器 - Windows Box)、dbserver2(登台服务器 - linux Box)、dbserver3(OLAP 服务器、linux Box)。我的 ETL 脚本在 dbserver 2 上。
脚本从 dbserver1 读取数据并将其带入 dbserver2 进行一些转换,执行转换,然后将数据放入 dbserver3。为了实现这一点,脚本在 dbserver2 上创建了一些 OUTFILE 数据。所以有两种类型的 OUTFILE 查询:
- 在 dbserver1 上运行的 OUTFILE 查询在 dbserver2 上创建 .data 并
- 在 dbserver2 上运行的 OUTFILE 查询会在 dbserver2 上创建 .data 文件。
第二个查询工作正常,因为它在同一台服务器上创建一个文件。但是第一种类型的查询给了我以下错误:
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。