我已经创建了Perl中的ETL工具。有三个数据库服务器与ETL工具进行通信,例如dbserver1(OLTP服务器 - Windows Box),dbserver2(临时服务器 - linux Box),dbserver3(OLAP服务器,linux Box)。我的ETL脚本位于dbserver 2上。MySQL的错误代码2 Perl脚本
脚本从dbserver1中读取数据并将其带入dbserver2以执行某些转换,然后执行转换,然后将数据放入dbserver3中。为了实现这个脚本,在dbserver2上创建了一些OUTFILE数据。所以有两种类型OUTFILE查询:运行于dbserver1
- OUTFILE查询,创建。数据上dbserver2和 运行于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的盒子?
我怎样才能解决这个问题?
仅供参考:文件formate是:dumpfile.yyy-mm-dd-hh:mm.data并且我还为dbserver2上的MySQL设置了AppArmor设置,该设置适用于dbserver2上的MySQL。
谢谢niczero。数据是巨大的,因为它有大约2000万条记录,而且速度会更慢如果我使用上述方法,我猜...同时mysqldump将需要时间从dbserver1导入到dbserver2。在ETL工具操作之间使用mysqldump会很繁琐。没有任何问题。我会试试这个。 – srahul07
还有一件事,dbserver2具有OUTFILE查询,其数据ETL将使用INFILE写入dbserver3。这是否会导致有关权限的任何问题,如OUTFILE的这个问题? – srahul07
是的,完全一样的问题。另一种方法是使用第一种技术在本地进行读/写,然后用脚本包装,然后将文件传输到下一台服务器。 – niczero