MySQL Database ve Dosya Yedeklerini Alıp Bu Yedekleri Uzaktaki FTP Sunucuya Aktaran Script

Filed in Genel | Gezegen | MySQL Leave a comment

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.

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.13_1145]
Rating: 0 (from 0 votes)
Share
PDF Printer    Send article as PDF   

, , , ,

PostgreSQL Backup Scripti

Filed in FreeBSD | Gezegen | PostgreSQL Leave a comment

Postgresql veritabanınız varsa belirli periyotlarda veritabanınızın yedeğini almanız yararınıza olacaktır. Her hangi bir problemden dolayı datalarınızı yitirdiğinizde geri dönüşü mümkün olmayan durumlara mahal vermemek için hazırlamış olduğum yedekleme scriptini kullanabilirsiniz.

Aşağıda bulunan script veritabanı VACUUM ANALYZE işlemi yaptıktan sonra istenilen veritabanını dump alıp sıkıştırarak yedeklerin olduğu klasöre kopyalıyor. Bununla birlikte yedeklerin bulunduğu klasör altında 30 günden eski yedekleri de temizliyor. Daha sonra tüm işlemlerin çıktılarını backup.log dosyasında istediğimiz zaman inceleyebilmemiz için logluyor.

Scripti kendinize göre konfigüre ettikten sonra crontab a istediğiniz zaman diliminde çalıştıracak şekilde ekleyebilirsiniz.

#!/usr/local/bin/bash
DUMP_CMD=/usr/local/bin/pg_dump
VACUUM_CMD=/usr/local/bin/vacuumdb
BACKUP_DIR= /your/ backup/ directory
DBUSER="pgsql"
DBNAME="your database name"
DATE=`date +%Y-%m-%d_%Hh%Mm`
LOGFILE=$BACKUP_DIR/../log/backup.log
# 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..
echo $DATE
echo Starting vacuum operation..
$VACUUM_CMD -z -a -U $DBUSER
echo Vacuum finished...
echo Starting backup of $DBNAME databases...
$DUMP_CMD -U $DBUSER $DBNAME | gzip -c > $BACKUP_DIR/database-$DATE.dump.gz
echo Backup finished...
echo "Deleting old backup files..."
oldbackup=`find $BACKUP_DIR -type f -mtime 30 -name "*.dump.gz"`
for current_file in `echo $oldbackup`
do
rm -f $current_file
echo $current_file deleted
done
echo "Old file deletion finished"
echo " "
echo "----------------------------------------------------"
VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.13_1145]
Rating: 0 (from 0 votes)
Share
PDF    Send article as PDF   

, , ,

TOP