Резервное копирование файлов и баз данных

в 14:33, , рубрики: administration, backup, php, администрирование, Веб-разработка, резервное копирование, метки: , , , ,

Возможности скрипта:
— бэкапить директории и базы данных
— загрузка архивов в локальную папку или на фтп
— информирование по email о удачном/не удачном завершении

Backup директории

Создать бэкап директории просто. Достаточно просто указать пусть (path) к папке, которую хотим заархивировать и дать имя бэкапу (name). Опционально можно указать папки и файлы, которые хотим исключить (exclude).
Количество директорий для которых нужно создать бэкап может быть несколько

Backup БД

Не менее просто создать бэкап базы данных. Для этого достаточно указать имя базы данных (db_name). Опционально можно исключить некоторые таблицы (к примеру тестовые) или импортировать только структуру таблиц (к примеру таблица логов). Также как и для директорий, количество баз данных может быть несколько

Загрузка бэкапа

Созданный быкап можно сохранить либо в локальную папку, либо залить по фтп. Здесь можно также указать количество копий которые вы хотите хранить, то есть после загрузки нового архива старые будут удаляться

Оповещении о завершении бэкапа

После того как бэкап будет создан и сохранен в указанном месте можно настроить email оповещение. При удачном завершении (on_success) будет браться шаблон письма, который вы укажете (template), парсится в него вся статистика и слаться на указанный вами email адрес. Также можно настроить отправку письма при возникновении каких либо ошибок (on_failed)

Использование

Пример конфига:

array(
	// common options
	'common' => array(
		'tar_cmd' => '/bin/tar',
		'gzip_cmd' => '/bin/gzip',

		'backup_filename_prefix' => $prefix, 
		'backup_filename' => 'backupname',
	),

	// backup options
	'backup' => array(
		// directory backup
		'directory' => array(
			'tar_cmd' => '/bin/tar',
			'items' => array(
				array(
					'name' => 'home_user1',
					'path' => '/home/user1',
					'exclude' => 'tmp,logs,cache',
				),
				array(
					'name' => 'home_user2',
					'path' => '/home/user2',
					'exclude' => 'tmp',
				)
			)
		),

		// database backup
		'mysql' => array(
			'mysqldump_cmd' => '/usr/bin/mysqldump',

			'user' => 'root',
			'password' => 'xxx',
			'host' => 'localhost',

			'items' => array(
				array(
					'db_name' => 'xxx',
					'ignore_tables' => 'test',
					'tables_structure' => 'logs,sessions',
				),
				array(
					'db_name' => 'xxx2',
				),
			),
		),
	),

	// upload backup options
	'upload' => array(
		// upload to local directoey
		'directory' => array(
			'max_count' => 3,
			'path' => '/backups',
		),

		// upload to ftp
		'ftp' => array(
			'max_count' => 3,
			'path' => '/backups',
			'host' => 'xxx',
			'user' => 'xxx',
			'password' => 'xxx'
		),
	),

	// notification options
	'nofification' => array(
		// email notification
		'email' => array(
			'on_success' => array(
				'to' => 'xxx@xxx.xxx',
				'subject' => 'Success backup',
				'template' => realpath(__DIR__ . '/../Command/Notification/email_templates/success.php')
			),

			'on_failed' => array(
				'to' => 'xxx@xxx.xxx',
				'subject' => 'Failed backup',
				'template' => realpath(__DIR__ . '/../Command/Notification/email_templates/failed.php')
			),
		),
	),

Пример использования:

$backupTask = new BackupTaskBackupTask($config);
$backupTask->run();

Пример крона:

@daily  /usr/bin/php /path/to/backup.php daily
@weekly /usr/bin/php /path/to/backup.php weekly
@monthly /usr/bin/php /path/to/backup.php monthly

Исходники тут

Автор: TpeHep

Поделиться

* - обязательные к заполнению поля