Transfert de données d'une table à une autre

Fermé
guerrierdefe Messages postés 2 Date d'inscription vendredi 4 octobre 2013 Statut Membre Dernière intervention 4 octobre 2013 - 4 oct. 2013 à 14:47
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 4 octobre 2022 - 7 oct. 2013 à 11:43
Bonjour,

j'ai sur mon serveur dédié freebsd 9.1 installé le module MySql 5.5 avec un total de 20 bases de données. celle qui m'intéresse est la base de donnée log.

dans cette base de donnée log j'ai 18 tables. celle qui m'intéresse s'appelle log

log.log donc :)

dans cette table s'enregistrent environs 1000 lignes de l'heure, et donc cette table se retrouve rapidement au dessus des 1 000 000 de lignes.
je suis souvent amené à vérifier certaines informations qui s'y trouvent en fonction de plusieurs colonnes (ip, date, id ....). le fait que le nombre de ligne soit aussi élevé est gênant c'est pourquoi je souhaiterais mettre en place un transfert automatique de chaque ligne qui date de plus de 48h en arrière vers une autre table qui se trouverais dans une nouvelle base de données que j'appellerais "save_log". une nouvelles table doit se créer dans "save_log" tous les 7 jours de façon à avoir par la suite un table de sauvegarde par semaine.

je ne sais pas si cela est possible ni comment procéder, c'est pourquoi je viens aujourd'hui vous demander votre aide.

biensure ce n'est pas la seule table avec laquelle je souhaite mettre en place de processus mais le fait de savoir le faire pour une me permettra de le faire pour les autres.

En espérant que quelqu'un de plus expérimenté saura me guider. je vous souhaite une bonne journée

3 réponses

heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 4 octobre 2022 127
7 oct. 2013 à 00:00
Bonsoir,

Je ne sais pas du tout si c'est la bonne solution ni si MySQL peut effectuer des tâches programmées mais le "...tous les 7 jours..." me fait penser à une solution que j'avais déjà mise en place. Pour ce qui me concerne, c'était un truc tout bête : un mail devait m'avertir si l'anniversaire d'un de mes proches ou amis arrivait dans les 3 jours qui venaient. Alors pourquoi pas imaginer un transfert si le nombre d'enregistrements dépasse un certain seuil ?

Une table avec les noms et les dates de naissances.
Un cron tous les jours à 5h00 du matin exécutait un script PHP :

0 5 * * *     root     php verifanniv.php

Tous les jours à 5h00 le script verifanniv.php était exécuté.
Une requete interrogeait la table dans la base de données. Si aucun enregistrement sortait, arrêt du script ; sinon envoi d'un mail avec la liste des dates anniversaire avec les noms, puis arrêt du script.

Dans ton cas, et en attendant mieux, je commencerais par chercher dans cette voie. Tous les jours à telle heure un script vérifierait la table log de la base de données log. Si le nombre d'enregistrement < 500.000 : arrêt du script ; sinon, copie dans une table log de la base de données save_log (save_log.log) de tous les enregistrements en trop dans log.log et une fois la copie faite, suppression dans log.log des enregistrements qui viennent d'être sauvegardés dans save_log.log

Tu pourrais définir un cron genre :
0 5 * * *     root     php save_troplein.php

NB: Dans ce script, une variable du genre $seuil pourrait contenir la limite. La limite pourrait être un nombre d'enregistrements ou une date-heure. Une fois le cron mis en place, il suffirait, en cas de besoin de modifier la valeur de la variable $seuil.

Ce n'est pas compliqué à faire. Toutefois, je suis sûr qu'il doit exister une autre manière plus élégante mais comme on dit : faute de grives, on mange des merles. Mieux vaut ça que rien du tout. Et ça permet de soulager de suite en donnant le temps de trouver quelque chose de plus élégant.
1
guerrierdefe
7 oct. 2013 à 07:40
bonjour, c'est en effet une solution à laquelle je n'avais pas pensé.

c'est une bonne idée je vais faire sa.

Merci
0
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 4 octobre 2022 127
7 oct. 2013 à 11:43
Pas de quoi !

Et je pense inutile de conseiller, avant la mise en place du cron de commenter les instructions de suppression. Et si le transfert s'est effectué correctement lors de l'exécution programmée, la suppression se fera à la main, puis retrait des marques de commentaire.

Lors de l'exécution suivante si tout s'est déroulé normalement (copie puis suppression), tu pourras venir cocher ce sujet si tu l'estimes résolu.

Bonne suite.
0