J'ai un fichier qui augmente constamment, car un certain processus y écrit. Mon objectif est de démarrer un autre processus qui surveillera les changements dans ce fichier, de faire un prétraitement de SED / AWK / BASH, puis d'insérer un résultat à la base de données. Ceci peut être réalisé en suivant la commande suivante: mais il a un inconvénient que pour chaque insert, je dois effectuer une connexion séparée, authentifier, sélectionner la base de données et enfin faire un insert. Cela renvoie également des erreurs après quelques secondes suivantes: P> Erreur 2003 (HY000): Impossible de se connecter à MySQL Server sur 'DBS-Host'
(111 "connexion refusée") p>
BlockQuote> Que voudrait réaliser est d'ouvrir la connexion à la base de données, puis de réutiliser cette connexion ouverte pour les insertions. J'ai essayé PS: Solutions dans d'autres langues que Bash sont également accueillies (python, nœud.js, ...) p> p>
cooproc code>, mais je suis incapable d'atteindre mon objectif. P>
3 Réponses :
Ce que vous demandez est un Mécanisme de pool de connexion . Dans un pool de connexion, vous ouvrez une connexion une fois, puis réutilisez-la autant que nécessaire, au lieu de créer de nouvelles connexions de base de données et effectue beaucoup plus rapidement. P>
Je ne suis pas sûr que les bibliothèques de pools de connexion sont disponibles pour Bash. En Java, j'utilise Hikaricp , mais il y a d'autres options là-bas. P>
Voici un moyen plus simple d'écrire votre code:
tail -f -n +1 growing_file | awk '{ print "INSERT INTO log SET message = '"'"'\"${4}\"'"'"';" }' | mysql --defaults-file=log.cnf log
Voici un joli script pour bash à Comment garder une connexion mysql ouverte à bash forte> , mais êtes-vous sûr d'obtenir si souvent le fichier de fichiers. Il n'y a pas de sommeil dans votre script. P>
Vous pouvez également écrire une fonction utilisateur MySQL / MARIADB dans C. Ceci est beaucoup mieux et plus rapide et vous pouvez le démarrer à partir du planificateur MySQL. P>
Est-ce que ce script est "derrière"? La machine est-elle surchargée? Si "Non" à la fois, alors "si ce n'est pas cassé, ne le répare pas."