J'ai vérifié la sauvegarde se passe correctement, toutes les tables de la base de données sont sauvegardées sur la clé USB, aucune perte dans le serveur après la sauvegarde. Pourtant le lendemain au rallumage, il arrive qu'il manque des données (les dernières) dans des tables. A ce moment là si je fais une mise à jour avec la sauvegarde de la veille, tout est retrouvé.
Je n'arrive pas à definir quand cela arrive. J'ai fait des essais de modifications de fichiers, des modification de tables, des sauvegardes, des mises à jour de tables. J'ai redemarré plusieurs fois le serveur, parfois aucun problème (du moins je ne remarque rien) et parfois des pertes.
Voilà des fichiers que j'utilise qui sont peut-être la cause de mon problème.
Pour mettre à jour ma base de données et le répertoire /var/www depuis une sauvegarde sur une clé USB
#!/bin/bash
# Attention ce script fonctionne avec /root/.my.cnf
# Demander le montage de la clé USB.
source /root/bash/monter_cle.sh
# Tester si la clé est montée. Si la clé n'est pas montée retourne 0.
if [ `grep -c "/mnt/cle" /etc/mtab` -eq 0 ]
then
echo " /!\ Echec la clé n'est pas montée."
else
# Aller dans le dossier sauvegarde de la clé USB.
cd /mnt/cle/sauvegarde
# Création de la variable dossierSauvegarde.
# dossierSauvegarde = dernier dossier modifié.
dossierSauvegarde=$(ls -1t | head -1)
# Mise à jour de /var/www/
rsync -a --exclude '_basesDeDonnees/' --delete-after /mnt/cle/sauvegarde/$dossierSauvegarde/ /var/www
# Mise à jour de la base données maintenance.
USER="root"
HOST="localhost"
BASE_SQL="maintenance"
# Mettre la base de données à jour
mysql -h$HOST -u$USER $BASE_SQL < $dossierSauvegarde/_basesDeDonnees/maintenance.sql
chmod -R 777 /var/www
# Demander le démontage de la clé USB.
source /root/bash/demonter_cle.sh
echo $dossierSauvegarde
fi
/var/www/admin/maj.php
page php pour lancer la mise à jour de ma base de données et le répertoire /var/www depuis une sauvegarde sur une clé USB
<?php
session_start();
$titre = "Mise à jour";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link href="/images/logo_lycee.png" rel="shortcut icon">
<link rel="stylesheet" href="/css/bouton.css"/>
<link rel="stylesheet" href="/css/page.css"/>
<link rel="stylesheet" href="/css/paragraphe.css"/>
<link rel="stylesheet" href="/css/tableau.css"/>
<link rel="stylesheet" href="/css/titre.css"/>
<title><?php echo $titre;?></title>
</head>
<body class="s1">
<?php
ob_start();
if(!empty($_SESSION['prof'])){
try{
include("/var/www/connexion_bdd.php");
include("/var/www/admin/_enTeteAdmin.php");
if(!empty($_POST['subMaj'])){
// Rechercher toutes les contraintes de clés étrangères
$chContrainte = $bdd->query
('
SELECT k.CONSTRAINT_SCHEMA, k.CONSTRAINT_NAME, k.TABLE_NAME, k.COLUMN_NAME , k.REFERENCED_TABLE_SCHEMA, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME,
r.UPDATE_RULE, r.DELETE_RULE
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c ON k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA
INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS r ON k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
AND k.CONSTRAINT_NAME = c.CONSTRAINT_NAME
AND k.CONSTRAINT_NAME = r.CONSTRAINT_NAME
AND k.CONSTRAINT_SCHEMA = "maintenance"
AND k.REFERENCED_TABLE_NAME != "aatest1"
WHERE c.CONSTRAINT_TYPE = "FOREIGN KEY"
ORDER BY k.REFERENCED_COLUMN_NAME, k.REFERENCED_TABLE_NAME, k.TABLE_NAME
');
$contrainte = $chContrainte->fetchAll();
foreach ($contrainte as $con) {
// Supprimer toutes les contraintes de clés étrangères
$bdd->query('ALTER TABLE '.$con['TABLE_NAME'].' DROP FOREIGN KEY '.$con['CONSTRAINT_NAME'].'');
// echo $con['TABLE_NAME'].' '.$con['CONSTRAINT_NAME']."<br>";
// echo $con['CONSTRAINT_SCHEMA']."<br>";
}
$chContrainte->closeCursor();
// Rechercher toutes les tables de la base de données maintenance
$chTable = $bdd->query('show tables');
While($table = $chTable->fetch()){
// Supprimer chaque table
$bdd->query('DROP TABLE '.$table['Tables_in_maintenance'].'');
// echo $table['Tables_in_maintenance']."<br>";
}
$chTable->closeCursor();
// Mettre à jour le répertoire /var/www et la base de données maintenance
$dossierSauvegarde = exec('sudo /root/bash/maj2.sh start');
$chNote = $bdd->query('SELECT COUNT(id) AS nbr FROM travail_realise');
$note = $chNote->fetch();
$chCompteRendu = $bdd->query('SELECT COUNT(id) AS nbr FROM compteRendu');
$compteRendu = $chCompteRendu->fetch();
$chBonDeCommande = $bdd->query('SELECT COUNT(idBDC) AS nbr FROM bonDeCommande');
$bonDeCommande = $chBonDeCommande->fetch();
$bdd->query('INSERT INTO infosMaintenance (dossierMAJIM, dateMAJIM, nbrNoteIM, nbrBDCIM, nbrCRIM) VALUES ("'.$dossierSauvegarde.'", NOW(), '.$note['nbr'].', '.$bonDeCommande['nbr'].', '.$compteRendu['nbr'].')');
$chNote->closeCursor();
$chCompteRendu->closeCursor();
$chBonDeCommande->closeCursor();
echo "Serveur mis à jour au : ".$dossierSauvegarde."<br>";
echo "notes : ".$note['nbr']."<br>";
echo "Bon de commande : ".$bonDeCommande['nbr']."<br>";
echo "Compte-rendu : ".$compteRendu['nbr']."<br>";
}
?>
<form method="post" class="p1">
Voulez-vous écraser et mettre à jour les fichiers et la base de données du serveur ?<br><br>
<input type="submit" name="subMaj" value="Mettre à jour" class="bp0"/>
</form>
<?php
}catch(Exception $e){
exit('<div class="erreurSQL">Problème à la ligne '. $e->getLine() .' : '. $e->getMessage().'</div>');
}
}
else{
// Redirection si session professeur détruite
header('Location: admin.php');
}
ob_end_flush();
?>
</body>
</html>
/root/bash/save_rsync.sh
Pour sauvegarder ma base de données et le répertoire /var/www sur une clé USB
#!/bin/bash
# Attention ce script fonctionne avec /root/.my.cnf
# Demander le montage de la clé USB.
source /root/bash/monter_cle.sh
if [ `grep -c "/mnt/cle" /etc/mtab` -eq 0 ]
then
echo "La clé n'est pas montée"
else
# Créer le nom de dossier de sauvegarde
moisSansAccent=$(echo $(date +%B) | sed 'y/áàâäçéèêëîïìôöóûùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuuunAAACEEEEIIOOUUN/')
nomDossierSauvegarde="${moisSansAccent}_$(date +%Y_%d_%A-%Hh%M)_lycee"
echo $nomDossierSauvegarde
# Créer le nom de dossier de sauvegarde pour les bases de données
nomDossierSauvegardeBaseDonnees=_basesDeDonnees
# Sauvegarder le dossier www dans le dossier de sauvegarde
rsync -a /var/www/ /mnt/cle/sauvegarde/$nomDossierSauvegarde
# Créer le dossier pour enregistrer les bases de données
mkdir /mnt/cle/sauvegarde/$nomDossierSauvegarde/$nomDossierSauvegardeBaseDonnees
# Sauvegarder la base de données maintenance
USER="root"
HOST="localhost"
BASE_SQL="maintenance"
mysqldump --opt -h$HOST -u$USER $BASE_SQL > /mnt/cle/sauvegarde/$nomDossierSauvegarde/$nomDossierSauvegardeBaseDonnees/maintenance.sql
# Demander le démontage de la clé USB.
source /root/bash/demonter_cle.sh
fi
Merci pour votre aide.
Problèmes de pertes de données : fichiers, mysql
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.