shell script não gera arquivo txt [RESOLVIDO]

1. shell script não gera arquivo txt [RESOLVIDO]

alexandre nascimento da silva
alexandrenassil

(usa CentOS)

Enviado em 06/10/2021 - 16:29h

Caros, boa tarde!
sou novo no linux e estou enfrentando uma dificuldade que não consigo achar uma solução de forma alguma
estou desenvolvento um script em shell onde preciso listar os arquivos dentro de uma pasta e executalos em um comando para o mysql no caso é um restore de banco
dentro do shell tenho o comando
DIR_BKP=$(find /root/restore/* -type d | tail -n 1) >> $LOG_FILE 2>&1 # pega o caminho do diretorio
ao executar o comando: ls -l $DIR_BKP >> bkp_cadastro_tmp.txt >> $LOG_FILE 2>&1 dentro do shell script ele não cria o arquivo bkp_cadastro_tmp.txt, porem ele salva as informações no arquivo de log, se eu executar o mesmo comando direto no terminal o mesmo é executado corretamente.
como eu faço para armazenar as informações de dentro do diretorio em um arquivo.

se alguem puder me ajudar eu agradeço.
basicamente o script fara o seguinte
ele ira ler linha por linha e execurar o restore no mysql
o codigo que eu criei foi assim:

DIR_BKP=$(find /root/restore/* -type d | tail -n 1) >> $LOG_FILE 2>&1
echo $DIR_BKP >> $LOG_FILE 2>&1
ls -l $DIR_BKP >> bkp_cadastro_tmp.txt >> $LOG_FILE 2>&1
cat bkp_cadastro_tmp.txt | awk '{print $9}' >> bkp_cadastro.sql.txt
mysql -u $MYSQL_USER -p$MYSQL_PASS -e "set global log_bin_trust_function_creators = 1;" >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql >> $LOG_FILE 2>&1 # iniciar o restore com o arquivo routines.sql
sed -i 's/bkp_routines.sql/d' bkp_cadastro.sql.txt >> $LOG_FILE 2>&1
ARQUIVO=bkp_cadastro.sql.tmp.txt
while IFS= read -r LINHA || [[ -n "$LINHA" ]]; do
mysql -u $MYSQL_USER -p$MYSQL_PASS < $LINHA >> $LOG_FILE 2>&1 # subir todos os arquivos do restore de cadastro
done < "$ARQUIVO"



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/10/2021 - 17:08h


alexandrenassil escreveu:

@msoliver obrigado cara.
esse trecho do script era exatamente o que eu precisava

mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql
for arq in $DIR_BKP/*.sql;do
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq}
done

funcionou corretamente....obrigado denovo

segue abaixo uma previa de como ficou o script completo
ainda em faze de desenvolvimento, porem funcional

echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Iniciando restore de cadastro *********************">> $LOG_FILE 2>&1
DIR_BKP=$(find /root/restore/* -type d | tail -n 1) >> $LOG_FILE 2>&1
echo $DIR_BKP >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS -e "set global log_bin_trust_function_creators = 1;" >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql >> $LOG_FILE 2>&1

for arq in $DIR_BKP/*.sql;do
echo `date +%Y-%m-%d_%H:%M:%S`" - arquivo -> "${arq} >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq} >> $LOG_FILE 2>&1
done
echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Finalizando restore de cadastro *********************">> $LOG_FILE 2>&1

---------------------------------------------------------------------------------------------------------------------
Só um detalhe, no laço, coloque um condicional para eliminar o arquivo "bkp_routines.sql", que já foi passado...
Exemplo:
for arq in $DIR_BKP/*.sql;do
if [ "$arq" != "bkp_routines.sql" ];then
echo `date +%Y-%m-%d_%H:%M:%S`" - arquivo -> "${arq} >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq} >> $LOG_FILE 2>&1
fi
done


Se não for pedir muito,
Escolha a MELHOR RESPOSTA, Assim você me ajuda....


______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: shell script não gera arquivo txt [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 06/10/2021 - 16:33h


Eu uso o mysqladmin para fazer restore de bancos no mysql
https://phoenixnap.com/kb/how-to-backup-restore-a-mysql-database


4. shell script não gera arquivo txt

alexandre nascimento da silva
alexandrenassil

(usa CentOS)

Enviado em 06/10/2021 - 16:55h

@leandropscardua
O phpMyAdmin não é uma opção, pois os bancos são de clientes externos, que no caso não possuem o php instalado
e no meu caso são mais de 80 arquivos...e subir um a um é muito trabalhoso, por isso estou tentando fazer o shell para ler todos os arquivos e executar o comando mysql -u root -psenha < arquivo.sql


5. Re: shell script não gera arquivo txt

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/10/2021 - 20:08h

Alexandre, boa noite.
A não ser que o script que postou esteja incompleto,
a var ARQUIVO é VAZIA!
ARQUIVO=bkp_cadastro.sql.tmp.txt
Testando seus comandos, os txt estão vazios....

Reveja os direcionamentos para o log.....
Exemplo:
ping -c2 IP > LOG_FILE 2>&1
______________________________________________________________________
#Script refeito
______________________________________________________________________
#!/usr/bin/env bash
exec > "Restore_Mysql_$(date +%F)_log.txt"; #Arquivo de log
mysql -u $MYSQL_USER -p$MYSQL_PASS -e "set global log_bin_trust_function_creators = 1;"
mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql
for arq in /diretorio/*.sql;do
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq}
done

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



6. Re: shell script não gera arquivo txt [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 06/10/2021 - 21:29h


alexandrenassil escreveu:

@leandropscardua
O phpMyAdmin não é uma opção, pois os bancos são de clientes externos, que no caso não possuem o php instalado
e no meu caso são mais de 80 arquivos...e subir um a um é muito trabalhoso, por isso estou tentando fazer o shell para ler todos os arquivos e executar o comando mysql -u root -psenha < arquivo.sql


É mysqladmin e não phpmyadmin. Mysqladmin é uma ferramenta de linha de comando q vem no pacote cliente do mysql


7. Re: shell script não gera arquivo txt

João Cláudio de Alcântara
aguamole

(usa Lubuntu)

Enviado em 07/10/2021 - 01:27h

Cara não se usa ls em shell script porque ele é quebrado para usar em shell script se existe o " * ".
Digita no terminal
$ echo * 
Você vai ter imprimido diretórios e pastas e etc.
Ai você as vezes acha que uma lista na vertical seja melhor para visualizar ai você pode criar no script um comando para listar como o ls.
for i in *
do
echo $i
done
A mas você precisa que liste somente diretórios no seu script:
for i in *
do
if [[ -d $i ]]
then
echo $i
fi
done
A mas você precisa que liste somente arquivos:
for i in *
do
if [[ -f $i ]]
then
echo $i
fi
done
Vai ver que deu problema por causa desse ls quebrado.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


8. shell script não gera arquivo txt

alexandre nascimento da silva
alexandrenassil

(usa CentOS)

Enviado em 07/10/2021 - 12:26h


@msoliver, exatamente, os comandos do ls -l e o cat não estão funcionando.
ls -l $DIR_BKP >> bkp_cadastro_tmp.txt >> $LOG_FILE 2>&1
cat bkp_cadastro_tmp.txt | awk '{print $9}' >> bkp_cadastro.sql.txt

so corrigindo o script "ARQUIVO=bkp_cadastro.sql.txt"


9. Re: shell script não gera arquivo txt [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/10/2021 - 15:42h


alexandrenassil escreveu:


@msoliver, exatamente, os comandos do ls -l e o cat não estão funcionando.
ls -l $DIR_BKP >> bkp_cadastro_tmp.txt >> $LOG_FILE 2>&1
cat bkp_cadastro_tmp.txt | awk '{print $9}' >> bkp_cadastro.sql.txt

so corrigindo o script "ARQUIVO=bkp_cadastro.sql.txt"


Alexandre, veja o script que postei, só falta excluir o "bkp_routines.sql".

Os txt estão vazios, por causa disso:
">> $LOG_FILE 2>&1"

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________



10. shell script não gera arquivo txt

alexandre nascimento da silva
alexandrenassil

(usa CentOS)

Enviado em 08/10/2021 - 12:38h

@msoliver obrigado cara.
esse trecho do script era exatamente o que eu precisava

mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql
for arq in $DIR_BKP/*.sql;do
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq}
done

funcionou corretamente....obrigado denovo

segue abaixo uma previa de como ficou o script completo
ainda em faze de desenvolvimento, porem funcional

echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Iniciando restore de cadastro *********************">> $LOG_FILE 2>&1
DIR_BKP=$(find /root/restore/* -type d | tail -n 1) >> $LOG_FILE 2>&1
echo $DIR_BKP >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS -e "set global log_bin_trust_function_creators = 1;" >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql >> $LOG_FILE 2>&1
for arq in $DIR_BKP/*.sql;do
echo `date +%Y-%m-%d_%H:%M:%S`" - arquivo -> "${arq} >> $LOG_FILE 2>&1
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq} >> $LOG_FILE 2>&1
done
echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Finalizando restore de cadastro *********************">> $LOG_FILE 2>&1


11. shell script não gera arquivo txt

alexandre nascimento da silva
alexandrenassil

(usa CentOS)

Enviado em 18/10/2021 - 15:48h

se alguém tiver a mesma dificuldade que eu tive, ta ai a versão final do script


RESTORE_CADASTRO(){
exec > $LOG_FILE; #Arquivo de log
echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Iniciando restore de cadastro *********************"
DIR_BKP=$(find /root/restore/* -type d | tail -n 1)
echo $DIR_BKP
mysql -u $MYSQL_USER -p$MYSQL_PASS -e "set global log_bin_trust_function_creators = 1;"
echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Iniciando o restore do arquivo bkp_routines.sql *********************"
mysql -u $MYSQL_USER -p$MYSQL_PASS < $DIR_BKP/bkp_routines.sql #iniciar o restore pelo arquivo de bkp_routines.sql
echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Iniciando o restore dos demais arquivos *********************"
for arq in $DIR_BKP/*.sql;do
if [[ ${arq} != *"bkp_routines"* ]]; then
echo `date +%Y-%m-%d_%H:%M:%S`" - arquivo -> "${arq}
mysql -u $MYSQL_USER -p$MYSQL_PASS < ${arq}
if [[ $? -eq 0 ]]; then
echo "[OK]"
else
echo "[ERRO] - " $?
fi
fi
done
echo `date +%Y-%m-%d_%H:%M:%S`" ********************* Finalizando restore de cadastro *********************"
}