Backup

Backup

PhpMyAdmin është një web-program fantastik për administrimin e një databaze në MySQL. Këtë program e instalojmë gjithmonë në serverat e administruar nga Host.al dhe ua rekomandojmë të gjithë klientëve tanë.

Megjithatë ndodh që ka raste që në seksionin e programimit kemi nevojë të punojmë me databaza në servera jo vetëm të kompanisë sonë, por dhe të hostuesve të tjerë. Para 2 ditësh mora një email nga një koleg i punës për backup të një DB MySQL në një server të tillë për të cilin nuk kishim as të dhëna shelli e as të dhëna për ndonjë phpMyAdmin. Në këtë rast nuk mund as të instalohej phpMyAdmin kështuqë databaza duhej bërë backup në një mënyrë tjetër.

Normalisht për të bërë backup një Databazë me anë të phpmydmin shkohet tek menuja Export (ose sipas gjuhës) dhe procedohet më tej.

Export table in PhpMyAdmin

Export table in PhpMyAdmin

Mënyra më e thjeshtë dhe praktike për mendimin tim është përdorimi i shell. Nëpërmjet shell me komandën mysqldump mund të transferohet lehtësisht e gjithë databaza në një file .sql. Shembull:

mysqldump -u emerperdoruesi -pfjalekalimi emerDB > db.sql

Në rastin kur nuk ka shell, por funksioni exec i PHP është aktiv mund të krijohet një script i thjeshtë php që të thërrasë këtë komandë dhe ta shkruaj në një skedar. Duhet që më parë skedari (psh db.sql) të jetë krijuar dhe të jetë bërë i shkruajtshëm si 666 (rw-rw-rw-).

Në këtë rast përmbajtja e skedarit (psh: mysqldump.php) mund të jetë:

<?php
exec(‘mysqldump -u emerperdoruesi -pfjalekalimi emerDB > db.sql’);

Pas thërritjes nga browseri, në të njëjtën direktori, skedari db.sql do të përmbajë të gjithë përmbajtjen e DB në sintaksë SQL Ansi.

Shpeshherë funksionet e ngjashme me exec (system, shell e të ngjashëm) ndalohen për ekzekutim nga PHP (Psh ne i bllokojmë këto funksione për efekt siguria tek Host.al). Në këtë rast duhet të shkruhet një funksion që të gjenerojë një tekst të gjatë me komandat ANSI SQL që përdoren per DB Dump.

Një shembull për një file të tillë jepet më poshtë:

<?php

//Lidhja me DB

$db=’DBNAME’;
$link = mysql_connect(‘localhost’, ‘EMERPERDORUESI’, ‘FJALEKALIM’);
if (!$link) {
die(‘Could not connect: ‘ . mysql_error());
}
$db_selected = mysql_select_db($db, $link);
if (!$db_selected) {
die (‘Can\’t use dbname : ‘ . mysql_error());
}

//Thërritja e funksionit që shfaq kodin,
//Deklarimi i funksionit është më poshtë

echo ‘<pre>’.mysql_dump($db).'</pre>’;

//Funksioni: Credits: http://snipplr.com/view/173/mysql-dump/
function mysql_dump($database) {
$query = ”;
$tables = @mysql_list_tables($database);
while ($row = @mysql_fetch_row($tables)) { $table_list[] = $row[0]; }

for ($i = 0; $i < @count($table_list); $i++) {

$results = mysql_query(‘DESCRIBE ‘ . $database . ‘.’ . $table_list[$i]);
$query .= ‘DROP TABLE IF EXISTS `’ . $database . ‘.’ . $table_list[$i] . ‘`;’ .”\n\r”;
$query .= “\n\r” . ‘CREATE TABLE `’ . $database . ‘.’ . $table_list[$i] . ‘` (‘ .”\n\r”;
$tmp = ”;
while ($row = @mysql_fetch_assoc($results)) {
$query .= ‘`’ . $row[‘Field’] . ‘` ‘ . $row[‘Type’];
if ($row[‘Null’] != ‘YES’) { $query .= ‘ NOT NULL’; }
if ($row[‘Default’] != ”) { $query .= ‘ DEFAULT \” . $row[‘Default’] . ‘\”; }
if ($row[‘Extra’]) { $query .= ‘ ‘ . strtoupper($row[‘Extra’]); }
if ($row[‘Key’] == ‘PRI’) { $tmp = ‘primary key(‘ . $row[‘Field’] . ‘)’; }
$query .= ‘,’. “\n\r”;
}
$query .= $tmp . “\n\r” . ‘);’ . str_repeat(“\n\r”, 2);
$results = mysql_query(‘SELECT * FROM ‘ . $database . ‘.’ . $table_list[$i]);
while ($row = @mysql_fetch_assoc($results)) {
$query .= ‘INSERT INTO `’ . $database . ‘.’ . $table_list[$i] .’` (‘;
$data = Array();
while (list($key, $value) = @each($row)) { $data[‘keys’][] = $key; $data[‘values’][] = addslashes($value); }
$query .= join($data[‘keys’], ‘, ‘) . ‘)’ . “\n\r” . ‘VALUES (\” . join($data[‘values’], ‘\’, \”) . ‘\’);’ . “\n\r”;
}
$query .= str_repeat(“\n\r”, 2);
}
return $query;
}

mysql_close($link);
?>