Založ si blog

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

DEMDIS zmierenie občianske fórum

Aké občianske fóra nás priblížia k porozumeniu? A pôjde to, aj keď nás budú politici ignorovať?

08.09.2024 18:00

K zmiereniu slovenskej spoločnosti po atentáte na premiéra nedošlo a nespokojnosť sa hromadí. Pomôžu nám nové občianske fóra, aj keď ich politici budú ignorovať?

Lysá Poľana vetroň

Tragédia v Česku: Žiak leteckej školy v panike vyskočil z vetroňa, neotvoril sa mu však padák

08.09.2024 16:58

Polícia uviedla, čo sa podľa predbežných zistení pod tragédiu podpísalo.

Michal Šimečka

Podrží Hlas Šimečku? Susko: S otvorením schôdze pomôže, hlasovanie bude tajné. Dobrý politický obchod, hodnotí Kolíková

08.09.2024 16:39

Poslanci sa v utorok vrátia na riadnu schôdzu, na programe je viacero odvolávaní.

Branislav Gröhling

Učitelia nahrádzajú pyrotechnikov. Zhoršenie bezpečnostnej situácie spôsobila vláda, tvrdí Gröhling

08.09.2024 15:38

Opozícia zrejme navrhne na post predsedu parlamentu Františka Mikloška z KDH.

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

Autor blogu

Kategórie

Archív