Я пытаюсь сделать резервную копию с сервера 1 на сервер 2, используя следующую команду в ssh
[user1@server1 ~]$ mysqldump -u dbuser -p"dbpwd" --opt dbname \
| gzip -c \
| ssh -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/...../known_hosts \
-l deploy \
-i /...../id_rsa \
-v user2@server2 \
"/bin/cat > /.../test.sql.gz" \
2>&1
Я получил ошибку, как показано ниже
debug1: Sending command: /bin/cat > -t user2@server2:/..../test.sql.gz
stdin: is not a tty
/bin/cat: user20@server2:/..../test.sql.gz
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
: No such file or directory
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 265040, received 2552 bytes, in 0.0 seconds
Bytes per second: sent 6736670.0, received 64865.6
debug1: Exit status 1
mysqldump: Got errno 32 on write
может ли кто-нибудь решить эту проблему?
Обновление
Я удалил 'user2@server2' и 'deploy -i' из команды резервного копирования и запустил ее. Она выдает мне следующие сообщения
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: /bin/cat > -t /....../test.sql.gz
stdin: is not a tty
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
/bin/cat: /......./test.sql.gz: No such file or directory
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 248608, received 2536 bytes, in 0.1 seconds
Bytes per second: sent 4628197.5, received 47211.3
debug1: Exit status 1
mysqldump: Got errno 32 on write
решение1
Если оболочкой входа удаленного пользователя ( user2
on server2
) является bash
, будьте осторожны, что при вызове через bash
считывает и интерпретирует ~/.bashrc
(и, возможно /etc/bash.bashrc
, эквивалентно ему в удаленной системе) ssh
, даже если он не интерактивен (например, когда он просто интерпретирует то, /bin/cat > user2@server2:/......./test.sql.gz
что вы ему даете).
Убедитесь, что в вещах ~/.bashrc
не происходит ничего вроде stty
или mesg
( mesg
отsysvinit-utils
как известно, во многих дистрибутивах Linux выводится точно такое же сообщение, которое вы можете увидеть, запустив : | mesg n
), или делает это только после проверки того, что stdin является терминалом [ -t 0 ]
и что оболочка является интерактивной ( case $- in (*i*) ...;; esac
).
Если оболочка входа удаленного пользователя — csh
или tcsh
, обратите внимание на .cshrc
и .tcshrc
и для zsh
, ~/.zshenv
которые интерпретируются каждой оболочкой, включая неинтерактивные, независимо от того, вызваны они ssh
или нет (но как таковые они, как правило, не будут выполнять действия с tty
безусловным образом).
Обратите внимание, что это не приведет к сбою вашей команды, а лишь к отображению ложного сообщения.
Однако вот что может привести к сбою команды:
/bin/cat > user2@server2:/......./test.sql.gz
user2@server2:
When не имеет особого смысла, если в домашнем каталоге user2
on не указан каталог server2
.
Вероятно, именно это и является причиной ошибки:
: No such file or directory
Тот факт, что «файл или каталог», на который жалуется программа, кажется «пустым», говорит о том, что где-то в командной строке спрятан символ возврата каретки.
То, что вам нужно, это /bin/cat > /path/to/output/file/on/server2/test.sql.gz
, и /path/to/output/file/on/server2
каталог должен существовать заранее.
Вы также можете временно удалить -v
и ~/.bashrc
, так как в данный момент мы видим сообщения от ssh
, от команд, запущенных в вашем ~/.bashrc
, возможно, удаленной оболочкой, когда она интерпретирует эту cat ...
командную строку, cat
и от mysqldump
команды , что затрудняет понимание того, что к чему.