🢂Kopia (zrzut) bazy mysql do pliku ‑ PHP

Metody na robienie zrzutu bazy danych przez php

  • Jak używać?

Kod do pliku i odpalać z crona albo przez wywołanie URLa.

Nazwa pliku z bazą w zmiennej $backup_file

Kod funkcji 1

<?php
// Import danych konfiguracyjnych z pliku wp-config.php (opcjonalnie, jeśli jest to potrzebne), zakomentuj stałe poniżej
// require_once __DIR__ . '/wp-config.php';

// Definicje stałych zawierających dane do połączenia z bazą danych
define('DB_NAME', 'bazadanych'); // Nazwa bazy danych
define('DB_USER', 'admin'); // Nazwa użytkownika bazy danych
define('DB_PASSWORD', 'admin00'); // Hasło do bazy danych
define('DB_HOST', 'localhost'); // Host bazy danych, tutaj lokalny serwer
define('DB_CHARSET', 'utf8mb4'); // Zestaw znaków używany w tabelach bazy danych
define('DB_COLLATE', ''); // Typ porównywania w bazie danych (domyślnie pusty)

// Pobieranie aktualnego dnia tygodnia
$day_of_week = date('w');

// Jeśli chcesz robić kopie w określony dzień tygodnia
// if ($day_of_week == 0) { // 0 oznacza niedzielę 

    // Tworzenie nazwy pliku kopii zapasowej, zawierającej nazwę bazy danych i aktualną datę oraz godzinę
    $backup_file = '_baza_' . DB_NAME . '_' . date("Y-m-d_h:i:s") . '.sql';

    // Konstrukcja polecenia mysqldump do wykonania kopii zapasowej
    $command = "mysqldump --opt -h " . DB_HOST . " -u " . DB_USER . " -p" . DB_PASSWORD . " " . DB_NAME . " > $backup_file";

    // Wykonanie polecenia w systemie
    system($command);
// }
?>

Kod funkcji 2

Poprzednia funkcja na niektórych hostingach nie działa ze względów bezpieczeństwa.

Można zrobić to samo za pomocą mysqli, a to już działa wszędzie.

<?php
//Można pobrać dane z configa WP, zakomentuj stałe poniżej
//require_once __DIR__ . '/wp-config.php';

// Definicje stałych zawierających dane do połączenia z bazą danych
define('DB_NAME', 'bazadanych'); // Nazwa bazy danych
define('DB_USER', 'admin'); // Nazwa użytkownika bazy danych
define('DB_PASSWORD', 'admin00'); // Hasło do bazy danych
define('DB_HOST', 'localhost'); // Host bazy danych, tutaj lokalny serwer
define('DB_CHARSET', 'utf8mb4'); // Zestaw znaków używany w tabelach bazy danych
define('DB_COLLATE', ''); // Typ porównywania w bazie danych (domyślnie pusty)

// Nawiąż połączenie
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

$backup_file = '_baza_' . DB_NAME . '_' . date("Y-m-d_h:i:s") . '.sql';

// Sprawdź połączenie
if ($conn->connect_error) {
    die("Połączenie nieudane: " . $conn->connect_error);
}

// Wyeksportuj tabelę
$tables = array();
$result = $conn->query("SHOW TABLES");
while ($row = $result->fetch_row()) {
    $tables[] = $row[0];
}

foreach ($tables as $table) {
    $result = $conn->query("SELECT * FROM $table");
    $num_fields = $result->field_count;
    $return = "";

    // $return = "DROP TABLE IF EXISTS $table;";
    $row2 = $conn->query("SHOW CREATE TABLE $table")->fetch_row();
    $return .= "\n\n" . $row2[1] . ";\n\n";

    for ($i = 0; $i < $num_fields; $i++) {
        while ($row = $result->fetch_row()) {
            $return .= "INSERT INTO $table VALUES(";
            for ($j = 0; $j < $num_fields; $j++) {
                $row[$j] = addslashes($row[$j]);
                $row[$j] = str_replace("\n", "\\n", $row[$j]);
                if (isset($row[$j])) {
                    $return .= '"' . $row[$j] . '"';
                } else {
                    $return .= '""';
                }
                if ($j < ($num_fields - 1)) {
                    $return .= ',';
                }
            }
            $return .= ");\n";
        }
    }
    $return .= "\n\n\n";
    file_put_contents($backup_file, $return, FILE_APPEND | LOCK_EX);
}

// Zamknij połączenie
$conn->close();