MySQL Database ve Dosya Yedeklerini Alıp Bu Yedekleri Uzaktaki FTP Sunucuya Aktaran Script
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…
001 #!/usr/bin/bash
002
003 # Shell script to backup and transfer db, config and web
004 # files to ftp backup server
005 # initial version date = 01.02.2011
006 # author = Bayram Karagoz
007
008 MyUSER="user" # USERNAME
009 MyPASS="password" # PASSWORD
010 MyHOST="localhost" # Hostname
011
012 FtpUSER="user"
013 FtpPASS="password"
014 FtpHOST="your_ftp_server_ip"
015
016 # Linux bin paths, change this if it can not be autodetected via which command
017 MYSQL="$(which mysql)"
018 MYSQLDUMP="$(which mysqldump)"
019 GZIP="$(which gzip)"
020 TAR="$(which tar)"
021 NCFTPPUT="$(which ncftpput)"
022
023 # Backup Dest directory, change this if you have someother location
024 DB_DEST="/backups/db_backups"
025 WWW_DEST="/backups/www_backups"
026
027 # Log file full path
028 LOGFILE="/backups/backup.log"
029
030 # Get data in dd-mm-yyyy format
031 NOW="$(date +"%d-%m-%Y")"
032 DATE=`date +%Y-%m-%d_%H:%M`
033
034 # databases which to backup
035 DB1="aaaa"
036 DB2="bbbb"
037 DB3="cccc"
038 DB4="dddd"
039 DB5="eeee"
040 DB6="ffff"
041 DB7="gggg"
042
043 # backup files path
044
045 BACKUP1="/var/www"
046 BACKUP2="/etc"
047
048 # Make logfile
049
050 # Membuat logfile
051
052 exec 6>&1
053
054 exec >> $LOGFILE # Link file descriptor #6 with stdout.
055
056 # Saves stdout.
057
058 exec 7>&2 # Link file descriptor #7 with stderr.
059
060 # Saves stderr.
061
062 exec 2>> $LOGFILE # stderr replaced with file $LOGERR.
063
064 echo "----------------------------------------------------"
065 echo Backup Procedure is starting at $DATE
066
067 echo Starting backup of $DB1 databases...
068 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB1 | $GZIP -9 > $DB_DEST/$NOW.$DB1.gz
069 echo $DB1 database backup finished.
070
071 echo Starting backup of $DB2 databases...
072 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB2 | $GZIP -9 > $DB_DEST/$NOW.$DB2.gz
073 echo $DB2 database backup finished.
074
075 echo Starting backup of $DB3 databases...
076 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB3.gz
077 echo $DB3 database backup finished.
078
079 echo Starting backup of $DB4 databases...
080 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB4.gz
081 echo $DB4 database backup finished.
082
083 echo Starting backup of $DB5 databases...
084 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB5.gz
085 echo $DB5 database backup finished.
086
087 echo Starting backup of $DB6 databases...
088 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB6.gz
089 echo $DB6 database backup finished.
090
091 echo Starting backup of $DB7 databases...
092 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $DB3 | $GZIP -9 > $DB_DEST/$NOW.$DB7.gz
093 echo $DB7 database backup finished.
094
095 echo Starting backup of all databases...
096 $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS --all-databases | $GZIP -9 > $DB_DEST/$NOW.all_db.gz
097 echo all databases backup finished.
098
099 echo Starting backup of $BACKUP1 directory...
100 $TAR cf - $BACKUP1 | $GZIP -9c > $WWW_DEST/$NOW.www.tar.gz
101 echo $BACKUP1 backup finished.
102
103 echo Starting backup of $BACKUP2 directory...
104 $TAR cfh - $BACKUP2 | $GZIP -9c > $WWW_DEST/$NOW.etc.tar.gz
105 echo $BACKUP2 backup finished.
106
107 echo ***Backup transfer is starting...***
108 $NCFTPPUT -u $FtpUSER -p $FtpPASS $FtpHOST /db_backups $DB_DEST/$NOW.$DB1.gz $DB_DEST/$NOW.$DB2.gz $DB_DEST/$NOW.$DB3.gz \
109 $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
110
111 $NCFTPPUT -u $FtpUSER -p $FtpPASS $FtpHOST /www_backups $WWW_DEST/$NOW.www.tar.gz $WWW_DEST/$NOW.etc.tar.gz
112 echo ***Backup transfer is finished...***
113
114 echo "Deleting old database backup files..."
115
116 oldbackup=`find $DB_DEST -type f -mtime 30 -name "*.gz"`
117
118 for current_file in `echo $oldbackup`
119
120 do
121
122 rm -f $current_file
123
124 echo $current_file deleted
125
126 done
127
128 echo Old database backup files deletion finished.
129
130 echo "Deleting old backup files..."
131
132 oldbackup=`find $WWW_DEST -type f -mtime 10 -name "*.gz"`
133
134 for current_file in `echo $oldbackup`
135
136 do
137
138 rm -f $current_file
139
140 echo $current_file deleted
141
142 done
143
144 echo Old backup files deletion finished.
145 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.
bayramkaragoz.org