用于在Rackspace中移动大型数据库的脚本 - Perl

时间:2014-06-19 17:30:52

标签: mysql perl syntax cron rackspace-cloud

我没有Perl的经验。我们正在尝试使用Perl脚本将我们的250MB数据库移动到MySQL中,该脚本被安排为Cron作业Rackspace云推荐了这个脚本:

#!/bin/sh
mysql -h DB_HOST -u DB_USER -p'DB_PASSWORD' DB_NAME < /path/to/file/db_import.sql

我已经填写了变量(这篇文章的用户和传递已经改变):

  

!/ bin / sh mysql -h mysql51-032.wc1:3306 -u 806637_Admin -p   ' ******* '806637_Vs_Hl&lt;   /mnt/stor09-wc1-ord1/762283/806637/www.vs-hl.com/Vs-hlDB/Vs-DB.sql

进行一些研究我发现'#'在Perl中开始注释,所以我将其删除了,这就是我收到的错误报告:

  

Bareword发现运营商预计在main.pl第1行附近   “/ bin / sh”(在h之前缺少运算符?)

     

Bareword发现运营商预计在main.pl第1行附近   “806637_VMHAdmin”(VMHAdmin之前缺少运算符?)

     

找到运营商在main.pl第1行附近预期的数字   “'Admin1234'806637_”(806637之前缺少操作员_?)

     

Bareword发现运营商预计在main.pl第1行附近   “806637_Vets_Hall”(在Vets_Hall之前缺少运算符?)

     

在main.pl第1行的语法错误,靠近“/ bin / sh mysql”

     

由于编译错误,main.pl的执行中止。

我的问题是我的语法错误是什么? 谢谢你的阅读!

2 个答案:

答案 0 :(得分:1)

这不是Perl脚本,而是Bourne Shell脚本。只需将其移到两个单独的行上即可。

#!/bin/sh
mysql ...

请注意,#!必须是文件的前两个字符。没有空行可以继续。

答案 1 :(得分:0)

Perl&#34;脚本&#34;和shell脚本不是一回事。因此,在与程序员打交道时,我称之为&#34; Perl程序&#34;因为Perl是一种功能完备的编程语言。这是一个使用2个单独行的shell脚本:

#!/bin/sh
mysql ...

这与Perl无关。如果要在Perl中执行命令,可以在Perl程序中执行此操作。我称之为doit.pl:

# Note I'm using backticks, and any error msgs are in $msg. 
$msg=`mysql -h DB_HOST -u DB_USER -p'DB_PASSWORD' DB_NAME < /path/to/file/db_import.sql`;
print "Messages are: $msg\n";

如果命令行中没有任何内容发生变化,您就不需要Perl。如果您正在循环并复制许多数据库名称,则可以使用Perl。