Merhaba...
Bir müşterim için Php ile basit bir cari yönetim yazılımı yaptım. Ama müşterim illa yazılıma koyacağım bir butona tıklayarak veritabanı yedeği alayım diyor.
İnternette çeşitli örneklere baktım ama hepsi sunucuya yedekleme yaptırıyor. Müşterim direk bilgisayara indirmek istiyor.
CronJob ayarladım, günlük mail atsın dedim onu da istemedi, cari olduğu için günlük kayıdımı yapınca ben elle yedeğimi alayım diyor.
Nasıl yapabilirim, bildiğiniz basit bir db yönetim yazılımı olsa da işimi görür.
Teşekkürler..
Tek tıklama ile Php kullanarak MySQL veritabanı yedeğini alma
17
●1.278
- 27-09-2014, 13:56:23Bunula yapabilirsin. Db bilgilerini girip dosyayı yedekal.php olarak kaydet.
http://www.siteniz.com/yedekal.php?op=backup şeklinde çalıştır ve yedegi indir
<?php $dbname=""; $dbhost=""; $dbuname=""; $dbpass=""; $prefix=""; $admin_file="yedekal.php"; global $prefix, $db, $admin_file; switch($_GET["op"]) { case "backup": @set_time_limit(600); $crlf="\n"; switch($lang) { case french : // French Text $strNoTablesFound = "Aucune table n'a été trouvée dans cette base."; $strHost = "Serveur"; $strDatabase = "Base de données"; $strTableStructure = "Structure de la table"; $strDumpingData = "Contenu de la table"; $strError = "Erreur"; $strSQLQuery = "requête SQL"; $strMySQLSaid = "MySQL a répondu:"; $strBack = "Retour"; $strFileName = "Sauvegarde BD"; $strName = "Sauvegarde de la base de données"; $strDone = "effectuée le"; $strat = "à"; $strby = "par"; $date_jour = date ("d-m-Y"); break; default : // English Text $strNoTablesFound = "Database de Tablo Bulunamadı."; $strHost = "Host"; $strDatabase = "Database"; $strTableStructure = "Tablo"; $strDumpingData = "Tablo Icerigi"; $strError = "Hata"; $strSQLQuery = "SQL-Sorgusu"; $strMySQLSaid = "MySQL: "; $strBack = "Geri"; $strFileName = "Sql Yedegi"; $strName = "SQL Yedeği"; $strDone = "Tarih"; $strat = "Saat"; $strby = "Mysql Yedegi"; $date_jour = date ("m-d-Y"); break; } header("Content-disposition: filename=$strFileName $dbname $date_jour.sql"); header("Content-type: application/octetstream"); header("Pragma: no-cache"); header("Expires: 0"); // doing some DOS-CRLF magic... $client = $_SERVER["HTTP_USER_AGENT"]; if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)) { $os = $regs[1]; // this looks better under WinX if (eregi("Win",$os)) $crlf="\r\n"; } function my_handler($sql_insert) { global $crlf; echo "$sql_insert;$crlf"; } // Get the content of $table as a series of INSERT statements. // After every row, a custom callback function $handler gets called. // $handler must accept one parameter ($sql_insert); function get_table_content($db, $table, $handler) { $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die(); $i = 0; while($row = mysql_fetch_row($result)) { // set_time_limit(60); // HaRa $table_list = "("; for($j=0; $j<mysql_num_fields($result);$j++) $table_list .= mysql_field_name($result,$j).", "; $table_list = substr($table_list,0,-2); $table_list .= ")"; if(isset($GLOBALS["showcolumns"])) $schema_insert = "INSERT INTO $table $table_list VALUES ("; else $schema_insert = "INSERT INTO $table VALUES ("; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= " NULL,"; elseif($row[$j] != "") $schema_insert .= " '".addslashes($row[$j])."',"; else $schema_insert .= " '',"; } $schema_insert = ereg_replace(",$", "", $schema_insert); $schema_insert .= ")"; $handler(trim($schema_insert)); $i++; } return (true); } // Return $table's CREATE definition // Returns a string containing the CREATE statement on success function get_table_def($db, $table, $crlf) { $schema_create = ""; //$schema_create .= "DROP TABLE IF EXISTS $table;$crlf"; $schema_create .= "CREATE TABLE $table ($crlf"; $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die(); while($row = mysql_fetch_array($result)) { $schema_create .= " $row[Field] $row[Type]"; if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0")) $schema_create .= " DEFAULT '$row[Default]'"; if($row["Null"] != "YES") $schema_create .= " NOT NULL"; if($row["Extra"] != "") $schema_create .= " $row[Extra]"; $schema_create .= ",$crlf"; } $schema_create = ereg_replace(",".$crlf."$", "", $schema_create); $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die(); while($row = mysql_fetch_array($result)) { $kname=$row['Key_name']; if(($kname != "PRIMARY") && ($row['Non_unique'] == 0)) $kname="UNIQUE|$kname"; if(!isset($index[$kname])) $index[$kname] = array(); $index[$kname][] = $row['Column_name']; } while(list($x, $columns) = @each($index)) { $schema_create .= ",$crlf"; if($x == "PRIMARY") $schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")"; elseif (substr($x,0,6) == "UNIQUE") $schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")"; else $schema_create .= " KEY $x (" . implode($columns, ", ") . ")"; } $schema_create .= "$crlf)"; return (stripslashes($schema_create)); } function mysql_die($error = "") { echo "<b> $strError </b><p>"; if(isset($sql_query) && !empty($sql_query)) { echo "$strSQLQuery: <b>$sql_query</b><p>"; } if(empty($error)) echo $strMySQLSaid.mysql_error(); else echo $strMySQLSaid.$error; echo "<br><a href=\"javascript:history.go(-1)\">$strBack</a>"; exit; } global $dbhost, $dbuname, $dbpass, $dbname; mysql_pconnect($dbhost, $dbuname, $dbpass); @mysql_select_db("$dbname") or die ("Unable to select database"); $tables = mysql_list_tables($dbname); $num_tables = @mysql_numrows($tables); if($num_tables == 0) { echo $strNoTablesFound; } else { $i = 0; $heure_jour = date ("H:i"); print "# ========================================================$crlf"; print "#$crlf"; print "# $strName : $dbname$crlf"; print "# $strDone $date_jour $strat $heure_jour $strby $name !$crlf"; print "#$crlf"; print "# ========================================================$crlf"; print "$crlf"; while($i < $num_tables) { $table = mysql_tablename($tables, $i); print $crlf; print "# --------------------------------------------------------$crlf"; print "#$crlf"; print "# $strTableStructure '$table'$crlf"; print "#$crlf"; print $crlf; echo get_table_def($dbname, $table, $crlf).";$crlf$crlf"; print "#$crlf"; print "# $strDumpingData '$table'$crlf"; print "#$crlf"; print $crlf; get_table_content($dbname, $table, "my_handler"); $i++; } } break; } ?> - 28-09-2014, 21:10:02mhmtknbck adlı üyeden alıntı: mesajı görüntüle
Güzel bir yöntem teşekkürler.. Birde yedeği Gzip ile sıkışmış halde alsa, boşu boşuna her seferinde phpmyadmin'e girmek zorunda kalmayız.
Artı yedekal.php'yi bir klasöre atsak ve klasörü şifrelesek yine de çalışır mı ? Yoksa 7'nci satırdaki yedekal.php'nin önüne /klasor_adi/ mı koymalıyız ? - 29-09-2014, 19:51:36Klasor adı eklemene gerek yok dizin farketmiyor aynı sekilde kullanabilirsin.haXan1711 adlı üyeden alıntı: mesajı görüntüle
gzip entegresi için ugraşmak gerek
- 30-09-2014, 04:51:00Üyeliği durdurulduMerhaba, öncelikle kod için çok teşekkürler.mhmtknbck adlı üyeden alıntı: mesajı görüntüle
işime yarayacıgını düşünüyorum. fakat doldurulması gereken alanlar nereler?
anladıgım kadarıyla, sadece bu kısımlar.;
$dbname="";
$dbhost="";
$dbuname="";
$dbpass="";
$prefix="";
bu kısımlar ise hepsi tamam fakat ;$prefix="";
kısmına ne yazacagız?
Son olarak; bu kodları atıyorum, sqlyedegim.php php klasörüne attık, enterladık. daha sonra direkmen sql yedeği olarak indiriyor mu? - 30-09-2014, 17:37:23prefix kısmını boş bırakabilirsin.Manage adlı üyeden alıntı: mesajı görüntüle
dbname,dbhost,dbuname,dbpass bölümleri gerekli sadece.
dosyanın adını farklı şekilde yapacaksan eğer
$admin_file="yedekal.php"; kısmından degiştirmen gerek
$admin_file="sqlyedegim.php"; yaparsan eğer,
sqlyedegim.php?op=backup şeklinde çalıştırırsan yedegin sql olarak iner.