Je to už dávno, čo som písal skript na zálohovanie databázy. Nie je to žiadny
problém, avšak pri niektorých databázach vám napísanie niečoho podobného môže trvať aj niekoľko hodín. Napríklad pri MySQL je to celkom komplikované, pretože musíte zistiť všetky vlastnosti stĺpca, jeho indexy a podobne. Ja som sa vošiel do menej ako 120 riadkov kódu a zatiaľ som nenarazil na nijakú chybu vo výsledku zálohy.
Nepochybujem, že s inými databázami bude záloha menej zložitá, avšak pri databáze SQLite áno.
Zálohovanie SQLite databázy cez PHP
Zálohovanie SQLite databázy cez PHP
Zálohovací skript
Každá jedna databáza SQLite obsahuje špeciálnu tabuľku sqlite_master, ktorá definuje schému databázy. Jej štruktúra je nasledovná:
CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT );
Záloha pomocou PHP sa vďaka tejto tabuľke stáva veľmi jednoduchou záležitosťou (najmä záloha štruktúry tabuliek). Nasledujúci extrémne jednoduchý skript vytvorí zálohu všetkých tabuliek vrátane uložených záznamov:
<?php
header('Content-Type:text/plain; charset=utf-8');
$db = sqlite_open('sqlite.db');
$sql = sqlite_query($db,
"SELECT name,sql FROM "
."(SELECT * FROM sqlite_master UNION ALL "
."SELECT * FROM sqlite_temp_master) "
."WHERE type='table' "
."ORDER BY name"
);
while ($row = sqlite_fetch_object($sql)) {
echo $row->sql.";\n\n";
$insert = sqlite_query($db,"SELECT * FROM ".$row->name);
$rows = sqlite_num_rows($insert);
$fields = sqlite_num_fields($insert);
if ($rows > 0) {
for ($i = 0; $i < $rows; $i++) {
$data = sqlite_fetch_array($insert);
echo "INSERT INTO ".$row->name." VALUES(";
for ($j = 0; $j < $fields; $j++) {
if ($j > 0) echo ",";
echo "'".sqlite_escape_string($data[$j])."'";
}
echo ");\n";
}
echo "\n";
}
}
Podobne možno vytvoriť aj zálohu databáz MySQL, MSSQL, či PostgreSQL. Presnú štruktúru tabuliek však získate omnoho zložitejším spôsobom. SQL príkaz na zoznam tabuliek SQLite načíta aj dočasné tabuľky. Ak chcete práve tento typ tabuliek zanedbať, stačí SQL príkaz upraviť na trochu jednoduchší:
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name
Odkazy
Autor: PaBi3 ·
Kategória: Programovanie ·
Dátum: 11.06.2007 19:32


![Hlasová verzia [Pre internetový prehliadač Opera] Voice](modules/items/voice.png)
Komentáre
SELECT * INTO OUTFILE 'backup.sql' FROM authLOAD DATA INFILE 'backup.sql' INTO TABLE auth