PROGRAMMER DES COPIES DE TABLES SUR UNE BASE MYSQL

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 31 juil. 2005 à 13:06
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 29 sept. 2006 à 14:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32981-programmer-des-copies-de-tables-sur-une-base-mysql

cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
29 sept. 2006 à 14:58
ouaip effectivement ça serai achement bien ça !
faudrait y penser à l'export zip avec sauvegarde de la bdd sur le serveur direct ;)
cool !!!
@+
hellodelu007 Messages postés 12 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 14:01
Et puis pourquoi pas avec un petit zippage du fichier au passage, et un petit Hashage pour verifier son intégrité à la fin ?
Tout cela en automatique ?
Bon, d'accord, ca s'eloigne de la première source, j'admets... :)
hellodelu007 Messages postés 12 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 14:01
Et puis pourquoi pas avec un petit zippage du fichier au passage, et un petit Hashage pour verifier son intégrité à la fin ?
Tout cela en automatique ?
Bon, d'accord, ca s'eloigne de la première source, j'admets... :)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 août 2005 à 12:37
Si ça serait possible, et ça serait préférable ;-)
hellodelu007 Messages postés 12 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 12:32
Ou bien simplement recréer l'export de MySQL et le stocker dans sur un FTP ? Ca ne serait pas possible ?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 août 2005 à 11:55
Pour parfaire un minimum je pense que tu pourrais sauvegarder ça dans une autre base, mais c'est sûr qu'un petit fichier contenant les requêtes serait pas mal ;-)
antoinedi Messages postés 3 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 11:19
Tchoulak : J'ai mis en place ce script suite à la suppression accidentelle de la table principale d'un site par le webmaster... C'est un contexte de site perso/associatif chez un hébergeur spécialisé, où le risque n'est pas le crash serveur mais l'administration par un non-professionnel, le développement à chaud, les erreurs de manipes, etc.

Hellodelu007 : ce script fait un CREATE... SELECT table par table, sans parallélisation... encore une fois, ce script est un système minimaliste qui ne prétend pas répondre à des besoins de taille professionnelle, mais simplement simplifier la vie des amateurs.
hellodelu007 Messages postés 12 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 10:07
Non seulement le crash du serveur de BdD perdra toutes les infos, mais en plus je me demande comment ce script se comporte avec une grosse table ?
tchoulak Messages postés 2 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 06:41
Je ne veut pas dire mais ca sert a quoi cette source si t'as un crash de serveur et que tu pert toute ta BDD, t'as beau avoir fait des sauvegardes ca servira a rien, le but d'une sauvegarde c'est de conserver une copie a un autre endroit !
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 juil. 2005 à 14:32
Merci pour ces explications claires, effectivement pour la boucle je pensais que c'était une boucle par ligne de table, d'où mon commentaire.

a +
antoinedi Messages postés 3 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 1 août 2005
31 juil. 2005 à 14:27
Je ne suis pas sûr de très bien comprendre ta question... Voici des éléments de réponse :

1) je ne copie une table ligne par ligne, et je ne copie pas non plus une table dans une autre qui existerait déjà ; je fais un CREATE... SELECT pour chacunes DES tables à copier. Ma boucle est donc une boucles des tables et non une boucles des lignes.

2) je préfère de loin mon CREATE... SELECT que le INSERT... SELECT que tu proposes. INSERT est un peu plus rapide, mais il complique la tâche du webmaster, qui doit alors créer lui-même un clone de chacune des tables qu'il veut sauvegarder, et le re-créer à chaque modification de structure de la table d'origine.

CREATE fait lui-même le clone à chaque fois ; tout ce que le webmaster a à faire c'est de renseigner le nom de la table à copier et la fréqence de copie, le reste se fait tout. Comme c'est un script qui tournera au maximum une fois par jour, économiser quelques dixièmes de seconde ne présente pas un intérêt énorme...

3) tu parles de "multiples requêtes" dans la boucle. Il y a trois requêtes dans ma boucle : la première supprime un éventuel clone déjà existant ; la deuxième effectue la copie ; la troisième renseigne la nouvelle date de copie dans `sauvegardes`. La première et la troisième pourraient effectivement être sorties de la boucle, mais au détriment de l'atomicité des traitements...

... autrement dit, je pourrais faire un DROP table1_copie, table2_copie, etc. juste avant la boucle. Mais si qqch déconne au cours du traitement, par exemple si une table est trop grosse et que sa copie dépasse le temps d'exécution alloué par le serveur, j'ai perdu toutes mes sauvegardes ! (mon script actuel n'en perd qu'une)

De même, je pourrai faire un seul REPLACE INTO `sauvegardes` à la fin de la boucle, mais si le script est interrompu est cours de boucle, la date de màj ne sera renseignée pour aucune des tables.

Là encore, ce script n'est amené à tourner qu'au maximum une fois par jour, donc la performance est un objectif très secondaire par rapport à la sécurité, la facilité de maintenance, etc.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 juil. 2005 à 13:06
Salut,

si j'ai bien compris, tu prends une table que tu recopies dans une autre table dans ta boucle ?

Pourquoi ne pas faire une seule requête au lieu de faire de multiples requêtes dans ta boucle ?

Une requête à base d'INSERT INTO table(SELECT INTO autre_table champ,champ2)... ?

à moins que tu aies déjà tenté de le faire ;-)

a +
Rejoignez-nous