Automatizácia zálohovania MySQL

Automatizácia zálohovania databázy je kriticky dôležitá pre ochranu dát. V tomto článku sa pokúsim popísať, ako vytvoriť PHP skript, ktorý automaticky zálohuje MySQL databázu.

Najprv definujeme konfiguráciu pre pripojenie k databáze a nastavenia zálohovania:

<?php
// Database configuration
$host = 'localhost';
$username = 'your_username';
$password = 'your_password';
$database = 'your_database_name';

// Backup configuration
$backupDir = 'path/to/backup/directory';
$backupFile = $backupDir . '/' . $database . '_' . date('Y-m-d_H-i-s') . '.sql';

// Ensure the backup directory exists
if (!is_dir($backupDir)) {
    mkdir($backupDir, 0777, true);
}

// Set execution time limit to unlimited for large databases
set_time_limit(0);
?>

Následne vytvoríme pripojenie k MySQL databáze pomocou funkcie mysqli_connect a to nasledovne:

<?php
// Include the configuration
include 'config.php';

// Connect to MySQL database
$conn = new mysqli($host, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

Vytvoríme funkciu pre generovanie SQL súboru z celej databázy:

<?php
// Include the configuration and connection
include 'config.php';

// Function to generate SQL file from database
function backupDatabase($conn, $backupFile) {
    // Get all tables in the database
    $tables = array();
    $result = $conn->query("SHOW TABLES");
    while ($row = $result->fetch_row()) {
        $tables[] = $row[0];
    }

    // Initialize variable to store SQL script
    $sqlScript = '';

    // Loop through each table
    foreach ($tables as $table) {
        // Get CREATE TABLE statement
        $result = $conn->query("SHOW CREATE TABLE $table");
        $row = $result->fetch_row();
        $sqlScript .= "\n\n" . $row[1] . ";\n\n";

        // Get all table data
        $result = $conn->query("SELECT * FROM $table");
        $columnCount = $result->field_count;

        // Loop through each row in the table
        for ($i = 0; $i < $columnCount; $i++) {
            while ($row = $result->fetch_row()) {
                $sqlScript .= "INSERT INTO $table VALUES(";
                for ($j = 0; $j < $columnCount; $j++) {
                    $row[$j] = $conn->real_escape_string($row[$j]);
                    if (isset($row[$j])) {
                        $sqlScript .= '"' . $row[$j] . '"';
                    } else {
                        $sqlScript .= '""';
                    }
                    if ($j < ($columnCount - 1)) {
                        $sqlScript .= ',';
                    }
                }
                $sqlScript .= ");\n";
            }
        }

        $sqlScript .= "\n";
    }

    // Save the SQL script to a backup file
    if (!file_put_contents($backupFile, $sqlScript)) {
        die("Error creating backup file: $backupFile");
    }
}

// Run the backup function
backupDatabase($conn, $backupFile);

// Close the connection
$conn->close();

echo "Database backup completed successfully!";
?>

Pre automatizáciu spustenia tohto skriptu môžeme použiť CRON job na Linuxe. Napríklad, ak chceme zálohovať databázu každý deň o polnoci, pridáme riadok do crontab:

0 0 * * * /usr/bin/php /path/to/backup.php

a vytvoríme backup.php

<?php
// Database configuration
$host = 'localhost';
$username = 'your_username';
$password = 'your_password';
$database = 'your_database_name';

// Backup configuration
$backupDir = 'path/to/backup/directory';
$backupFile = $backupDir . '/' . $database . '_' . date('Y-m-d_H-i-s') . '.sql';

// Ensure the backup directory exists
if (!is_dir($backupDir)) {
    mkdir($backupDir, 0777, true);
}

// Set execution time limit to unlimited for large databases
set_time_limit(0);

// Connect to MySQL database
$conn = new mysqli($host, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Function to generate SQL file from database
function backupDatabase($conn, $backupFile) {
    // Get all tables in the database
    $tables = array();
    $result = $conn->query("SHOW TABLES");
    while ($row = $result->fetch_row()) {
        $tables[] = $row[0];
    }

    // Initialize variable to store SQL script
    $sqlScript = '';

    // Loop through each table
    foreach ($tables as $table) {
        // Get CREATE TABLE statement
        $result = $conn->query("SHOW CREATE TABLE $table");
        $row = $result->fetch_row();
        $sqlScript .= "\n\n" . $row[1] . ";\n\n";

        // Get all table data
        $result = $conn->query("SELECT * FROM $table");
        $columnCount = $result->field_count;

        // Loop through each row in the table
        for ($i = 0; $i < $columnCount; $i++) {
            while ($row = $result->fetch_row()) {
                $sqlScript .= "INSERT INTO $table VALUES(";
                for ($j = 0; $j < $columnCount; $j++) {
                    $row[$j] = $conn->real_escape_string($row[$j]);
                    if (isset($row[$j])) {
                        $sqlScript .= '"' . $row[$j] . '"';
                    } else {
                        $sqlScript .= '""';
                    }
                    if ($j < ($columnCount - 1)) {
                        $sqlScript .= ',';
                    }
                }
                $sqlScript .= ");\n";
            }
        }

        $sqlScript .= "\n";
    }

    // Save the SQL script to a backup file
    if (!file_put_contents($backupFile, $sqlScript)) {
        die("Error creating backup file: $backupFile");
    }
}

// Run the backup function
backupDatabase($conn, $backupFile);

// Close the connection
$conn->close();

echo "Database backup completed successfully!";
?>

Tento skript automaticky vytvorí zálohu MySQL databázy a uloží ju do špecifikovaného adresára. Pravidelným spúšťaním skriptu pomocou CRON jobu zaistíte, že vaše dáta budú pravidelne zálohované a chránené pred stratou.

Fulltextové vyhľadávanie v PHP a MySQL

31.08.2024

Fulltextové vyhľadávanie v MySQL umožňuje efektívne prehľadávanie veľkých textových dát. Základný script ktorý potrebujeme a ktorý si môžete prispôsobiť podľa svojich potrieb, napríklad pridať ďalšie polia na vyhľadávanie alebo upraviť vzhľad výsledkov je tento: Vysvetlenie kódu Konfigurácia databázy a pripojenie: Nastavenie parametrov pripojenia k databáze. [...]

Implementácia živých kasínových hier pomocou WebSocketov v PHP a Laraveli

30.08.2024

Implementácia živých kasínových hier predstavuje moderný a atraktívny spôsob, ako zaujať hráčov a poskytnúť im autentický zážitok z hry. Použitie WebSocketov umožňuje real-time komunikáciu medzi serverom a klientom, čím sa dosahuje plynulé a rýchle reagovanie na herné udalosti. V tomto článku si ukážeme, ako vytvoriť živé kasínové hry pomocou PHP a Laravelu, [...]

Kompletný skript pre odosielanie e-mailov pomocou PHPMailer vrátane konfigurácie SMTP

19.08.2024

Vysvetlenie kódu: Autoloader: Použitím Composeru načítame potrebné triedy z PHPMaileru. SMTP konfigurácia: Nastavíme pripojenie k SMTP serveru vrátane hostiteľa, portu, používateľského mena a hesla. Nastavenie príjemcov: Pridáme odosielateľa, príjemcu a voliteľnú adresu pre odpovede. Nastavenie obsahu e-mailu: Definujeme predmet, telo e-mailu vo formáte HTML a alternatívny [...]

Trump, Putin

ONLINE: Kremeľ: Tvrdenia Trumpa, že dokáže rýchlo ukončiť vojnu na Ukrajine, sú prehnané

08.11.2024 06:25, aktualizované: 07:05

Trump skôr vyhlásil, že za 24 hodín zastaví vojnu na Ukrajine.

Izrael / Vojak / Armáda / Gaza /

Odvolaný izraelský minister obrany Galant: Už nie je dôvod zostávať v Gaze

08.11.2024 06:00

Izraelská armáda už nemá dôvod zostávať v Pásme Gazy. Rodinám rukojemníkov to podľa správ izraelských médií povedal odchádzajúci minister obrany Joav Galant

Michal Šimečka / Andrej Danko /

Ktorý politik či šéf kľúčovej inštitúcie zarobil najviac? Líder SNS má o státisíce eur viac, no nájde sa aj milionár

08.11.2024 06:00

Líder SNS Andrej Danko pre Pravdu uviedol, že takmer 400-tisíc eur zarobil minulý rok z podnikania a advokácie.

Trump

Exporadca Havla: Nepripravili sme sa. V Európe z návratu Trumpa vypukla panika

08.11.2024 06:00

Čo by na návrat republikána Donalda Trumpa do Bieleho domu povedal Václav Havel?

janvarga

Blog o mojej práci a vášni zároveň. Programujem v PHP a ako najčastejšie cms používam wordpress ako nedokonalú ale modernejšiu náhradu za drupal a typo3. A tom sú moje články.

Štatistiky blogu

Počet článkov: 8
Celková čítanosť: 5873x
Priemerná čítanosť článkov: 734x

Autor blogu

Kategórie

Archív