Резервное копирование базы данных — одна из ключевых задач для любого сайта на WordPress. Если вы хотите обезопасить свои данные, но при этом не хотите использовать тяжелые плагины, то этот материал для вас. Здесь мы подробно разберём, как создать автоматическое резервное копирование базы данных WordPress с помощью собственных функций и WP-Cron, без сторонних расширений.
Почему важно автоматизировать резервное копирование базы данных WordPress
База данных содержит все ваши записи, настройки, комментарии и другую важную информацию. В случае взлома, ошибки на сервере или человеческого фактора потеря данных может привести к серьёзным проблемам.
Ручное создание копий — неудобный и ненадёжный процесс. Автоматизация позволяет настроить регулярное сохранение данных, что значительно снижает риски.
Кроме того, создание собственного решения избавляет от необходимости устанавливать дополнительные плагины, которые могут замедлять сайт или конфликтовать с другими расширениями.
Основные компоненты решения: WP-Cron и функция экспорта базы данных
WP-Cron — встроенный в WordPress механизм для планирования задач. Мы создадим кастомное событие, которое будет запускать функцию резервного копирования по расписанию.
Для экспорта базы данных мы воспользуемся стандартными возможностями PHP и MySQL, выполняя экспорт таблиц в SQL-файл.
Создание функции экспорта базы данных
Для начала напишем функцию wproot_backup_database, которая подключается к базе, экспортирует все таблицы и сохраняет файл на сервере.
function wproot_backup_database() {
global $wpdb;
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
if (empty($tables)) return;
$sql = '';
foreach ($tables as $table) {
$tableName = $table[0];
// Получаем структуру таблицы
$createTable = $wpdb->get_row("SHOW CREATE TABLE {$tableName}", ARRAY_N);
$sql .= "\nDROP TABLE IF EXISTS `{$tableName}`;\n";
$sql .= $createTable[1] . ";\n\n";
// Получаем данные таблицы
$rows = $wpdb->get_results("SELECT * FROM {$tableName}", ARRAY_A);
foreach ($rows as $row) {
$vals = array_map(function($val) use ($wpdb) {
if (is_null($val)) return 'NULL';
return "'" . esc_sql($val) . "'";
}, array_values($row));
$sql .= "INSERT INTO `{$tableName}` VALUES(" . implode(',', $vals) . ");\n";
}
$sql .= "\n";
}
$upload_dir = wp_upload_dir();
$backup_dir = $upload_dir['basedir'] . '/db-backups';
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
$filename = 'backup-' . date('Y-m-d-H-i-s') . '.sql';
$filepath = $backup_dir . '/' . $filename;
file_put_contents($filepath, $sql);
// Можно добавить очистку старых резервных копий здесь
}
Эта функция создаст SQL-файл с полным дампом базы данных и сохранит его в папке uploads/db-backups.
Настройка WP-Cron для регулярного запуска резервного копирования
Теперь добавим в functions.php или в свой плагин регистрацию нового Cron-события и обработчика.
function wproot_schedule_backup() {
if (!wp_next_scheduled('wproot_daily_backup')) {
wp_schedule_event(time(), 'daily', 'wproot_daily_backup');
}
}
add_action('wp', 'wproot_schedule_backup');
add_action('wproot_daily_backup', 'wproot_backup_database');
Этот код запускает функцию резервного копирования ежедневно. При необходимости можно поменять интервал на 'twicedaily' или создать собственный.
Уведомления и безопасность резервных копий
Полезно получать уведомление по email после успешного создания резервной копии. Добавим отправку письма после выполнения функции.
function wproot_backup_database() {
// ... код создания резервной копии как выше ...
// Отправляем уведомление
wp_mail(
get_option('admin_email'),
'Резервная копия базы WordPress создана',
'Файл резервной копии базы данных: ' . $filename
);
}
Для улучшения безопасности:
- Не храните резервные копии в публично доступных папках без защиты.
- Настройте .htaccess или web.config для ограничения доступа к папке с бэкапами.
- Регулярно удаляйте устаревшие копии, чтобы не занимать много места.
Дополнительные советы и альтернативы
Если хотите упростить процесс и получить расширенный функционал, рассмотрите плагины, например Clearfy Pro — он умеет управлять задачами Cron и включает удобные настройки бэкапов.
Также рекомендуем интегрировать резервное копирование с внешними хранилищами, например Dropbox или Google Drive, с помощью плагинов, если нужно хранить копии вне сервера.
Заключая, собственное решение резервного копирования на базе WP-Cron — отличный вариант для опытных разработчиков, позволяющий контролировать процесс без лишних зависимостей. Главное — тщательно тестировать и обеспечивать безопасность файлов с дампами.