Shell Script - Loop para fazer múltiplos MySQL Query de uma só vez

1

Eu tentei lidar com esse problema, tenho um pequeno script para conectar em uma lista de host armazenada em um arquivo.

#!/bin/bash
num=$(wc -l < ip.txt)
while read ip; do
    mysql --login-path=login -h $ip "database" < "query.sql"
    echo "Script 1 - Remaining: "$num $ip
    num=$((num-1))
done < ip.txt
echo "Script 1 Finished!!"

Eu quero rodar múltiplas consultas ao MySQL de uma só vez, por exemplo 10 ou 20, para que eu possa terminar meu teste mais rápido. Eu tentei fazer outro script que executa 4 scripts de uma vez, mas eu realmente não sei como lidar isso.

    
por Francisco Tapia 07.05.2015 / 21:38

1 resposta

3

Coloque os trabalhos do mysql em segundo plano:

#!/bin/bash
num=$(wc -l < ip.txt)
while read ip; do
    mysql --login-path=login -h $ip "database" < "query.sql" &
    num=$((num-1))
done < ip.txt
wait
echo "Script 1 Finished!!"

O wait faz com que o script aguarde até que todas as tarefas em segundo plano ter concluído.

Esta é uma maneira muito simples de fazer isso, você pode querer adicionar lógica para colocar, por exemplo, no máximo 4 postos de trabalho no fundo de uma só vez.

Uma alternativa é usar parallel que funciona um pouco como xargs , mas foi projetado para executar trabalhos em paralelo.

    
por 08.05.2015 / 15:02