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 [...]

irán, urán, Arak, reaktor

Irán odmieta jadrové rokovania s USA podmienené zastavením obohacovania uránu

14.07.2025 22:22

Washington a Teherán viedli niekoľko kôl jadrových rokovaní s cieľom dosiahnuť dohodu, keď ich Izrael prerušil útokom na Irán.

SR Pečovská Nová Ves, Robert Fico

Fico dostal návrh Bruselu, čo Slovensku garantuje po podpore protiruských sankcií. Premiér ho posiela politickým stranám

14.07.2025 21:19

Kto chce s vlkmi žiť, musí s nimi vyť, komentoval premiér Robert Fico hľadanie kompromisu s Bruselom o podpore 18. balíka protiruských sankcií.

rumunsko vlajka

Rumunská vláda ustála hlasovanie o opozičnom návrhu na vyslovenie nedôvery

14.07.2025 20:41

Hlasovanie sa týka balíka fiškálnych opatrení, ktorý má v krajine zvýšiť dane a znížiť tak rozpočtový deficit.

lietadlo, Frankfurt, Nemecko, letisko

Havária malého lietadla na londýnskom letisku si vyžiadala štyri životy

14.07.2025 17:38

Vzlet z letiska Southend neďaleko Londýna smerom do holandského Lelystadu sa skončil tragicky.

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ť: 6995x
Priemerná čítanosť článkov: 874x

Autor blogu

Kategórie

Archív