Напишу ниже простой пример резервного копирования mysql баз данных с помощью mysqldump.
Создаем исполняемый файл и пишем в него строку:
mysqldump -u USER -h localhost -pPASSWORD DATABASE | gzip -c > /home/backups/mysqldump/databasename_`date +%Y-%m-%d`.sql.gz
Чтобы при дампе базы исключить некоторые таблицы необходимо дописать:
--ignore-table=database.table --ignore-table=database.table
Чтобы сделать дамп самой структуры без данных:
--no-data
В случае ошибки «Mysqldump error 1044: Access denied for user to database when using LOCK TABLES» после mysqldump добавить:
--skip-opt
Mysql пользователю назначим права:
GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Добавляем ссылку на новый файл в /etc/crontab (планировщик будет выполнять его каждый день в 4 утра):
0 4 * * * user /home/backups/backups.sh > /dev/null 2>&1
Также в скрипт можно добавить резервное копиирование директорий, например:
tar -cvjf /home/backups/etc/`date +%Y-%m-%d`_etc.tar.bz2 /etc/
tar -cvjf /home/backups/www/`date +%Y-%m-%d`_www.tar.bz2 /var/www/
Также можно регулярно клонировать github репозиторий, например репозиторий Trinity Core:
mkdir /home/backups/trinitycore/`date +%Y-%m-%d`
cd /home/backups/trinitycore/`date +%Y-%m-%d`
wget https://github.com/TrinityCore/TrinityCore/archive/4.3.4.zip
wget https://github.com/TrinityCore/TrinityCore/archive/master.zip
Как удалять старые резервные копии автоматически, чтоб не забивался диск я писал в этой статье — Скрипт удаления старых файлов
Смотрите также мои статьи:
Импорт и экспорт MySQL баз данных
Подключение к MySQL без ввода пароля