Backup la baza de date.

Acest articol contine un script care odata apelat, efectueaza un backup la baza de date.
Pentru cei ce doresc, se poate apela intr-un Cron Job, dar e recomandata stergerea bazelor de date la intervale regulate, daca site-ul nu dispune de un spatiu foarte mare.

Conectarea la baza se face prin mysqli, iar daca nu e realizata, se poate face prin linia urmatoare:
$xyz=@new mysqli($dbhost,$dbuser,$dbpass,$dbname);
Astfel variabila pentru interogari este $xyz.

Apoi se copiaza urmatorul cod intr-un fisier php:
//Inceput cod:
//Definim memoria folosita de script, daca baza de date e mare, si memoria folosita trebuie declarata mai mare, dar se poate ca firma de gazduire sa penalizeze pentru acest lucru.
ini_set('memory_limit','777M');
//Definim locatia fisierului SQL, folder care trebuie adaugat inainte de apelarea scriptului.
$folder='backup/';
/*
* Definim tabelele la care le dorim backup.
* Daca dorim backup doar la anumite tabele, le definim doar cu virgula intre ele astfel:
$tabele='tabela1,tabela2,etc';
* Daca se doreste backup la toata baza de date, variabila va deveni astfel:
$tabele='*';
*/
$tabele='*';
//Verifica daca au fost definite mai multe tabele si daca respecta regula definita mai sus, daca nu, le afiseaza pe cele existente in baza de date.
if($tabele!='*')
$tabele=is_array($tabele)?$tabele:explode(',',$tabele);
else
{
//Defineste o matrice in care vor fi definite tabelele existente in baza de date.
$tabele=array();
//Afiseaza tabelele din baza de date.
$tabelle=$xyz->query('SHOW TABLES');
//Traverseaza tabelele existente.
while($tabella=$tabelle->fetch_row())
{
//Defineste tabelele in matrice.
$tabele[]=$tabella[0];
}
}
//Defineste variabila textului care vine scris in fisierul SQL.
$text='';
//Traverseaza tabelele definite.
foreach($tabele AS $tabela)
{
//Afiseaza coloanele existente in tabela.
$coloanele=$xyz->query('SELECT * FROM '.$tabela);
//Numara coloanele existente in tabela.
$coloane=$coloanele->field_count;
//Defineste aruncarea tabelei in cazul in care exista in baza de date.
$text.='DROP TABLE IF EXISTS`'.$tabela.'`;';
//Afiseaza structura tabelei.
$structura_tabela=$xyz->query('SHOW CREATE TABLE '.$tabela)->fetch_row();
//Defineste structura tabelei impreuna cu doua linii noi inainte si dupa.
$text.="\n\n".$structura_tabela[1].";\n\n";
//Traverseaza randurile existente in tabela.
while($rand=$coloanele->fetch_row())
{
//Defineste inceputul inserarii liniei.
$text.='INSERT INTO`'.$tabela.'`VALUES(';
//Traverseaza coloanele.
for($i=0;$i<$coloane;$i++)
{
//Adauga \ la caracterele sensibile prin functia addslashes.
$rand[$i]=addslashes($rand[$i]);
//Inlocuieste liniile cu \r prin functia preg_replace.
$rand[$i]=preg_replace("/\r/","\\r",$rand[$i]);
//Inlocuieste liniile cu \n prin functia preg_replace.
$rand[$i]=preg_replace("/\n/","\\n",$rand[$i]);
//Verifica daca acea coloana contine o valoare setata, daca nu, o defineste ca fiind goala.
if(isset($rand[$i]))
$text.='"'.$rand[$i].'"';
else
$text.='""';
//Daca nu a ajuns la ultima coloana, defineste faptul ca inca exista coloane.
if($i<($coloane-1))
$text.=',';
}
//Defineste inchiderea randului, si adauga o linie noua.
$text.=");\n";
}
//Adauga trei linii dupa finalizarea unei tabele.
$text.="\n\n\n";
}
//Deschide fisierul care vine scris.
$fisier=fopen($folder.'backup-baza_'.date('Y-m-d-h').'_'.time().'.sql','w+');
//Scrie in fisier backup-ul bazei.
fwrite($fisier,$text);
//Inchide fisierul.
fclose($fisier);
//Inchide conexiunea la baza de date.
$xyz->close();
//Afiseaza un text.
echo'Tasc finalizat!';
//Sfarsit cod.

2 gânduri despre „Backup la baza de date.

Lasă un răspuns