0
votes

Connexion ouverte à MySQL pour plusieurs inserts

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: xxx

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:

Erreur 2003 (HY000): Impossible de se connecter à MySQL Server sur 'DBS-Host' (111 "connexion refusée")

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é cooproc , mais je suis incapable d'atteindre mon objectif.

PS: Solutions dans d'autres langues que Bash sont également accueillies (python, nœud.js, ...)


1 commentaires

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."


3 Réponses :


0
votes

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.

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.


0 commentaires

1
votes

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


0 commentaires

0
votes

Voici un joli script pour bash à Comment garder une connexion mysql ouverte à bash , mais êtes-vous sûr d'obtenir si souvent le fichier de fichiers. Il n'y a pas de sommeil dans votre script.

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.


0 commentaires