Скрипт для a для перемещения большой базы данных в Rackspace — Perl

#mysql #perl #syntax #cron #rackspace-cloud

#mysql #perl #синтаксис #cron #rackspace-облако

Вопрос:

У меня нет опыта работы с Perl. Мы пытаемся переместить нашу базу данных объемом 250 МБ в MySQL с помощью скрипта Perl, который запланирован как задание Cron. Облако Rackspace рекомендует этот скрипт:

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

Я заполнил переменные так (user и pass изменились для этого сообщения):

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

Проведя некоторое исследование, я обнаружил, что ‘#’ запускает комментарий в Perl, поэтому я удалил его, и это то, что я получил как отчет об ошибке:

Найдено простое слово, где ожидалось, что operator в main.pl строка 1, рядом с «/bin/sh» (отсутствует оператор перед h?)

Найдено простое слово, где ожидалось, что operator в main.pl строка 1, рядом с «806637_VMHAdmin» (отсутствует оператор перед VMHAdmin?)

Число найдено там, где оператор ожидал в main.pl строка 1, рядом с «‘Admin1234’ 806637_» (отсутствует оператор перед 806637_?)

Найдено простое слово, где ожидалось, что operator в main.pl строка 1, рядом с «806637_Vets_Hall» (отсутствует оператор перед Vets_Hall?)

синтаксическая ошибка при main.pl строка 1, рядом с «/bin/sh mysql»

Выполнение main.pl прервано из-за ошибок компиляции.

Мой вопрос в том, что я делаю неправильно с точки зрения синтаксиса? Спасибо за чтение!

Комментарии:

1. Вы сделали больше, чем это: вы также удалили # символ и символ новой строки. Почему?

Ответ №1:

Это не сценарий Perl, это сценарий Bourne Shell. Просто переместите его на две отдельные строки.

 #!/bin/sh
mysql ...
 

Обратите внимание, что это #! должны быть самые первые два символа файла. Никакие пустые строки не могут продолжать его.

Ответ №2:

Perl «скрипт» и сценарий оболочки — это не одно и то же. Поэтому, когда я имею дело с программистами, я называю это «программой на Perl», поскольку Perl является полностью функциональным языком программирования. Это сценарий оболочки, который использует 2 отдельные строки:

 #!/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: $msgn";
 

И вам не нужен Perl, если ничего в командной строке не меняется. Вы могли бы использовать Perl, если вы перебираете и копируете много имен баз данных.