Резервное копирование сайта на WordPress — одна из важнейших задач для любого разработчика и администратора. Регулярное создание бэкапов позволяет обезопасить данные от потери из-за ошибок, взломов или сбоев хостинга. В этой статье разберём, как автоматизировать процесс создания резервных копий с помощью собственного PHP-кода, а также рассмотрим полезные плагины, которые помогут настроить регулярные бэкапы без лишних усилий.
Почему важно автоматизировать резервное копирование WordPress
Ручное создание бэкапов неудобно и легко забывается, особенно при частых обновлениях контента и плагинов. Автоматизация решает эти проблемы, обеспечивая регулярное сохранение актуальных копий сайта. Это минимизирует риск потери данных и ускоряет восстановление при возникновении проблем.
Кроме того, автоматический бэкап можно настроить так, чтобы копии хранились в удалённых местах — на облачных сервисах или внешних серверах, что повышает безопасность.
Основные компоненты резервной копии WordPress
- Файлы сайта: темы, плагины, медиафайлы, конфигурации.
- База данных: все записи, страницы, настройки, пользователи и метаданные.
Для полноценного восстановления нужно сохранять и то, и другое.
Автоматизация бэкапа с помощью пользовательского кода
Создание резервной копии базы данных
Для экспорта базы данных можно использовать встроенные функции PHP и WP-DB класса. Ниже пример функции wp_puzzle_create_db_backup(), которая создаёт дамп базы и сохраняет его в папку wp-content/backups:
function wp_puzzle_create_db_backup() {
global $wpdb;
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( ! file_exists( $backup_dir ) ) {
wp_mkdir_p( $backup_dir );
}
$filename = $backup_dir . '/db-backup-' . date('Y-m-d-H-i-s') . '.sql';
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
$sql_dump = '';
foreach ( $tables as $table ) {
$table_name = $table[0];
$create_table = $wpdb->get_row("SHOW CREATE TABLE {$table_name}", ARRAY_N);
$sql_dump .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM {$table_name}", ARRAY_A);
foreach ( $rows as $row ) {
$values = array_map( function( $value ) use ( $wpdb ) {
if ( is_null($value) ) return 'NULL';
return "'" . esc_sql( $value ) . "'";
}, array_values($row) );
$sql_dump .= "INSERT INTO {$table_name} VALUES (" . implode( ',', $values ) . ");\n";
}
$sql_dump .= "\n\n";
}
file_put_contents( $filename, $sql_dump );
}
Эта функция экспортирует структуру и данные всех таблиц базы в SQL-файл с меткой времени.
Создание резервной копии файлов сайта
Для копирования файлов можно использовать стандартные PHP-функции, например, архивировать папку wp-content. Ниже пример функции wp_puzzle_backup_wp_content(), создающей ZIP-архив:
function wp_puzzle_backup_wp_content() {
$zip = new ZipArchive();
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( ! file_exists( $backup_dir ) ) {
wp_mkdir_p( $backup_dir );
}
$zip_file = $backup_dir . '/wp-content-backup-' . date('Y-m-d-H-i-s') . '.zip';
if ( $zip->open( $zip_file, ZipArchive::CREATE ) !== TRUE ) {
return false;
}
$source = WP_CONTENT_DIR;
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($source) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
return true;
}
Запуск автоматического бэкапа по расписанию
Чтобы запускать резервное копирование автоматически, используем WP-Cron. Добавим события и привяжем наши функции:
function wp_puzzle_schedule_backup() {
if ( ! wp_next_scheduled( 'wp_puzzle_daily_backup' ) ) {
wp_schedule_event( time(), 'daily', 'wp_puzzle_daily_backup' );
}
}
add_action( 'wp', 'wp_puzzle_schedule_backup' );
add_action( 'wp_puzzle_daily_backup', function() {
wp_puzzle_create_db_backup();
wp_puzzle_backup_wp_content();
});
Таким образом, бэкап будет создаваться ежедневно.
Обзор плагинов для автоматического бэкапа WordPress
Если вы предпочитаете готовые решения, обратите внимание на следующие популярные плагины:
- UpdraftPlus — мощный и удобный плагин, поддерживающий отложенное резервное копирование на облака (Google Drive, Dropbox, Amazon S3 и др.). Позволяет полностью автоматизировать процесс.
- BackWPup — бесплатный и функциональный плагин с возможностью создания бэкапов базы, файлов и отправки их на удалённые хранилища.
- WP-Optimize — кроме оптимизации базы данных, умеет создавать резервные копии и управлять ими.
Для интеграции с WPShop можно рассмотреть WPRemark — плагин с расширенными возможностями управления данными.
Лучшие практики при настройке резервного копирования
Чтобы автоматизация работала эффективно и безопасно, учитывайте следующие рекомендации:
- Хранение копий: размещайте резервные копии не только на сервере сайта, но и на внешних сервисах или локальных устройствах.
- Периодичность: выбирайте частоту бэкапов согласно активности сайта — для активных ресурсов лучше делать их ежедневно, для менее динамичных — раз в неделю.
- Мониторинг: проверяйте работоспособность автоматизации и целостность копий, чтобы избежать сюрпризов при восстановлении.
- Очистка старых бэкапов: чтобы не перегружать хранилище, реализуйте удаление устаревших резервных копий.
Пример удаления устаревших резервных копий
Добавим функцию wp_puzzle_cleanup_old_backups(), которая удаляет файлы старше 30 дней из папки бэкапов:
function wp_puzzle_cleanup_old_backups() {
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( ! file_exists( $backup_dir ) ) {
return;
}
$files = glob($backup_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file) && ($now - filemtime($file)) > 30 * DAY_IN_SECONDS) {
unlink($file);
}
}
}
add_action( 'wp_puzzle_daily_backup', 'wp_puzzle_cleanup_old_backups' );
Это позволит автоматически поддерживать порядок и экономить место.
Итоги
Автоматизация резервного копирования WordPress — задача, которую можно решить как с помощью готовых плагинов, так и собственных скриптов. Использование кода даёт гибкость и контроль, позволяя адаптировать процесс под уникальные требования проекта. В любом случае регулярные бэкапы — залог стабильной работы и безопасности вашего сайта.