Estou tentando fazer backup do servidor1 para o servidor2 usando o comando abaixo em 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
Recebi o erro abaixo
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
alguém pode resolver esse problema?
Atualização
Eu removi 'user2@server2' e 'deploy -i' do comando de backup e executei-o. Isso me dá mensagens abaixo
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
Responder1
Se o shell de login do usuário remoto ( user2
on server2
) for bash
, tome cuidado para que bash
ele leia e interprete ~/.bashrc
(e possivelmente /etc/bash.bashrc
ou o equivalente no sistema remoto) quando chamado ssh
, mesmo quando não for interativo (como quando apenas interpreta o /bin/cat > user2@server2:/......./test.sql.gz
que você fornece) .
Certifique-se de que as coisas ~/.bashrc
não façam coisas como stty
ou mesg
(o mesg
desysvinit-utils
como encontrado em muitas distribuições Linux é conhecido por gerar exatamente a mesma mensagem que você pode ver executando : | mesg n
), ou apenas fazê-lo depois de verificar se stdin é um terminal [ -t 0 ]
e se o shell é interativo ( case $- in (*i*) ...;; esac
).
Se o shell de login do usuário remoto for csh
or tcsh
, observe os .cshrc
e .tcshrc
e for zsh
at ~/.zshenv
quais são interpretados por todos os shells, incluindo os não interativos, independentemente de serem chamados ssh
ou não (mas, como tal, normalmente não farão coisas com o tty
incondicionalmente).
Observe que isso não fará com que seu comando falhe, apenas que uma mensagem falsa seja exibida.
O que faria com que o comando falhasse é:
/bin/cat > user2@server2:/......./test.sql.gz
Quando não faz muito sentido, a menos que haja um diretório chamado user2@server2:
no diretório inicial de user2
on server2
.
Provavelmente é isso que causa o erro:
: No such file or directory
O fato de o "arquivo ou diretório" do qual ele está reclamando parecer "vazio" sugere que há um caractere de retorno de carro oculto em algum lugar da linha de comando.
O que você quer é /bin/cat > /path/to/output/file/on/server2/test.sql.gz
, e o /path/to/output/file/on/server2
diretório deve existir de antemão.
Você também pode querer remover o -v
e o ~/.bashrc
temporariamente, pois no momento estamos vendo mensagens de ssh
, de comandos executados em seu ~/.bashrc
, possivelmente pelo shell remoto quando ele interpreta essa cat ...
linha de comando, por cat
e pelo mysqldump
comando que torna difícil veja o que é o quê.