====== Using Rsync ======
===== syncing, backuping =====
rsync makes //easy// to make incremental backups : it synchronise files from two different folders and only transferts what have changed.
===== rsync over ssh =====
In daily work, it is good to have 2 versions of my work synchronised :
  * one is on my local machine as work version
  * one is on a distant server as test version
Those versions have to be synchronised
rsync_all.sh
rsync -a -c -z -l -e ssh --delete --stats --progress --exclude-from 'rsync_exclude.txt' "spip/" "freelancis@freelancis.net:./mcs.freelancis.net/web/"
rsync_exclude.txt
svn.*
.git
.gitignore
tmp/prive_spip.*
tmp/spip.*
tmp/cache/*
tmp/sessions/*
tmp/visites/*
local/*
.DS_Store
*/.DS_Store
===== rsync for backup =====
{{:ressources:ssh:ubuntu_timemachine.jpg|}}
let's make my backups
  * using TimeMachine is a good option under Mac OS 10.5 : it keeps tracks of each version,  see at the [[:ressources:ubuntu:bonjour|bonjour tutorial]] for setting it up with an ubuntu server
  * some alternative could be to use rsync
===== rsync to get interrupted ssh connection =====
When my scp connexion is interrupted, rsync --partial makes the trick
nyx:~ gaspard$ scp -C idunn.freelancis.net:./wp_db.gz .
gaspard@idunn.freelancis.net s password: 
wp_db.gz         49%  738MB   0.0KB/s - stalled -Read from remote host
idunn.freelancis.net: Connection reset by peer
lost connection
nyx:~ gaspard$ rsync --partial idunn.freelancis.net:./wp_db.gz .
gaspard@idunn.freelancis.net s password: 
===== rsync to backup my server ===== 
Where are important data on my server ?
^path ^ user ^ description ^
|/etc/apache2/ |root | apache configuration |
|/home/freelancis/ |freelancis | hosted websites |
|/home/mysql/ |mysql |mysql databases |
I want the exact copy of these elements.
==== backuping /etc/apache2/ ====
I gonna have to use root shell, I hate to do this but it looks like it is the only way.
==== backuping /home/freelancis/ ====
rsync -a -c -z -e ssh --delete --stats --progress --exclude-from 'rsync_exclude_user_freelancis.txt' "freelancis@freelancis.net:." "user_freelancis"
I just don't need the cached elements, that's why I discard them by using a rsync_exclude_user_freelancis.txt file
tmp/cache/
data/cache/
==== /home/mysql/ ====
There is no shell user as mysql, so i gonna have to use root.
===== rsync command lines ===== 
 
  * -v, --verbose increase verbosity
  * -q, --quiet decrease verbosity
  * -c, --checksum always checksum
  * -a, --archive archive mode. It is a quick way of saying you want recursion and want to preserve everything.
  * -r, --recursive recurse into directories
  * -R, --relative use relative path names
  * -u, --update don't overwrite files that are newer on the destination directory
  * -t, --times preserve times
  * -n, --dry-run show what would have been transferred
  * -W, --whole-file copy whole files, no incremental checks
  * -I, --ignore-times Normally rsync will skip any files that are already the same length and have the same time-stamp. This option turns off this behavior.
  * --existing only update files that already exist
  * --delete delete files that don't exist on the sending side
  * --delete-after delete after transferring, not before
  * --force force deletion of directories even if not empty
  * -c, --checksum always checksum
  * --size-only only use file size when determining if a file should be transferred
  * --progress show progress during transfer
  * -z, --compress compress file data
  * --exclude=PATTERN exclude files matching PATTERN
  * --daemon run as a rsync daemon
  * --password-file=FILE get password from FILE
===== more ressources ===== 
  * [[http://rootprompt.org/article.php3?article=8976|Noel Davis' backup script]] is a good start, do I need the same parameters ? do these arguments are still valid on latest build of rsync ?
  * [[Mike's tutorial|http://www.mikerubel.org/computers/rsync_snapshots/]] is quite good too, goot things to gather there