繁体   English   中英

Perl脚本中的MySQL错误代码2

[英]MySQL Errorcode 2 in Perl script

我在Perl中创建了一个ETL工具。 ETL工具正在与三个数据库服务器进行通信,例如dbserver1(OLTP服务器-Windows Box),dbserver2(登台服务器-linux Box),dbserver3(OLAP服务器,linux Box)。 我的ETL脚本在dbserver 2上。

脚本从dbserver1读取数据,并将其带入dbserver2进行某些转换,执行转换,然后将数据放入dbserver3。 为了实现此目的,该脚本在dbserver2上创建了一些OUTFILE数据。 因此,有两种类型的OUTFILE查询:

  1. 在dbserver1上运行的OUTFILE查询,在dbserver2上创建.data并
  2. 在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设置了AppArmor设置。

问题是dbserver1上的outfile查询只能在本地写入,因此您需要其他方法。
一种非常简单的方法是使用mysqldump (在dbserver2上)连接到dbserver1,并将输出通过管道传递到mysql客户端,该客户端将SQL注入dbserver2。

另一方面,如果要使用DBI

my $source_sql = q{SELECT ...};
my $target_sql = q{INSERT ... VALUES (?, ?, ...)};
my $source = $source_dbh->prepare($source_sql);
my $target = $target_dbh->prepare($target_sql);
$source->execute;
my $qty = $target->execute_array({ArrayTupleFetch => $source});

对于大型数据传输, mysqldump方法更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM