Резервное копирование базы данных — одна из важнейших задач для любого сайта на WordPress. Даже при использовании надежного хостинга, регулярные бэкапы помогают избежать потери данных из-за ошибок, взломов или сбоев. В этой статье разберём, как сделать автоматический бэкап базы данных WordPress с помощью встроенного планировщика задач WP-Cron и рассмотрим популярные плагины, которые облегчают этот процесс.
Почему важен автоматический бэкап базы данных WordPress
База данных WordPress содержит все записи, страницы, настройки и пользовательские данные. Потеря этого может привести к длительному восстановлению сайта и потере клиентов. Автоматизация процесса бэкапа позволяет не забывать делать копии и минимизирует риски.
Ручное резервное копирование не всегда удобно и требует времени, особенно если у вас несколько сайтов. Автоматизация же решает эти задачи и может быть настроена под нужный вам график.
Использование WP-Cron для автоматического бэкапа базы данных
WP-Cron — внутренняя система планирования задач в WordPress. Она запускается при посещении сайта и позволяет выполнять задачи по расписанию. Мы можем использовать WP-Cron для регулярного создания дампов базы данных.
Создание функции бэкапа базы данных
Ниже пример функции, которая создает дамп базы данных и сохраняет его в папку wp-content/backups. Для работы требуется доступ к файловой системе и базовым функциям WordPress.
function wpmentor_create_db_backup() {
global $wpdb;
$upload_dir = wp_upload_dir();
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( ! file_exists( $backup_dir ) ) {
wp_mkdir_p( $backup_dir );
}
$filename = 'db-backup-' . date('Y-m-d-H-i-s') . '.sql';
$filepath = $backup_dir . '/' . $filename;
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
$sql = '';
foreach ( $tables as $table ) {
$table_name = $table[0];
$create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
$sql .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
foreach ( $rows as $row ) {
$values = array_map( array( $wpdb, 'escape' ), array_values( $row ) );
$values = array_map( function($value) { return "'" . addslashes($value) . "'"; }, $values );
$sql .= "INSERT INTO $table_name VALUES (" . implode(",", $values) . ");\n";
}
$sql .= "\n";
}
file_put_contents( $filepath, $sql );
}
Эта функция перебирает все таблицы, получает их структуру и данные, затем сохраняет в файл SQL. Обратите внимание, что для больших баз данных такой метод может быть ресурсоёмким.
Добавление задачи в WP-Cron
Чтобы запускать бэкап автоматически, нужно добавить событие в WP-Cron:
function wpmentor_schedule_db_backup() {
if ( ! wp_next_scheduled( 'wpmentor_daily_db_backup' ) ) {
wp_schedule_event( time(), 'daily', 'wpmentor_daily_db_backup' );
}
}
add_action( 'wp', 'wpmentor_schedule_db_backup' );
add_action( 'wpmentor_daily_db_backup', 'wpmentor_create_db_backup' );
Этот код запускает функцию wpmentor_create_db_backup один раз в день. Вы можете изменить периодичность, добавив свои интервалы в WP-Cron.
Использование популярных плагинов для автоматического бэкапа
Если вы не хотите писать код, есть несколько проверенных плагинов для автоматического бэкапа базы данных WordPress:
- UpdraftPlus — позволяет создавать бэкапы базы и файлов, автоматически загружать их на облачные сервисы, настраивать расписание.
- BackWPup — мощный инструмент для автоматизации резервного копирования с возможностью экспорта на Dropbox, S3 и другие.
- WP Database Backup — простой плагин для бэкапа базы данных с возможностью отправки копий на email.
Для примера, настроим UpdraftPlus с UTM метками для сайта https://wpshop.ru/plugins/updraftplus/. После установки плагина перейдите в настройки, выберите расписание бэкапа, подключите облачное хранилище и включите автоматическое резервное копирование.
Как управлять и хранить бэкапы
Важный момент — где хранить бэкапы. Хранение на том же сервере не гарантирует защиту от полного сбоя. Рекомендуется выгружать копии на внешние сервисы: Google Drive, Dropbox, Amazon S3, FTP серверы.
Также полезно настроить автоматическое удаление старых бэкапов, чтобы не переполнять диск. Например, в UpdraftPlus можно задать количество копий для хранения.
Пример удаления старых бэкапов вручную
Если вы пишете кастомное решение, можно добавить функцию удаления файлов старше определённого времени:
function wpmentor_cleanup_old_backups() {
$backup_dir = WP_CONTENT_DIR . '/backups';
$files = glob( $backup_dir . '/*.sql' );
$now = time();
foreach ( $files as $file ) {
if ( is_file( $file ) && ( $now - filemtime( $file ) ) > 30 * DAY_IN_SECONDS ) {
unlink( $file );
}
}
}
add_action( 'wpmentor_daily_db_backup', 'wpmentor_cleanup_old_backups' );
Этот код удалит файлы бэкапа старше 30 дней после создания новой копии.
Проверка работоспособности автоматического бэкапа
После настройки важно проверить, что бэкапы создаются корректно. Можно добавить логирование или уведомления на email при успешном создании.
Пример добавления email уведомления после бэкапа:
function wpmentor_notify_backup() {
$admin_email = get_option( 'admin_email' );
wp_mail( $admin_email, 'Резервная копия базы WordPress создана', 'Новая резервная копия базы данных была успешно создана на сайте.' );
}
add_action( 'wpmentor_daily_db_backup', 'wpmentor_notify_backup' );
Это позволит быть увереным, что процесс работает и вы оперативно узнаете о результатах.
Заключение
Автоматический бэкап базы данных — обязательная часть поддержки сайта на WordPress. Используя WP-Cron и собственный код, вы получите гибкий инструмент, а плагины помогут быстро настроить без программирования. Поддерживайте регулярные копии и храните их в безопасном месте, чтобы избежать потерь данных и простоять сайт без простоев.