Автор Тема: Бекъп на директории и MySQL БД и FTP Upload  (Прочетена 1591 пъти)

dlozev

  • Напреднали
  • *****
  • Публикации: 23
    • Профил
Здравейте, трябва ми скрипт, който да архивира няколко зададени директории, както и всички MySQL БД. След което архивите да ги качва на отдалечен FTP сървър. Благодаря ви предварително!
Активен

k0tka

  • Напреднали
  • *****
  • Публикации: 130
  • Distribution: Fedora 23, CentOS, Debian, OS X El Capitan
  • Window Manager: i3wm
    • Профил
Re: Бекъп на директории и MySQL БД и FTP Upload
« Отговор #1 -: May 26, 2015, 13:23 »
Отдалечено ли ще го изпълняваш или директно от сървъра на който работи MySQL-а и се намират директориите които искаш да архивираш? Ако bash ще ти свърши работа, трябва да имам някъде нещо работещо, което прави същото без FTP-то но ще го добавим лесно... Мисля че довечера ще имам време да го изнамеря...
Активен

"If you need an instructional video telling your users how to turn a machine off (http://windows.microsoft.com/en-gb/windows-8/how-shut-down-turn-off-pc), there’s something seriously wrong with your design." --  Andrew Gregory @ linuxvoice

Naka

  • Напреднали
  • *****
  • Публикации: 3415
    • Профил
Re: Бекъп на директории и MySQL БД и FTP Upload
« Отговор #2 -: May 26, 2015, 13:32 »
независимо как ще ги архивираш трябва да изпълниш предварително
FLUSH TABLES WITH READ LOCK;
за да не се променят mysql таблиците през време на архивирането
а след това
UNLOCK TABLES;
Активен

Perl - the only language that looks the same before and after encryption.

dlozev

  • Напреднали
  • *****
  • Публикации: 23
    • Профил
Re: Бекъп на директории и MySQL БД и FTP Upload
« Отговор #3 -: May 26, 2015, 18:00 »
Здравейте, базите данни са на същия сървър.
Активен

nslave

  • Напреднали
  • *****
  • Публикации: 159
  • Distribution: Fedora / Debian
  • Window Manager: Xfce
    • Профил
Re: Бекъп на директории и MySQL БД и FTP Upload
« Отговор #4 -: May 28, 2015, 00:00 »
Здравей, това са едни скриптове, които преди доста време бях намерил някъде, но за съжаление не се сещам източника. Мисля, че нещо бях правил по тях.. но вече не си спомням. За моите нужди вършеха работа, но ще трябва да си организираш качването на ftp (което не препоръчвам). Все пак си тествай дали всичко работи както трябва, тъй като не мога да дам гаранция, че е перфектно :) Можеш да си настроиш за колко дни назад да ти пази архивите, но при всички положения препоръчвам да разгледаш опцията да си свършиш работата с rsnapshot :)

За архивиране на директории

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. # Target directory which we will backup
  4. TARGET="/var/www"
  5.  
  6. # How long will backup files will be kept
  7. KEEPBKP=5
  8.  
  9. TAR="$(which tar)"
  10. CHOWN="$(which chown)"
  11. CHMOD="$(which chmod)"
  12.  
  13. # Gets time
  14. NOW="$(date +"%Y%m%d")"
  15.  
  16. # Destination folder
  17. DEST="/backup/www"
  18.  
  19. # Main directory for backup
  20. MBD="$DEST/$NOW"
  21.  
  22. [ ! -d $MBD ] && mkdir -p $MBD || :
  23.  
  24. # Only root can access it!
  25. $CHOWN 1000.1000 -R $DEST
  26. $CHMOD 0600 $DEST
  27.  
  28. # Gets a list of all subdirectories of DESTINATION dir
  29. DIR="$(ls $DEST)"
  30.  
  31. for subdir in $DIR
  32. do
  33.        SUBDIRDATE="$(date --date=$subdir +"%Y%m%d")"
  34.        let "DATEDIFF=$NOW-$SUBDIRDATE"
  35.        if [ $DATEDIFF -gt $KEEPBKP ]
  36.        then
  37.                echo $subdir " is going to be deleted!"
  38.                rm -rf $DEST/$subdir
  39.        fi
  40. done
  41.  
  42. # Gets a list of all subdirectories of TARGET dir
  43. DIR="$(ls $TARGET)"
  44.  
  45. for subdir in $DIR
  46. do
  47. tar -zcvf $MBD/$subdir.$NOW.tar.gz $TARGET/$subdir
  48. done

За архивиране на MySQL бази данни
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. MyUSER="root" # MySQL admin
  4. MyPASS="PASSWORD" # MySQL admin pass
  5. MyHOST="localhost" # MySQL hostname
  6.  
  7. # Linux bin paths, change this if it can not be autodetected via which command
  8. MYSQL="$(which mysql)"
  9. MYSQLDUMP="$(which mysqldump)"
  10. CHOWN="$(which chown)"
  11. CHMOD="$(which chmod)"
  12. GZIP="$(which gzip)"
  13.  
  14. # How long a backup file will be kept
  15. KEEPBKP=5
  16.  
  17. # Get date
  18. NOW="$(date +"%Y%m%d")"
  19.  
  20. # Backup Destination directory, change this to suit your preferred location
  21. DEST="/backup/mysql"
  22.  
  23. # Main directory where backup will be stored
  24. MBD="$DEST/$NOW"
  25.  
  26. # Get hostname
  27. HOST="$(hostname)"
  28.  
  29. # File to store current backup file
  30. FILE=""
  31. # Store list of databases
  32. DBS=""
  33.  
  34. # DO NOT BACKUP these databases
  35. IGGY="information_schema"
  36.  
  37. [ ! -d $MBD ] && mkdir -p $MBD || :
  38.  
  39. # Only root can access it!
  40. $CHOWN 1000.1000 -R $DEST
  41. $CHMOD 0600 $DEST
  42.  
  43. # Gets a list of all subdirectories of DESTINATION dir
  44. DIR="$(ls $DEST)"
  45.  
  46. for subdir in $DIR
  47. do
  48.        SUBDIRDATE="$(date --date=$subdir +"%Y%m%d")"
  49.        let "DATEDIFF=$NOW-$SUBDIRDATE"
  50.        if [ $DATEDIFF -gt $KEEPBKP ]
  51.        then
  52.                echo $subdir " is going to be deleted!"
  53.                rm -rf $DEST/$subdir
  54.        fi
  55. done
  56.  
  57. # Get all databases list first
  58. DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
  59.  
  60. for db in $DBS
  61. do
  62.    skipdb=-1
  63.    if [ "$IGGY" != "" ];
  64.    then
  65. for i in $IGGY
  66. do
  67.    [ "$db" == "$i" ] && skipdb=1 || :
  68. done
  69.    fi
  70.  
  71.    if [ "$skipdb" == "-1" ];
  72. then
  73. FILE="$MBD/$db.$HOST.$NOW.sql.gz"
  74. # do all in one job in pipe,
  75. # connect to mysql using mysqldump for select mysql database
  76. # and pipe it out to gz file in backup dir :)
  77.        $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
  78.    fi
  79. done
Активен

dlozev

  • Напреднали
  • *****
  • Публикации: 23
    • Профил
Re: Бекъп на директории и MySQL БД и FTP Upload
« Отговор #5 -: Jun 04, 2015, 14:05 »
Благодаря, ще го тествам малко по-късно.
Активен