RealAdmin.ru

Резервное копирование базы данных MySQL и каталогов в Ubuntu

Ubuntu,Безопасность,Сервер
Категория: Админинг
21 Июн 2013 г. в 11:29

Представим что есть хостинг под управлением Ubuntu и требуется в автоматическом режиме периодически создавать полную резервную копию всех файлов сайта и mysql базы данных. Рассмотрим как это реализовать на практике.

  1. Создаем в домашнем каталоге подкаталог в который будем осуществлять резервное копирование:
    sudo mkdir backup
    
  2. Создаем и открываем на редактирование текстовый документ, в который будем записывать команды для резервного копирования:
    sudo nano backup-script.sh
    
  3. Пишем в него команды.
    DIR=`date +%F_%H-%M`;
    mkdir /home/backup/$DIR;
    mysqldump -uroot -p12345 my_girl_db > /home/admin/backup/my_girl_db.sql
    zip -r -0 /home/www/you_site.ru/ /home/admin/backup/$DIR/
    
    • в переменную «DIR» записываем текущую дату, час и минуту;
    • создаем в каталоге «backup» подкаталог с именем «DIR»;
    • создаем дамп базы данных с именем «my_gyrl_db», предварительно указав имя администратора базы и его пароль. (директивы -u и -p пишутся слитно с параметрами);
    • архивируем каталог с сайтом, указав степень сжатия от 0 до 9 (0 - без сжатия).

    Если требуется исключить какие-то подкаталоги или файлы, то в конце добавим:

    -x "/home/www/you_site.ru/private/*" 
    

    Не забудьте, в Ubuntu должен быть установлен zip архиватор: sudo apt-get install zip.

    сервера

  4. Cохраняем созданный файл («Ctrl+O») и выходим из него («Ctrl+X»).
  5. Теперь редактируем конфигурационный файл планировщика заданий (admin меняете на свой логин):
    sudo crontab -u admin -e
    

    Либо так (admin меняете на свой логин):

    sudo nano /var/spool/cron/crontabs/admin
    
  6. В конец конфигурационного файла прописываем правило:
    00 18 * * * /home/admin/backup-script.sh
    

    В нём указано что скрипт «backup-script.sh» будет запускаться каждый день в 18:00. Вместо звездочек могут стоять следующие значения:

    • день месяца (1..31)
    • месяц (1..12)
    • день недели (1..7)

    Примечание: текущее время в терминале Ubuntu можно посмотреть командой «date».

  7. Теперь в указанное время «cron» должен выполнить команды из файла «backup-script.sh».

    Примечание: если «cron» не выполнил скрипт, то попробуйте выставить права 777 скрипту и каталогу «backup». Права каталогу выставляются командой sudo chmod -R /home/admin/backup 777.

копирование

Оставлять резервную копию на той же машине где находится источник — не безопасно. Лучше хранить её на удаленной машине. Сделать это можно разными способами:

  • Автоматически отправлять файлы по почте (если они небольшого размера);
  • Установить на удаленной машине FTP сервер и передавать их по FTP;
  • Расшарить на удаленной машине директорию, смонтировать её на компьютере источнике;
  • Установить на исходной машине FTP сервер, а на удаленной машине установить программу для резервного копирования, например Cobian Backup (под Windows). Программа будет по протоколу FTP забирать созданные резервные копии к себе на машину.
Посмотрите похожее — 6
Комментарии — 3
  1. avatar Grandhustla 09 декабря 2015, 12:30(был изменён) #
    zip -r 0 /home/www/you_site.ru/ /home/admin/backup/$DIR/
    0 — это не сжатие, это по сути имя файла в вашем коде. Читая ваш гайд напоролся на проблемы с архивацией. Мы архивируем и наш сайт и директорию в который кладется ourfile.zip.

    Даже разграничив права доступа и став владельцем папки корневой зипованный файл создается криво. не в той папке, куда указываешь.

    в общем вот правильный код:

    zip -r -0 ourfile.zip /home/www/you_site.ru/
    sh скрипт вообще не работает толком. базу он мне не создал.
    1. avatar Simkin Andrew 09 декабря 2015, 12:45 #
      Да, точно, должно быть тире, исправлю.
      sh скрипт работал, но базу он и не создаёт, он делает её дамп в sql файл.
      1. avatar Grandhustla 09 декабря 2015, 13:11(был изменён) #
        Тоже неправильно написал. Дамп базы он делает. Я по привычке в sh файл написал — sudo и т.д. Не знаю, я вроде скрипт поправил, конечно, но файл и директорию он не создал. Он создал архив с именем date.zip и сразу папку date в той же директории. Т.е. в общем он создал конечно файлы указанные в коде, но создал их криво:)
    © REALADMIN.RU   2016 г.
    Страница сгенерирована: 0,0968 s | 10 mb.
    На каком уровне Вы играете в шахматы?
    О П Р О С
    Home Question Top