Yedeklemenin bir sistemin geleceği için ne kadar önemli olduğunu başınıza bir olay geldikten sonra anlarsınız. Ama iş işten geçmiştir. Neden iş işten geçmeden önlemimizi almayalım?
Aşağıdaki yazmış olduğum script; mysql veritabanı olanların ve database ile birlikte bazı dosyaları yedekleyerek bu yedekleri uzaktaki bir ftp sunucuya atmak isteyenlerin işini görebilecek düzeydedir. Bu scripti crontabınıza koyarak belirli periyotlarda çalıştırabilirsiniz. Scriptin yaptığı işleri özetlersek;
- Belirli databaseler ayrı ayrı ve tüm mysql database için tek bir .sql dosyasına databaselerin dumpını alır
- /var/www klasörü altındaki tüm web kodlarını ve /etc deki tüm config dosyalarını yedekler.
- Alınan tüm yedekleri uzaktaki bir ftp sunucuya aktarır.
- Sunucuda bulunan yedekler için belirli bir zamandan önceki yedek dosyalarını siler.
- Yapılan tüm yedekleme işlemi loglanır.
Güle güle kullanın…
#!/usr/bin/bash # Shell script to backup and transfer db, config and web # files to ftp backup server # initial version date = 01.02.2011 # author = Bayram Karagoz MyUSER="user" # USERNAME MyPASS="password" # PASSWORD MyHOST="localhost" # Hostname FtpUSER="user" FtpPASS="password" FtpHOST="your_ftp_server_ip" # Linux bin paths, change this if it can not be autodetected via which command MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" TAR="$(which tar)" NCFTPPUT="$(which ncftpput)" # Backup Dest directory, change this if you have someother location DB_DEST="/backups/db_backups" WWW_DEST="/backups/www_backups" # Log file full path LOGFILE="/backups/backup.log" # Get data in dd-mm-yyyy format NOW="$(date +"%d-%m-%Y")" DATE=`date +%Y-%m-%d_%H:%M` # databases which to backup DB1="aaaa" DB2="bbbb" DB3="cccc" DB4="dddd" DB5="eeee" DB6="ffff" DB7="gggg" # backup files path BACKUP1="/var/www" BACKUP2="/etc" # Make logfile # Membuat logfile exec 6>&1 exec >> $LOGFILE # Link file descriptor #6 with stdout. # Saves stdout. exec 7>&2 # Link file descriptor #7 with stderr. # Saves stderr. exec 2>> $LOGFILE # stderr replaced with file $LOGERR. echo "----------------------------------------------------" echo Backup Procedure is starting at $DATE echo Starting backup of $DB1 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB1 | $GZIP -9 > $DB_DEST/$NOW.$DB1.gz echo $DB1 database backup finished. echo Starting backup of $DB2 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB2 | $GZIP -9 > $DB_DEST/$NOW.$DB2.gz echo $DB2 database backup finished. echo Starting backup of $DB3 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB3.gz echo $DB3 database backup finished. echo Starting backup of $DB4 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB4.gz echo $DB4 database backup finished. echo Starting backup of $DB5 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB5.gz echo $DB5 database backup finished. echo Starting backup of $DB6 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB6.gz echo $DB6 database backup finished. echo Starting backup of $DB7 databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB7.gz echo $DB7 database backup finished. echo Starting backup of all databases... $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS --all-databases | $GZIP -9 > $DB_DEST/$NOW.all_db.gz echo all databases backup finished. echo Starting backup of $BACKUP1 directory... $TAR cf - $BACKUP1 | $GZIP -9c > $WWW_DEST/$NOW.www.tar.gz echo $BACKUP1 backup finished. echo Starting backup of $BACKUP2 directory... $TAR cfh - $BACKUP2 | $GZIP -9c > $WWW_DEST/$NOW.etc.tar.gz echo $BACKUP2 backup finished. echo ***Backup transfer is starting...*** $NCFTPPUT -u $FtpUSER -p $FtpPASS $FtpHOST /db_backups $DB_DEST/$NOW.$DB1.gz $DB_DEST/$NOW.$DB2.gz $DB_DEST/$NOW.$DB3.gz \ $DB_DEST/$NOW.$DB4.gz $DB_DEST/$NOW.$DB5.gz $DB_DEST/$NOW.$DB6.gz $DB_DEST/$NOW.$DB7.gz $DB_DEST/$NOW.all_db.gz $NCFTPPUT -u $FtpUSER -p $FtpPASS $FtpHOST /www_backups $WWW_DEST/$NOW.www.tar.gz $WWW_DEST/$NOW.etc.tar.gz echo ***Backup transfer is finished...*** echo "Deleting old database backup files..." oldbackup=`find $DB_DEST -type f -mtime 30 -name "*.gz"` for current_file in `echo $oldbackup` do rm -f $current_file echo $current_file deleted done echo Old database backup files deletion finished. echo "Deleting old backup files..." oldbackup=`find $WWW_DEST -type f -mtime 10 -name "*.gz"` for current_file in `echo $oldbackup` do rm -f $current_file echo $current_file deleted done echo Old backup files deletion finished. echo "----------------------------------------------------"
NOT: Scriptin yanlış çalıştırılması veya herhangi başka bir problemden ötürü data kaybı yaşanmasından dolayı scripti yazan olarak sorumluluk kabul edilmemektedir. Çalıştırıp çalıştırmamak sizin elinizdedir.






