Я создал сценарий bash для автоматизации восстановления моей базы данных. Когда я запускаю следующие команды, я получаю /my/sql/file/path.sql: Нет такого файла или каталога.
ssh $USER@"$cloneMysqlHost" gunzip /path/file.sql.gz && MySQL -u root -p db_name < /path/file.sql
Я сделал ls -lrot на хосте я ssh, чтобы убедиться, что файл существует, разрешения правильные, и они есть.
Любые идеи, что я делаю неправильно?
Заранее спасибо!
&&
вызывает локальную оболочку для разделения команды и выполнения команды MySQL
локально.
<
Перенаправление также выполняется локально (и причина вашей ошибки).
Однако, gunzip
выполняется на удаленном хосте.
Вам нужно процитировать весь аргумент ssh
если вы хотите, чтобы все это выполнялось в удаленной системе.
ssh "$USER@$cloneMysqlHost" 'gunzip /path/file.sql.gz && MySQL -u root -p db_name < /path/file.sql'
Правильно ли вы предоставляете пароль? Кроме того, не уверен, что происходит с &&, следует использовать там трубу. MySql, вероятно, недействителен, используйте mysql. Подробнее см. Здесь.
ssh $USER@"$cloneMysqlHost" gunzip /path/file.sql.gz | mysql -u root -p [password] db_name
gunzip
не отправляет данные на стандартный вывод (хотя это можно изменить, чтобы избежать «временного» файла).
&&
и<
, которые, вероятно, не делают то, что вы ожидаете. Где именно эти файлы (локальные и удаленные) и где должен работать mysql?