This is a simple backup solution for people who run their own web server and MySQL database server on a dedicated or VPS server. Most dedicated hosting provider provides backup service using NAS or FTP servers. These service providers will hook you to their redundant centralized storage array over private VLAN. Since, I manage couple of boxes, here is my own automated solution. If you just want a shell script, go here (you just need to provided appropriate input and it will generate FTP backup script for you on fly, you can also grab my php script generator code).
Making Incremental Backups With tar
You can make tape backups. However, sometime tape is not an option. GNU tar allows you to make incremental backups with -g option. In this example, tar command will make incremental backup of /var/www/html, /home, and /etc directories, run:# tar -g /var/log/tar-incremental.log -zcvf /backup/today.tar.gz /var/www/html /home /etc
Where,
- -g: Create/list/extract new GNU-format incremental backup and store information to /var/log/tar-incremental.log file.
Making MySQL Databases Backup
mysqldump is a client program for dumping or backing up mysql databases, tables and data. For example, the following command displays the list of databases:$ mysql -u root -h localhost -p -Bse 'show databases'
Output:
Enter password: brutelog cake faqs mysql phpads snews test tmp van wpNext, you can backup each database with the mysqldump command:
$ mysqldump -u root -h localhost -pmypassword faqs | gzip -9 > faqs-db.sql.gz
Creating A Simple Backup System For Your Installation
The main advantage of using FTP or NAS backup is a protection from data loss. You can use various protocols to backup data:- FTP
- SSH
- RSYNC
- Other Commercial solutions
- Make a full backup every Sunday night i.e. backup everything every Sunday
- Next backup only those files that has been modified since the full backup (incremental backup).
- This is a seven-day backup cycle.
Our Sample Setup
Your-server ===> ftp/nas server IP:202.54.1.10 ===> 208.111.2.5Let us assume that your ftp login details are as follows:
- FTP server IP: 208.111.2.5
- FTP Username: nixcraft
- FTP Password: somepassword
- FTP Directory: /home/nixcraft (or /)
=> /home/nixcraft/full/mm-dd-yy/files - Full backup
=> /home/nixcraft/incremental/mm-dd-yy/files - Incremental backup
Automating Backup With tar
Now, you know how to backup files and mysql databases using the tar and mysqldump commands. It is time to write a shell script that will automate entire procedure:- First, our script will collect all data from both MySQL database server and file system into a temporary directory called /backup using a tar command.
- Next, script will login to your ftp server and create a directory structure as discussed above.
- Script will dump all files from /backup to the ftp server.
- Script will remove temporary backup from /backup directory.
- Script will send you an email notification if ftp backups failed due to any reason.
- ncftp ftp client
- mysqldump command
- GNU tar command
- #!/bin/sh
- # System + MySQL backup script
# Full backup day - Sun (rest of the day do incremental backup)- # Copyright (c) 2005-2006 nixCraft <http://www.cyberciti.biz/fb/>
- # This script is licensed under GNU GPL version 2.0 or above
- # Automatically generated by http://bash.cyberciti.biz/backup/wizard-ftp-script.php
- # ---------------------------------------------------------------------
- ### System Setup ###
- DIRS="/home /etc /var/www"
- BACKUP=/tmp/backup.$$
- NOW=$(date +"%d-%m-%Y")
- INCFILE="/root/tar-inc-backup.dat"
- DAY=$(date +"%a")
- FULLBACKUP="Sun"
- ### MySQL Setup ###
- MUSER="admin"
- MPASS="mysqladminpassword"
- MHOST="localhost"
- MYSQL="$(which mysql)"
- MYSQLDUMP="$(which mysqldump)"
- GZIP="$(which gzip)"
- ### FTP server Setup ###
- FTPD="/home/vivek/incremental"
- FTPU="vivek"
- FTPP="ftppassword"
- FTPS="208.111.11.2"
- NCFTP="$(which ncftpput)"
- ### Other stuff ###
- EMAILID="admin@theos.in"
- ### Start Backup for file system ###
- [ ! -d $BACKUP ] && mkdir -p $BACKUP || :
- ### See if we want to make a full backup ###
- if [ "$DAY" == "$FULLBACKUP" ]; then
- FTPD="/home/vivek/full"
- FILE="fs-full-$NOW.tar.gz"
- tar -zcvf $BACKUP/$FILE $DIRS
- else
- i=$(date +"%Hh%Mm%Ss")
- FILE="fs-i-$NOW-$i.tar.gz"
- tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS
- fi
- ### Start MySQL Backup ###
- # Get all databases name
- DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
- for db in $DBS
- do
- FILE=$BACKUP/mysql-$db.$NOW-$(date +"%T").gz
- $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
- done
- ### Dump backup using FTP ###
- #Start FTP backup using ncftp
- ncftp -u"$FTPU" -p"$FTPP" $FTPS<<EOF
- mkdir $FTPD
- mkdir $FTPD/$NOW
- cd $FTPD/$NOW
- lcd $BACKUP
- mput *
- quit
- EOF
- ### Find out if ftp backup failed or not ###
- if [ "$?" == "0" ]; then
- rm -f $BACKUP/*
- else
- T=/tmp/backup.fail
- echo "Date: $(date)">$T
- echo "Hostname: $(hostname)" >>$T
- echo "Backup failed" >>$T
- mail -s "BACKUP FAILED" "$EMAILID" <$T
- rm -f $T
- fi
More Details Click
Autherby-cyberciti.biz |
This is the very informative blog to get the solutions of all your problems and queries which you are facing in taking backup of mysql database and if you have trading regarding queries then use Stock Tips.
ReplyDeleteSuch a great and informative article. Thanks for sharing.
ReplyDeletedata entry service provider