OVH Community, votre nouvel espace communautaire.

[HOW-TO] Backup automatique MySQL


Kleduts
04/10/2011, 14h37
Citation Envoyé par Nickoeuh
Bonjour,

Je me permets de relancer ce sujet, car le script de Julia m'intéresse sauf que je ne sais pas quelle extension mettre pour le fichier.
J'ai mis .php (ayant vu un echo), mais ça m'affiche le code au lieu de l'exécuter.

Merci d'avance.
Non, il s'agit d'un script qui s'exécutera sur le serveur via ton terminal.
Tu le transfères donc sur le serveur, tu lui mets les droits d'exécution et tu l'exécutes. Tout simplement

A+ / F.

Freemaster
01/10/2011, 21h01
lorsque la base fera plus de 100Mo, tu vas la recevoir par mail ?
un lien ftp serait plus judicieux ahma

Nickoeuh
01/10/2011, 18h50
Bon finalement, j'ai fait un script qui liste les .gz et j'envoie le dernier par mail 1h après la création de l'archive.
Ça fonctionne plutôt bien, donc résolu pour moi.

Nowwhat
26/09/2011, 00h34
....
Erf. Même pas vu la suite ...
Je --> [...] aussi.

Nickoeuh
25/09/2011, 20h06
Merci.

J'aimais l'idée de recevoir le dump par mail mais je ferai sans.

Bonne soirée

Gaston_Phone
25/09/2011, 13h40
Soyons prétentieux dans nos conseils!

Avec l'aimable autorisation de sfk, et de code_grabber une piste :

Comment faire un Backup/Restor de mes bases de données MUTUALISEES ?
-------------------------------------------------------------------------------

Bonjour, j'utilise le format GZIP.

Dans un script PHP je mets :

Sauvegarde GZIP - Toutes les tables :

Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot de passe de la base de données.

   
$cmd_mysql "mysqldump";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   echo 
" Sauvegarde de la base $db_name par mysqldump dans le fichier 
$archive_GZIP 
 \n";
   
$commande $cmd_mysql." --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset  $db_name    | gzip -c > $archive_GZIP ";
   
$CR_exec system($commande);
?>
Sauvegarde GZIP - quelques tables :

Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot de passe de la base de données.

   
$cmd_mysql "mysqldump";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   
$Liste_tables_a_sauvegarder " Table1 Table2 Table3 Table4 Table5 ... ";

   echo 
" Sauvegarde de la base $db_name par mysqldump dans le fichier 
$archive_GZIP 
 \n";
   
$commande $cmd_mysql." --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset  $db_name  $Liste_tables_a_sauvegarder  | gzip -c > $archive_GZIP ";
   
$CR_exec system($commande);
?>

Sauvegarde GZIP - sauve tables avec liste tables à exclure :

Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot de passe de la base de données.

   
$cmd_mysql "mysqldump";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   
$Prefixe_tables_a_exclure " --ignore-table=".$db_name.".jomla1_";

   echo 
" Sauvegarde de la base $db_name par mysqldump dans le fichier 
$archive_GZIP 
 \n";
   
$commande $cmd_mysql." --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset  $db_name  $Prefixe_tables_a_exclure  | gzip -c > $archive_GZIP ";
   
$CR_exec system($commande);
?>

Restauration GZIP
Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot de passe de la base de données.

   
$cmd_mysql "mysql";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   if (!
is_file($archive_GZIP))   echo "Le fichier ".$archive_GZIP." n'existe pas  
 \n"
;

   echo 
" Restauration de la base $db_name par mysql depuis le fichier $archive_GZIP 
 \n";
   
$commande "gzip -d < $archive_GZIP | $cmd_mysql --host=$db_server  --user=$db_username --password=$db_password $db_name";
   
$CR_exec system($commande); 
?>
Restauration SQL
Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot de passe de la base de données.

   
$cmd_mysql "mysql";

   
$archive_SQL      "Sauve_Base.SQL";

   if (!
is_file($archive_SQL))   echo "Le fichier ".$archive_SQL." n'existe pas  
 \n"
;

   echo 
" Restauration de la base $db_name par mysql depuis le fichier $archive_SQL 
 \n";
   
$commande "$cmd_mysql --host=$db_server  --user=$db_username --password=$db_password $db_name  < $archive_SQL";
   
$CR_exec system($commande); 
?>

Analyse :
Pour la partie sauvegarde pas de risque.
Pour la partie restauration, s'assurer au préalable que la sauvegarde est correcte :
  • Transfert de la sauvegarde sur ton micro,
  • Dé-zippe le fichier sauvegarde,
  • Ouvre avec NOTEPAD.EXE le fichier extrait.


Le fichier extrait doit avoir une taille conséquente et commencer par quelque chose qui ressemble à :

-- MySQL dump 10.13 Distrib 5.1.35, for Win32 (ia32)
--
-- Host: localhost Database: YYY
-- ------------------------------------------------------
-- Server version 5.1.35-community

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `tbl_adresses`
--

DROP TABLE IF EXISTS `Table_xxx`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Table_xxx` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
...
`DER` varchar(3) NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
KEY `Id` (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=2561 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `Table_xxx`
--

LOCK TABLES `Table_xxx` WRITE;

Nickoeuh
25/09/2011, 13h34
Merci pour ta réponse.
Mais c'est super pas secure comme fichier. Si quelqu'un trouve l'url de mon fichier, il peut avoir accès à mes données.

N'y a-t-il pas une protection contre ça ?

ekozan
25/09/2011, 11h40
c'est un script BASH ... donc .sh

Nickoeuh
25/09/2011, 11h07
Bonjour,

Je me permets de relancer ce sujet, car le script de Julia m'intéresse sauf que je ne sais pas quelle extension mettre pour le fichier.
J'ai mis .php (ayant vu un echo), mais ça m'affiche le code au lieu de l'exécuter.

Merci d'avance.

naeh
27/03/2009, 19h06
Citation Envoyé par sadinfo
Salut,

Pour la sauvegarde automatique de toutes les base:
Code:
DBS="$($MYSQL -u root -p$DBPASS  -Bse 'show databases')"
for DBNAME in $DBS
do

mysqldump --opt -u root -p$DBPASS $DBNAME > $BACKUPDIR/$DATEFORMAT-$DBNAME.sql
echo "Base de données $DBNAME sauvegardée"


done
A tester
il y a aussi l'option --all-databases
ce qui automatiquement dump toutes les bases du serveur.

sinon on peut aussi les lister les unes après les autres (si on ne veut pas toutes les dumper)

Alpha_67
11/07/2008, 18h07
Merci

sum_fvm
11/07/2008, 14h03
Sinon, backup-manager fait ça très bien aussi

Florentriv
11/07/2008, 13h43
Citation Envoyé par Alpha_67
Salut,
est ce que ces messages mis en gras sont normaux :
Il s'agit du taux de compression en zip, c'est donc normal

sadinfo
11/07/2008, 13h17
Salut,

Pour la sauvegarde automatique de toutes les base:
Code:
DBS="$($MYSQL -u root -p$DBPASS  -Bse 'show databases')"
for DBNAME in $DBS
do

mysqldump --opt -u root -p$DBPASS $DBNAME > $BACKUPDIR/$DATEFORMAT-$DBNAME.sql
echo "Base de données $DBNAME sauvegardée"


done
A tester

Alpha_67
09/07/2008, 13h54
Salut,

est ce que ces messages mis en gras sont normaux :
adding: var/www/backups/09-07-psychosstats.sql (deflated 76%)
adding: var/www/backups/09-07-gpx.sql (deflated 81%)
adding: var/www/backups/09-07-hlstatsmulti.sql (deflated 87%)

nero62
14/12/2007, 11h33
Bonjour,

Mes bases de données font environ 5Go : ceci ne risque-t-il pas de surcharger le serveur au moment de la sauvegarde ?

redji
26/09/2007, 16h04
plutot pas mal ce script julia merci beaucoup si je vais testé sa maintnenant en esperant que d autre pourrons l optimiser ^^

Julia41
26/09/2007, 15h11
Bon, ceci est un petit script permettant une sauvegarde automatique de ses Bases de données MySQL. Ainsi que d'envoyer un mail contenant un backup de ses bases de données. Le format Zip a été choisi pour pouvoir être lu facilement sous Windows...

Il n'est pas complet, quelques modifications (cf. TODO) pourrait être sympa.

Code:
#!/bin/bash

#***********************************************************************#
#             BACKUP MySQL repris de celui de DanSteph		              #
#             ------------------                                        #
#	Vous pouvez lancer ce script en cron tous les jours, il est	          #
#	prévu pour un backup par jour					                                #
#	Attention à la taille de vos bases de données pour l'envois	          #
#	des emails .							                                            #
#                                                                       #
#***********************************************************************#

#***********************************************************************#
#			TODO						                                                  #
#	Gestion des erreurs si échec					                                #
#	Fichier permettant de mettre directement ses BDD		                  #
#***********************************************************************#

#***********************************************************************#
# PARAMETRES A EDITER 
#***********************************************************************#
USER="root"	        		                  #Nom de superutilisateur MySQL
DBPASS="XXXXXXXX"		    	                #Votre password superutilisateur
EMAIL="XXXXXXXX@XXX.XXX"     		          #Votre email
#Envois d'un mail (attention ne pas mettre à 1 si JOINDB=1
MAILSEND="0"			    	                  
DBNAME1="aseco" 			                    #Nom de vos bases de données
DBNAME2="cacti"				                    #Une nouvelle ligne par base
DBNAME3="flyspray"			                  #
DATEFORMAT=`date +%d-%m`		              #Format de la fate pour le backup
#Sujet de mail que vous recevrez si MAILSEND ou JOINDB = 1
SUJETMAIL="Backup $DATEFORMAT MySQL effectué"
COMPRESS="1"				                      #Mettre "1" pour zipper le backup
JOINDB="1"				                        #Joindre par mail le Backup
#Mettez à 0 si vous souhaitez supprimer la copie local (Déconseillé)
KEEPLOCAL="0"
#***********************************************************************#
#			EDITION AVANCEE					                                          #
#***********************************************************************#

#Répertoire de backup (temporaire si KEEPLOCAL = 0
BACKUPDIR="/home/backup/sql/"

#Sauvegarde des bases de données
#Rajoutez une ligne si vous avez plus de bases de données à sauvegarder
echo "Backup SQL commencé le `date`"
mysqldump --opt -u root -p$DBPASS $DBNAME1 > $BACKUPDIR/$DATEFORMAT-$DBNAME1.sql
echo "Base de données $DBNAME1 sauvegardée"
mysqldump --opt -u root -p$DBPASS $DBNAME2 > $BACKUPDIR/$DATEFORMAT-$DBNAME2.sql
echo "Base de données $DBNAME2 sauvegardée"
mysqldump --opt -u root -p$DBPASS $DBNAME3 > $BACKUPDIR/$DATEFORMAT-$DBNAME3.sql
echo "Base de données $DBNAME3 sauvegardée"

#***********************************************************************#
#		FIN DES PARAMETRES A EDITER				                                  #
#***********************************************************************#

#Compression en Zip si COMPRESS est à 1 (Option obligatoire pour l'envois de la copie par mail.
if [ "$COMPRESS" = "1" ]
then
	zip -rT9 $DATEFORMAT-MySQL.zip $BACKUPDIR
	rm $BACKUPDIR*
	mv $DATEFORMAT-MySQL.zip $BACKUPDIR
	echo "Backup SQL compressé effectué `date`"
fi
#Envois d'un email récapitulatif (Désactivé la variable MAILSEND si vous avez mis JOINDB à 1.
if [ "$MAILSEND" = "1" ]
then
	echo -e "Backup MySQL effectué le `date`.\nLes Bases de données $DBNAME1, $DBNAME2, $DBNAME3 ont bien été sauvegardées.\nFichier $DATEFORMAT-MySQL.zip placé dans $BACKUPDIR" | mail -s "$SUJETMAIL" $EMAIL
fi
#Envois de votre sauvegarde par email (seulement si vous avez activé la compression par ZIP.
if [ "$JOINDB" = "1" ]
then
	cd $BACKUPDIR
	(echo -e "Backup MySQL effectué le `date`.\nLes Bases de données $DBNAME1, $DBNAME2, $DBNAME3 ont bien été sauvegardées.\nFichier $DATEFORMAT-MySQL.zip placé dans $BACKUPDIR"; uuencode $DATEFORMAT-MySQL.zip $DATEFORMAT-MySQL.zip) | mail -s "$SUJETMAIL" $EMAIL
fi
#Suppression de votre sauvegarde local si la variable KEEPLOCAL est = 0
if [ "$KEEPLOCAL" = "0" ]
then
	rm $BACKUPDIR*
fi
echo "Backup terminé"