#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, если вы перебираете и копируете много имен баз данных.