Shell Script - Bucle para hacer múltiples consultas MySQL a la vez

1

Intenté manejar este problema, tengo un pequeño script para conectarme a una lista de hosts almacenados en un archivo.

#!/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!!"

Quiero ejecutar múltiples consultas MySQL a la vez, por ejemplo 10 o 20, para poder terminar mi prueba más rápido, he intentado hacer otro script de shell que ejecute 4 scripts a la vez, pero realmente no sé cómo manejarlo.

Francisco Tapia
fuente

Respuestas:

4

Ponga los trabajos de mysql en segundo plano (terminando el comando con &):

#!/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!!"

El wait(un comando integrado de shell) hace que el script espere hasta que todos los trabajos en segundo plano se hayan completado.

Esta es una forma bastante simple de hacer esto, es posible que desee agregar lógica para poner, por ejemplo, como máximo 4 trabajos en segundo plano a la vez.

Una alternativa es usar algo parallelque funcione un poco xargspero que esté diseñado para ejecutar trabajos en paralelo.

wurtel
fuente