Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/09/2005, 14h08   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Par défaut Sauvegarde journalière, duplication de base

Salut tout le monde,

J'ai une base appelé BASENAME contenant des tables MyISAM et INNODB.

J'aimerai que chaque jour une sauvegarde la base soit effectuée avec au bout du nom la date du jour.
Exemple: BASENAME_2005_09_01

Toute fois, je ne veux pas que cette sauvegarde ai lieue dans un fichier de type txt, je veux que cette sauvegarde ai lieu au sein même de MySQL, c'est à dire une duplication de la base accessible aux scripts externes (PHP, etc...)

Si je me suis mal fait comprendre, voilà un exemple d'utilisation:

Au jour J, la base est copié avec le nom approprié BASENAME_J
Au lancement de l'application web (PHP en l'occurence), l'utilisateur a le choix de la base de données qu'il veut utiliser entre BASENAME, BASENAME_J, BASENAME_J-1, BASENAME_J-2, etc ...
Chaque jour une nouvelle base sera ajouté à MySQL.
Cela permet de remonter dans le temps.

Comment puis faire de telle duplication de la base MySQL ??

Merci d'avance.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 14h19   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Bonjour,

La réplication me parait convenir à ton cas. Cf http://jgrondin.developpez.com/article/MySQL/Replication_MySQL/
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 14h36   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Merci mais l'exemple est avec deux serveurs differents.

Est-ce possible de l'adapter sur le même serveur?
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 14h43   #4
Membre habitué
 
Inscription : octobre 2004
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 145
Points : 149
Points : 149
Bonjour,

Si tu veux tout faire sur la m^me machine, il te faudra installer plusieurs serveur MySQL sur ta machine afin de pouvoir lancer une réplication multi-serveur.

Pour répondre à ton probleme sinon, il te suffit chaque soir de faire mysqldump de ta base BASENAME, de changer le nom de la base BASENAME en BASENAME_YYYY_MM_DD dans les lignes CREATE DATABASE et DROP DATABASE et avec ce script de créer ta base BASENAME_YYYY_MM_DD.

En plus, c'est plus facile à mettre en place qu'une réplication...

HTH
ren0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 14h49   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
merci ren0, j'aime bien ton idée.

Est-il possible d'automatiser cette tâche, et de la lancer lors la première connexion à la base de la journée par un internaute ??

Merci.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 15h16   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Autrement j'ai essayer en copiant les fichiers .frm etc mais il doit y avoir des données autrepart avec InnoDB.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 15h17   #7
Membre habitué
 
Inscription : octobre 2004
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 145
Points : 149
Points : 149
Style ? dans un script PHP ou un truc du genre ?

Si tu as le choix il vaut mieux faire un cron car c'est tout de même un traitement assez lourd et si ton premier utilisateur doit attendre une création de base pour sa première connexion, il risque d'avoir un time out.
En plus, il faudrait que ton ton serveur web dispose des autorisations pour éxécuter des commandes system (mysqldump).

Donc, oui tu peux le faire à la première connexion d'un utiulisateur, mais idéalement, il vaut mieux faire un script qui sera planifié chaque nuit...
ren0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2005, 16h44   #8
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Citation:
Envoyé par ren0
Donc, oui tu peux le faire à la première connexion d'un utiulisateur, mais idéalement, il vaut mieux faire un script qui sera planifié chaque nuit...
Je pense retenir cette solution.
je vais me renseigner sur la façon de procéder, je n'en ai encore jamais fait. Si tu as des liens ou des informations à me recommander, je suis preneur.

Cela se deroule sur un Windows Server 2003 (pas le choix...)

Merci d'avance

NicO.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2005, 09h35   #9
Membre habitué
 
Inscription : octobre 2004
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 145
Points : 149
Points : 149
alors, ça va être facile, tu écris un petit .bat et tu créé une tâche planifiée quotidienne..
ren0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2005, 09h41   #10
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Ok je vois comment procéder mais comment savoir quels fichiers à sauvegarder ??

Je m'explique, dans mon repertoire MySQL/ j'ai un repertoire DATA/ dans lequel se trouvent mes bases de données sous formee de repertoire par exemple BASENAME/ dans lequel se trouve les fichiers .frm

Ensuite j'ai egalement dans le repertoire DATA/ un fichier nommé ibdata1 qui se trouve être énorme... qu'en est-il de lui ?

Ne pas oublier que 90% de mes tables sont au format InnoDB.

j'ai deja essayer de copier simplement le repertoire BASENAME/ mais la base et sa structure ne sont copiés dans son integralité.

Merci.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2005, 11h11   #11
Membre habitué
 
Inscription : octobre 2004
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 145
Points : 149
Points : 149
ton fichier ibdata c'est ton datafile innoDB....

passe plutôt par un script à base de mysqldump pour copier ta base...

http://dev.mysql.com/doc/mysql/fr/mysqldump.html
ren0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 11h05   #12
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
J'ai essayer par script PHP

system("mysqldump --host=localhost --user=username --password=pass BASENAME_J | --host=localhost --user=username --password=pass BASENAME_J-1
");

J'ai pourtant creer BASENAME_J-1 avant sans structure.
Sans succès rien ne se passe...
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 11h14   #13
Membre à l'essai
 
Inscription : septembre 2005
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 24
Points : 22
Points : 22
est ce que l'algo fonctionne en ligne de commande ?
cgougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 11h30   #14
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Je n'ai pas testé....
je n'ai encore jamais utilisé les lignes de commandes

Un petit descriptif du procédé serait le bienvenu.
Je suis avec EasyPHP en local.

Merci d'avance.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 12h37   #15
Membre à l'essai
 
Inscription : septembre 2005
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 24
Points : 22
Points : 22
La function system() de php sert à éxécuter des commandes au niveau système comme si tu le faisais au niveau d'un terminal dos ou linux suivant ton os.
Tu peux faire un copier coller de ta commande et la saisir dans le terminal.
Quel est la réponse ?
cgougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 14h17   #16
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
bon je viens d'executer la ligne ci dessous en par le dos:

1/ Il copie bien la structure des tables
2/ Problème: certaines tables contiennent + d'enregistrements, d'autres - !! Donc le transfert n'est pas très fidèle.

Sachant que mes tables sont en innoDB....

Code :
1
2
system("mysqldump --host=localhost --user=username --password=pass BASENAME_J | mysql --host=localhost --user=username --password=pass BASENAME_J-1 
");
Merci d'avance.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 16h41   #17
Candidat au titre de Membre du Club
 
Inscription : avril 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 41
Points : 12
Points : 12
Problème résolu au niveau de la ligne de commande.

Par contre je n'arrive pas à repliquer avec le script PHP et la commande SYSTEM()....
Il ne se passe rien. J'ai donner tous les droits àl'utilisateur pour faire mes essais.
softflower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2005, 16h42   #18
Membre à l'essai
 
Inscription : septembre 2005
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 24
Points : 22
Points : 22
Je ne peux pas te dire, ça fait trop longtemps que j'ai fait du php.
a+
cgougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h36.


 
 
 
 
Partenaires

Hébergement Web