├── .gitignore ├── LICENSE.txt ├── README.md └── backup.sh /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | Simple Linux Backup Script.komodoproject 3 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Licensed under the Apache License, Version 2.0 (the "License"); 2 | you may not use this file except in compliance with the License. 3 | You may obtain a copy of the License at 4 | 5 | http://www.apache.org/licenses/LICENSE-2.0 6 | 7 | Unless required by applicable law or agreed to in writing, software 8 | distributed under the License is distributed on an "AS IS" BASIS, 9 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | See the License for the specific language governing permissions and 11 | limitations under the License. 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Simple Linux Bash Rotating Backup Script 2 | ======================================== 3 | 4 | This is a simple Linux bash rotating backup script that also backs up MySQL! 5 | 6 | It will make Weekly backups, Bi-monthly backups, and Bi-yearly backups and compress it. 7 | 8 | Simply run a daily CRON; it can easily be made to work with a remote backup location. 9 | 10 | Requirements: 11 | 12 | **MySQL** (You could change it to a *different database* if you wanted to)
13 | **Tar** 14 | -------------------------------------------------------------------------------- /backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # https://github.com/dlabey/Simple-Linux-Bash-Rotating-Backup-Script 3 | # Local Source 4 | SOURCE=/full/path 5 | 6 | # Local Destination 7 | DESTINATION=/full/path 8 | 9 | # Database Backup User 10 | DATABASE='' 11 | DATABASE_USER='' 12 | DATABASE_PASSWORD='' 13 | DATABASE_HOST='' 14 | 15 | # DO NOT EDIT ANYTHING BELOW THIS 16 | 17 | # Date Variables 18 | DAY_OF_YEAR=$(date '+%j') 19 | DAY_OF_MONTH=$(date '+%d') 20 | DAY_OF_WEEK_RAW=$(date '+%w') 21 | DAY_OF_WEEK=$((DAY_OF_WEEK_RAW + 1)) 22 | MONTH=$(date '+%m') 23 | YEAR=$(date '+%Y') 24 | 25 | # Make Temporary Folder 26 | mkdir `dirname $0`/tmp 27 | echo 'Made temporary folder...' 28 | 29 | # Make Weekly Folder 30 | mkdir `dirname $0`/tmp/weekly 31 | echo 'Made weekly folder...' 32 | 33 | # Make Folder For Current Year 34 | mkdir `dirname $0`/tmp/${YEAR} 35 | echo 'Made folder for current year...' 36 | 37 | # Make Folder For Current Month 38 | mkdir `dirname $0`/tmp/${YEAR}/$MONTH 39 | echo 'Made folder for current month...' 40 | 41 | # Make Biannual Folder For Current Year 42 | mkdir `dirname $0`/tmp/${YEAR}/biannual 43 | echo 'Made biannual folder for current year...' 44 | 45 | # Make The Weekly Backup 46 | tar -zcvf `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_files.tar.gz $SOURCE 47 | mysqldump -h $DATABASE_HOST -u $DATABASE_USER -p$DATABASE_PASSWORD $DATABASE > `dirname $0`/${DAY_OF_WEEK}.sql 48 | tar -zcvf `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_database.tar.gz `dirname $0`/${DAY_OF_WEEK}.sql 49 | rm -rf `dirname $0`/${DAY_OF_WEEK}.sql 50 | echo 'Made weekly backup...' 51 | 52 | # Check If It Is The 1st or 182nd Day Of The Year Then Make A Biannual Backup 53 | # If It Is By Copying The Weekly Backup To The Biannual Folder For The Current 54 | # Year 55 | if [ $DAY_OF_YEAR -eq 1 -o $DAY_OF_YEAR -eq 182 ] ; then 56 | if [ $DAY_OF_YEAR -eq 1 ] ; then 57 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_files.tar.gz `dirname $0`/tmp/${YEAR}/biannual/01_files.tar.gz 58 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_database.tar.gz `dirname $0`/tmp/${YEAR}/biannual/01_database.tar.gz 59 | fi 60 | if [ $DAY_OF_YEAR -eq 182 ] ; then 61 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_files.tar.gz `dirname $0`/tmp/${YEAR}/biannual/02_files.tar.gz 62 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_database.tar.gz `dirname $0`/tmp/${YEAR}/biannual/02_database.tar.gz 63 | fi 64 | echo 'Made biannual backup...' 65 | fi 66 | 67 | # Check If It Is The 1st Or 14th Day Of The Month Then Make A Bimonthly Backup 68 | # If It Is By Copying The Weekly Backup To The Folder For The Current Month 69 | if [ $DAY_OF_MONTH -eq 1 -o $DAY_OF_MONTH -eq 14 ] ; then 70 | if [ $DAY_OF_MONTH -eq 1 ] ; then 71 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_files.tar.gz `dirname $0`/tmp/${YEAR}/${MONTH}/01_files.tar.gz 72 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_database.tar.gz `dirname $0`/tmp/${YEAR}/${MONTH}/01_database.tar.gz 73 | fi 74 | if [ $DAY_OF_MONTH -eq 14 ] ; then 75 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_files.tar.gz `dirname $0`/tmp/${YEAR}/${MONTH}/02_files.tar.gz 76 | cp `dirname $0`/tmp/weekly/${DAY_OF_WEEK}_database.tar.gz `dirname $0`/tmp/${YEAR}/${MONTH}/02_database.tar.gz 77 | fi 78 | echo 'Made monthly backup...' 79 | fi 80 | 81 | # Merge The Backup To The Local Destination's Backup Folder 82 | cp -rf `dirname $0`/tmp/* $DESTINATION 83 | 84 | # Delete The Temporary Folder 85 | rm -rf `dirname $0`/tmp 86 | echo 'Made backup.' --------------------------------------------------------------------------------