Para entender o comportamento do script ao executar o SSH

2

Tudo bem, ultimamente tenho enfrentado um comportamento estranho. Eu tenho pequeno script bash que simplesmente leva mysql despejar remotamente e, em seguida, armazenar dados no próprio servidor, que mais tarde ficam rsynced ao servidor de backup.

#!/bin/sh
/usr/bin/ssh -p 82001 user@remotehost  "mysqldump -u db_user -pSomePass mydb" |  gzip -c >  /sql/mybackup.sql.gz

Mas o que estou vendo é que os arquivos estão sendo criados no servidor local em / sql, mas não no servidor remoto.

Isso significa que o mysqldump está trabalhando sobre o servidor remoto e, em seguida, os dados são canalizados pela rede para esta máquina local, em seguida, compactados e armazenados no arquivo desejado aqui .. não no controle remoto?

    
por Saahib 03.07.2015 / 20:28

2 respostas

5

O comando após o símbolo de pipe gzip -c > /sql/mybackup.sql.gz está sendo executado em sua máquina local.

Você deve usar

/usr/bin/ssh -p 82001 user@remotehost  "mysqldump -u db_user -pSomePass mydb |  gzip -c >  /sql/mybackup.sql.gz"

Exemplo:

% ssh user@host "echo remote" | echo local  
local
user@host's password:

% ssh user@host "echo remote | echo local"
user@host's password:
    
por A.B. 03.07.2015 / 20:41
4

Não tão estranho, você está colocando a saída do comando ssh dentro do seu shell; você deve canalizá-lo dentro do shell no servidor remoto:

#!/bin/sh
/usr/bin/ssh -p 82001 user@remotehost  "mysqldump -u db_user -pSomePass mydb | gzip -c >  /sql/mybackup.sql.gz"

Lembre-se também de que você não está usando bash , mas sh . Para usar bash :

#!/bin/bash
/usr/bin/ssh -p 82001 user@remotehost  "mysqldump -u db_user -pSomePass mydb | gzip -c >  /sql/mybackup.sql.gz"
    
por kos 03.07.2015 / 20:40