Управление бэкапами MySQL прямо из админ-панели
Pro Website Management
04.04.2025 14:34
Создание бэкапа
Нажмите "Сохранить базу целиком" для полного бэкапа или выберите таблицы и нажмите "Создать бэкап". Файлы сохраняются в /backups/.
Восстановление бэкапа
Выберите файл из списка и нажмите "Восстановить". Текущая база будет заменена.
Автосохранение
Включите автосохранение, выберите частоту и укажите максимальное количество бэкапов. Для работы автосохранения добавьте в cron:
# Каждый час
0 * * * * php /home/u762384583/domains/masterok.lt/public_html/cron/backup.php hourly
# Каждые 2 часа
0 */2 * * * php /home/u762384583/domains/masterok.lt/public_html/cron/backup.php 2hours
# Каждые 3 часа
0 */3 * * * php /home/u762384583/domains/masterok.lt/public_html/cron/backup.php 3hours
# Ежедневно
0 0 * * * php /home/u762384583/domains/masterok.lt/public_html/cron/backup.php daily
# Еженедельно
0 0 * * 0 php /home/u762384583/domains/masterok.lt/public_html/cron/backup.php weekly
Создайте файл /home/u762384583/domains/masterok.lt/public_html/cron/backup.php со следующим содержимым:
<?php
require_once '/home/u762384583/domains/masterok.lt/public_html/includes/db.php';
$settings = include '/home/u762384583/domains/masterok.lt/public_html/uploads/site_settings.php';
if ($settings['backup']['auto_backup'] && $settings['backup']['frequency'] === $argv[1]) {
$backup_dir = '/home/u762384583/domains/masterok.lt/public_html/backups/';
$filename = create_backup($conn, $backup_dir); // Полный бэкап
$backups = glob($backup_dir . '*.sql');
if (count($backups) > $settings['backup']['max_backups']) {
array_map('unlink', array_slice($backups, 0, count($backups) - $settings['backup']['max_backups']));
}
}
function create_backup($conn, $backup_dir, $tables = []) {
$filename = $backup_dir . 'backup_' . date('Ymd_His') . '.sql';
$sql = "-- Бэкап базы данных u762384583_tender " . date('Y-m-d H:i:s') . "\n\n";
$result = $conn->query("SHOW TABLES");
$all_tables = [];
while ($row = $result->fetch_array(MYSQLI_NUM)) {
$all_tables[] = $row[0];
}
$tables_to_backup = empty($tables) ? $all_tables : array_intersect($tables, $all_tables);
foreach ($tables_to_backup as $table) {
$sql .= "-- Таблица: $table\n";
$sql .= "DROP TABLE IF EXISTS `$table`;\n";
$create_table = $conn->query("SHOW CREATE TABLE `$table`");
$row = $create_table->fetch_assoc();
$sql .= $row['Create Table'] . ";\n\n";
$rows = $conn->query("SELECT * FROM `$table`");
while ($row = $rows->fetch_assoc()) {
$values = array_map(fn($v) => $conn->real_escape_string($v === null ? 'NULL' : $v), $row);
$sql .= "INSERT INTO `$table` VALUES ('" . implode("','", $values) . "');\n";
}
$sql .= "\n";
}
file_put_contents($filename, $sql);
return $filename;
}
?>