импорт gunzip и mysql - нет такого файла или каталога

2

Я создал сценарий 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, чтобы убедиться, что файл существует, разрешения правильные, и они есть.

Любые идеи, что я делаю неправильно?

Заранее спасибо!

  • 1
    Ваше намерение неясно из-за && и < , которые, вероятно, не делают то, что вы ожидаете. Где именно эти файлы (локальные и удаленные) и где должен работать mysql?
  • 0
    Вы пытались поместить "" вокруг команд, которые будут выполняться на удаленном хосте? Что-то вроде "gunzip /path/file.sql.gz && MySQL -u root -p db_name </path/file.sql", так что вы получите больше, чем выполненный там gunzip.
Показать ещё 1 комментарий
Теги:
gunzip

2 ответа

2

&& вызывает локальную оболочку для разделения команды и выполнения команды MySQL локально.

< Перенаправление также выполняется локально (и причина вашей ошибки).

Однако, gunzip выполняется на удаленном хосте.

Вам нужно процитировать весь аргумент ssh если вы хотите, чтобы все это выполнялось в удаленной системе.

ssh "$USER@$cloneMysqlHost" 'gunzip /path/file.sql.gz && MySQL -u root -p db_name < /path/file.sql'
  • 0
    Огромное спасибо!! Я не знал, что что-нибудь после && будет сделано локально. Это сработало, понравилось очарование!
0

Правильно ли вы предоставляете пароль? Кроме того, не уверен, что происходит с &&, следует использовать там трубу. MySql, вероятно, недействителен, используйте mysql. Подробнее см. Здесь.

ssh $USER@"$cloneMysqlHost" gunzip /path/file.sql.gz | mysql -u root -p [password] db_name
  • 0
    Труба здесь неверна. gunzip не отправляет данные на стандартный вывод (хотя это можно изменить, чтобы избежать «временного» файла).
  • 0
    @EtanReisner Ах, верно. Ваш ответ выглядит правильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню