Ich versuche, ein Backup von Server1 auf Server2 zu erstellen, indem ich den folgenden Befehl in SSH verwende
[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
Ich habe den folgenden Fehler erhalten
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
kann irgendjemand dieses Problem lösen?
Aktualisierung
Ich habe 'user2@server2' und 'deploy -i' aus dem Backup-Befehl entfernt und ihn ausgeführt. Es gibt mir die folgenden Meldungen
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
Antwort1
Wenn die Login-Shell des Remote-Benutzers ( user2
auf server2
) ist bash
, achten Sie darauf, dass beim Aufruf über bash
gelesen und interpretiert wird ~/.bashrc
(und möglicherweise /etc/bash.bashrc
oder das Äquivalent auf dem Remote-System) ssh
, auch wenn es nicht interaktiv ist (also wenn es nur das interpretiert, /bin/cat > user2@server2:/......./test.sql.gz
was Sie ihm geben).
Stellen Sie sicher, dass die Dinge in ~/.bashrc
nicht tun, Dinge wie stty
oder mesg
(die mesg
vonsysvinit-utils
wie es in vielen Linux-Distributionen zu finden ist, gibt bekanntermaßen genau dieselbe Meldung aus, wie Sie sehen können, wenn Sie ausführen : | mesg n
), oder tun Sie dies nur, nachdem Sie überprüft haben, dass es sich bei stdin um ein Terminal handelt [ -t 0 ]
und die Shell interaktiv ist ( case $- in (*i*) ...;; esac
).
Wenn die Login-Shell des Remote-Benutzers csh
oder ist tcsh
, sehen Sie sich .cshrc
und .tcshrc
und für zsh
an ~/.zshenv
, die von jeder Shell interpretiert werden, einschließlich nicht interaktiver Shells, unabhängig davon, ob sie aufgerufen werden ssh
oder nicht (aber als solche führen sie Dinge mit dem normalerweise nicht tty
bedingungslos aus).
Beachten Sie, dass dies nicht dazu führt, dass Ihr Befehl fehlschlägt, sondern lediglich die fehlerhafte Meldung angezeigt wird.
Folgendes würde jedoch dazu führen, dass der Befehl fehlschlägt:
/bin/cat > user2@server2:/......./test.sql.gz
„Wann“ ergibt nicht viel Sinn, es sei denn, es gibt ein Verzeichnis namens user2@server2:
im Home-Verzeichnis von user2
on server2
.
Das ist wahrscheinlich die Fehlerursache:
: No such file or directory
Die Tatsache, dass die beanstandete „Datei oder das Verzeichnis“ „leer“ zu sein scheint, lässt darauf schließen, dass irgendwo in der Befehlszeile ein Wagenrücklaufzeichen versteckt ist.
Was Sie wollen, ist /bin/cat > /path/to/output/file/on/server2/test.sql.gz
, und das /path/to/output/file/on/server2
Verzeichnis muss vorher vorhanden sein.
Möglicherweise möchten Sie auch -v
und ~/.bashrc
vorübergehend entfernen, da wir momentan Nachrichten von sehen ssh
, von Befehlen, die in Ihrem ausgeführt werden , möglicherweise von der Remote-Shell, wenn diese diese Befehlszeile ~/.bashrc
interpretiert , nach und nach der Befehl, was es schwierig macht zu erkennen, was was ist.cat ...
cat
mysqldump