Бэкап всех таблиц базы данных MySQL в папку c сохранением каждой таблицы в отдельный файл

Вот PHP скрипт, который создает бэкап всех таблиц базы данных DBNAME, сохраняя каждую таблицу в отдельный файл в папке DUMP. Имена файлов будут содержать текущую дату и время:

<?php
// Параметры подключения к базе данных
$db_host = 'localhost';
$db_name = 'DBNAME';   // Имя БД
$db_user = 'user1'; // Имя пользователя БД
$db_pass = 'pass1'; // Пароль пользователя БД

// Папка для сохранения дампов
$backup_dir = 'DUMP';
if (!file_exists($backup_dir)) {
    mkdir($backup_dir, 0755, true);
}

// Формат даты и времени для имени файла
$date = date('Y-m-d_H-i-s');

try {
    // Подключение к базе данных
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Получаем список всех таблиц в базе данных
    $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);

    if (empty($tables)) {
        die("В базе данных нет таблиц.");
    }

    // Создаем дамп для каждой таблицы
    foreach ($tables as $table) {
        $filename = $backup_dir . '/' . $date . '_' . $table . '.sql';
        
        // Получаем структуру таблицы
        $create_table = $pdo->query("SHOW CREATE TABLE `$table`")->fetch(PDO::FETCH_ASSOC);
        
        // Получаем данные таблицы
        $rows = $pdo->query("SELECT * FROM `$table`")->fetchAll(PDO::FETCH_ASSOC);
        
        // Формируем SQL дамп
        $dump = "-- Dump of table $table\n";
        $dump .= "-- Created: " . date('Y-m-d H:i:s') . "\n\n";
        $dump .= "DROP TABLE IF EXISTS `$table`;\n";
        $dump .= $create_table['Create Table'] . ";\n\n";
        
        if (!empty($rows)) {
            $dump .= "INSERT INTO `$table` VALUES \n";
            $values = array();
            foreach ($rows as $row) {
                $row_values = array();
                foreach ($row as $value) {
                    $row_values[] = is_null($value) ? 'NULL' : $pdo->quote($value);
                }
                $values[] = "(" . implode(', ', $row_values) . ")";
            }
            $dump .= implode(",\n", $values) . ";\n";
        }
        
        // Сохраняем дамп в файл
        file_put_contents($filename, $dump);
        echo "Таблица $table сохранена в файл: $filename\n";
    }

    echo "Бэкап успешно создан.\n";

} catch (PDOException $e) {
    die("Ошибка подключения к базе данных: " . $e->getMessage());
}
?>

Инструкция по использованию:

  1. Сохраните этот код в файл с расширением .php (например,backup.php)
  2. Убедитесь, что на сервере существует папка DUMP или скрипт сможет ее создать
  3. Запустите скрипт через браузер или командную строку (php backup.php)

Особенности скрипта:

  • Создает отдельный файл для каждой таблицы
  • Имя файла содержит дату/время и имя таблицы (например:2023-11-15_14-30-00_users.sql)
  • В каждый файл записывается:
    • SQL для удаления таблицы (если существует)
    • SQL для создания таблицы
    • Все данные в виде INSERT запросов
  • Поддерживает NULL значения