<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux - Développeur internet Lyon - A Web Vision</title>
	<atom:link href="https://www.awebvision.fr/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.awebvision.fr/tag/linux/</link>
	<description>Développeur web freelance full-stack senior Lyon</description>
	<lastBuildDate>Fri, 27 Sep 2024 21:48:40 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Linux : Script bash pour une sauvegarde historisée</title>
		<link>https://www.awebvision.fr/linux-script-bash-pour-une-sauvegarde-historisee/</link>
					<comments>https://www.awebvision.fr/linux-script-bash-pour-une-sauvegarde-historisee/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 14 Oct 2015 01:51:05 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://www.awebvision.fr/?p=432</guid>

					<description><![CDATA[Le principe est simple : réaliser une sauvegarde historisée sur un certain nombre de jours d&#8217;un serveur Linux. J&#8217;ai personnellement sélectionné : Le répertoire etc pour avoir la conf du serveur et des services utilisés Les bases de données, sous forme de dump MySQL Les répertoires des différents sites web Le script va créer une [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Le principe est simple : réaliser une sauvegarde historisée sur un certain nombre de jours d&rsquo;un serveur Linux.<br />
J&rsquo;ai personnellement sélectionné :</p>
<ul>
<li>Le répertoire <em>etc</em> pour avoir la conf du serveur et des services utilisés</li>
<li>Les bases de données, sous forme de dump MySQL</li>
<li>Les répertoires des différents sites web</li>
</ul>
<p>Le script va créer une archive tar.gz par jour et par élément (etc, bases, répertoires web), enregistrés sous un dossier local qui sera ici <em>/home/sauvegardes/</em><br />
Il faudra en général prévoir un rsync distant de la dernière version de chaque élément au moins, pour avoir une sauvegarde distante. Ceci pourrait faire l&rsquo;objet d&rsquo;un autre article.</p>
<p>Ce script étant à appeler en tache « cron » bien entendu.</p>
<p>En attendant, voilà le script en question.</p>
<pre><code>#!/bin/bash

# DECLARATIONS VARIABLES
mysqldbs=(db1 db2 db3)
wwwdirs=(dir1 dir2 dir3)
nbjours=30
jourtodelete=$((nbjours+1))

# ROTATION ANCIENNES VERSIONS
for ((  jour = ${nbjours[*]};  jour &gt; 1;  jour--  ))
do
    jourprec=$((jour-1))
    # SYSTEME
    mv /home/sauvegardes/etc.$jourprec.tar.gz /home/sauvegardes/etc.$jour.tar.gz

    # MYSQL
    for db in ${mysqldbs[*]}
    do
        mv /home/sauvegardes/mysql_dump/$db.$jourprec.sql.tar.gz /home/sauvegardes/mysql_dump/$db.$jour.sql.tar.gz
    done
    # WWW
    for dir in ${wwwdirs[*]}
    do
        mv /home/sauvegardes/www/$dir.$jourprec.tar.gz /home/sauvegardes/www/$dir.$jour.tar.gz
    done
done

# SUPPRESSION VERSION LA PLUS VIEILLE
# SYSTEME
rm /home/sauvegardes/etc.$jourtodelete.sql.tar.gz
# MYSQL
for db in ${mysqldbs[*]}
do
    rm /home/sauvegardes/mysql_dump/$db.$jourtodelete.sql.tar.gz
done
# WWW
for dir in ${wwwdirs[*]}
do
    rm /home/sauvegardes/www/$dir.$jourtodelete.tar.gz
done

# GENERATION VERSION DU JOUR
# SYSTEME
tar czf /home/sauvegardes/etc.1.tar.gz /etc
# MYSQL
for db in ${mysqldbs[*]}
do
    mysqldump -u root --password=MYSQLROOTPASSWORD $db &gt; /home/sauvegardes/mysql_dump/$db.sql
    tar czf /home/sauvegardes/mysql_dump/$db.1.sql.tar.gz /home/sauvegardes/mysql_dump/$db.sql
    rm /home/sauvegardes/mysql_dump/$db.sql
done
# WWW
for dir in ${wwwdirs[*]}
do
    tar --exclude='*/cache/*' --exclude='*/logs/*' --exclude='*/tmp/*' -cvzf /home/sauvegardes/www/$dir.1.tar.gz /var/www/$dir/
done</code></pre>
<p>Pour l&rsquo;adapter à votre environnement :</p>
<ul>
<li>Remplacer « (db1 db2 db3) » par la liste des bases à sauvegarder</li>
<li>Remplacer « (dir1 dir2 dir3) » par la liste des répertoires web à sauvegarder</li>
<li>Variable « nbjours » : renseigner le nombre de jours d&rsquo;historisation souhaités</li>
<li>Remplacer « MYSQLROOTPASSWORD » par le mot de passe root MySQL de votre serveur.</li>
<li>Remplacer « /home/sauvegardes/ » ainsi que « /home/sauvegardes/mysql_dump/ » et « /home/sauvegardes/www » par les chemins respectifs souhaités : racine des sauvegardes, répertoire des sauvegardes des bases, et répertoire des sauvegardes des répertoires web.</li>
</ul>
<p>Et roulez jeunesse !</p>
<p>Cela reste artisanal, mais très pratique pour avoir une procédure de sauvegardes historisées suffisante pour pouvoir restaurer des versions antérieures de chaque site, ainsi que le paramétrage du serveur (en cas d&rsquo;urgence, ce que je ne vous souhaite pas).</p>
<p>La grosse faille du script étant la présence du mot de passe root MySQL en dur, il mériterait de gérer les mots de passe de chaque base sous forme de liste pour éviter d&rsquo;avoir le mot de passe root. Et dans l&rsquo;idéal de trouver une solution pour ne pas faire apparaitre les mots de passe dans le script.<br />
La première solution est relativement simple à implémenter, la deuxième beaucoup moins mais est sans doute possible également.<br />
Je n&rsquo;ai pas appronfondi ces aspects, le serveur concerné dans mon cas personnel étant un serveur de développement et de « gros bordel », les enjeux stratégiques sécuritaires n&rsquo;en valaient pas la peine.</p>
<p>Si vous utilisez ce script comme base et le faites évoluer dans ce sens, n&rsquo;hésitez pas à poster des modifications améliorant ces aspects de sécurité (et éventuellement d&rsquo;autres que je n&rsquo;aurais pas identifié) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.awebvision.fr/linux-script-bash-pour-une-sauvegarde-historisee/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 
Chargement différé (feed)
Minified using Disk
Mise en cache de la base de données de 81/90 requêtes en 0.011 secondes utilisant Disk

Served from: www.awebvision.fr @ 2026-03-11 14:16:12 by W3 Total Cache
-->