PDA

Voir la version complète : Sauvegarde Automatique J-1 J-7 J-30 (SQL)


NazzTazz
21/02/2008, 00h20
Bonjour.

Si ca peut servir a quelqu'un, voici un script que j'ai mis au point pour effectuer des sauvegardes regulieres de mes bases de données.

Il tient a jour 3 copies:

Hier
Semaine derniere
Mois dernier

Il est a votre disposition.

#! /usr/bin/php
<?php

/*------------------------------------------------------------
Backup automatique de toutes les bases de données d'un serveur.
--------------------------------------------------------------

Nécéssite: Php4+ avec l'extention mysql

Fonctionne en mode PHP-CLI ( ligne de commande ) en root.

Installation:

wget http://nazztazz.ovh.org/sql_backups
chmod +x ./sql_backups

Puis, ajouter la ligne suivante dans votre crontab:

0 3 * * * root /chemin/vers/sql_backups >/dev/null 2>&1

Usage libre. <info@nazztazz.fr>

------------------------------------------------------------*/


#--------------------------------------------------------------------------------------
# SECTION A MODIFIER POUR L'ADAPTER A VOTRE SERVEUR
#--------------------------------------------------------------------------------------

# Ip ou Hostname du serveur SQL
define ('host', '127.0.0.1');

# Utilisateur avec lequel se connecter ( root dans la majorité des cas )
define ('user', 'root');

# Mot de passe pour l'utilisateur SQL
define ('pass', 'mot_passe_root');

/* ---------------------------------------------------------------------------------------
Note:
----
Si vous desirez utiliser les repertoires par defaut du script de sauvegarde, copiez ceci
dans un terminal ssh:

mkdir /root/dumps && mkdir /root/dumps/backups && mkdir /root/dumps/backups/hier
mkdir /root/dumps/backups/semaine-derniere && mkdir /root/dumps/backups/mois-dernier

------------------------------------------------------------------------------------------*/

# Repertoire pour la sauvegarde quotidienne
define ('last_d_dir', '/root/dumps/backups/hier');

# Repertoire pour la sauvegarde hebdomadaire
define ('last_w_dir', '/root/dumps/backups/semaine-derniere');

# Repertoire pour la sauvegarde mensuelle
define ('last_m_dir', '/root/dumps/backups/mois-dernier');


#---------------------------------------------------------------------------------------
# PLUS RIEN A MODIFIER
#---------------------------------------------------------------------------------------


define ('EOL', "\n");
$debug = false;

if (pass == 'mot_passe_root')
die('Oops, un oubli ? Il faut configurer le script de backup.');

@mysql_connect(host, user, pass)
or die('Verifier vos infos de connexion sql.');

print '--------------------------------------------------------------'.EOL;
print 'BACKUP AUTOMATIQUE'. EOL;
print '--------------------------------------------------------------'.EOL.EOL;

touch (last_d_dir.'/last_backup');

$sQr = mysql_query('SHOW DATABASES;');

$bases = array();

print 'Les bases suivantes seront sauvegardees:'.EOL.EOL;

while ($row = mysql_fetch_array($sQr))
{
$bases[] = $row[0];
print $row[0]. EOL;
}

print EOL;

mysql_close();

foreach($bases AS $base)
{
print 'Sauvegarde de '.$base. '... ';
$cmd = 'mysqldump -h '.host. ' -u '.user. ' --password=' .pass. ' ' .$base.' > ' .last_d_dir.'/'.$base.'.sql';

if ($debug)
print EOL.'debug: '.$cmd.EOL;
else
exec($cmd);

print '[ OK ]'. EOL;
}

if (time() - @filemtime(last_w_dir.'/last_backup') > 60*60*24*7)
{
print 'Le backup de la semaine est trop vieux, mise a jour... ';
$cmd = 'cp '.last_d_dir.'/* '.last_w_dir;

if ($debug)
print EOL.'debug: '.$cmd.EOL;
else
exec($cmd);

touch (last_w_dir.'/last_backup');
print '[ OK ]'. EOL.EOL;
}

if (time() - @filemtime(last_m_dir.'/last_backup') > 60*60*24*30)
{
print 'Le backup du mois est trop vieux, mise a jour... ';
$cmd = 'cp '.last_d_dir.'/* '.last_m_dir;

if ($debug)
print 'debug: '.$cmd.EOL;
else
exec($cmd);

touch (last_m_dir.'/last_backup');
print '[ OK ]'. EOL.EOL;
}

?>

kitkiller
24/02/2008, 14h25
Bonjour,



Tout d'abord merci pour ton script de backup, mais j'ai un petit soucis, utilisant php 5, je ne trouve pas /usr/bin/php, dans /usr/bin il n'y a rien en rapport avec php :/ Une idée ?



Merci d'avance :)

MightyDucks
20/03/2008, 13h49
Vraiment bien ce script !

Petite modification à apporter tout de même :
$cmd = 'mysqldump -h '.host. ' -u '.user. ' --password="' .pass. '" ' .$base.' > ' .last_d_dir.'/'.$base.'.sql';

J'ai encapsulé le pass car les caractères spéciaux sont plus ou moins bien pris par le shell. ( ; , : / $ etc)

Je pense d'ailleurs que les autres champs peuvent aussi être encapsulé pour éviter tous problèmes :D

NazzTazz
24/03/2008, 12h09
Oui tu as tout a fait raison :)

Je n'y ai pas pensé pour la simple raison que tous mes mots de passe matchent [0-9a-z], mais c'est une erreur.

MightyDucks
25/03/2008, 08h46
A ce sujet, j'ai écrit la même chose pour sauvegarder les fichiers et les transférer sur le FTP backup ovh.

Dès que je le termine le met à dispo!

NazzTazz
25/03/2008, 22h35
Ok, j'editerai le titre du sujet :)