如何使用Perl将MySQL表的内容转储到文件?

时间:2009-05-09 21:45:59

标签: mysql perl

将MySQL表转储到Perl文件的最佳方法是什么?

我一直在使用:

open( FILE, ">$filename" );
my $sth=$dbh->prepare("select * from table");
$sth->execute();
while ( my $row = $sth->fetchrow_arrayref ) {
    print FILE join( "|", @$row ), "\n";
}

4 个答案:

答案 0 :(得分:6)

你可以向mysqldump致敬吗?这就是它的用途......

答案 1 :(得分:3)

这取决于你真正想要的东西。您想保留架构信息和数据库元数据吗?列名怎么样? 另一方面,只要架构和列顺序没有改变,你当前的方法应该适用于 data 存储,买你应该考虑一些带有“|”的记录的情况其中的字符并适当地转义该值,并在您读取并解析文件时应用相应的逻辑。您可能希望查看Text::CSV以获得快速,可靠且灵活的实现,该实现可以在两个方向上完成大部分工作,并且都可以读取文件。

答案 2 :(得分:1)

如前所述,这取决于你想做什么。如果目的是备份数据,则应考虑复制数据/索引文件的mysqlhotcopy(如果使用的是MyIsam表)。它比手动转储数据要快得多(例如,我在大约3分钟内获得2.5 GB的备份)。

答案 3 :(得分:1)

取决于您需要转储的原因以及大小和内容。假设你想要的不是备份,除了perl之外,它显然应该有不同的应用程序。我会选择这样的东西,这将保留你的列,并使数据在某些方面更容易进入其他程序或交出比CSV。

use XML::Simple;
...
my @rows=();
while ( my $h = $sth->fetchrow_hashref() )
{
   $h->{_ROWNUM}=$#rows;
   push(@rows, $h);
}
print XMLout(\@rows);
相关问题