В настоящее время у нас есть рабочий скрипт ant, который будет использовать mysqldump для выгрузки базы данных на удаленном сервере в файл на этом удаленном сервере.Мы используем задачу exec для запуска ожидающего сценария для ssh на удаленной машине и запуска команды mysqldump.Я пытаюсь обновить команду, чтобы ограничить дамп, чтобы включить только данные, которые менее 3 месяцев.Я сталкиваюсь с досадными побегами с кавычками и паренами.
Вот командная строка, которую я пытаюсь заставить работать:
expect -f ssh-pass.exp <SERVER_PASSWD> ssh <USER>@<IP_ADDRESS> \"mysqldump -h localhost -u user --password=passwd staging --where=\"createTimeFi > now() - interval 3 month\" --ignore-table=staging.JMS_MESSAGES --ignore-table=staging.JMS_ROLES --ignore-table=staging.JMS_SUBSCRIPTIONS --ignore-table=staging.JMS_TRANSACTIONS --ignore-table=staging.JMS_USERS --ignore-table=staging.TIMERS > dump.sql\"
Вот сценарий ожидания:
set password [lrange $argv 0 0]
set command [lrange $argv 1 1]
set arg1 [lrange $argv 2 2]
set arg2 [lrange $argv 3 end]
puts "command: $command"
puts "arg1: $arg1"
puts "arg2: $arg2"
set timeout -1
spawn $command $arg1 "$arg2"
match_max 100000
expect "*?assword:*"
puts "\rsending password..."
send -- "$password\r"
puts "\r**************** Running remote command, wait... ******************"
expect eof
Я пробовал различные комбинацииэкранирование кавычек вокруг команды ssh и аргумента where для mysqldump безуспешно.Иногда ожидающие будут жаловаться, что «интервал» - неизвестная команда.Иногда на моем локальном компьютере команда создает файлы с именем "now" или "dump.sql", которые, кажется, указывают на то, что моя локальная оболочка ест кавычки и выполняет перенаправления, куда не следует, или будет жаловаться на недопустимые токены (т.е.круглые скобки).