Da ich bei mir die Strompreisberechnung in den letzten zwei Wochen komplett umgestellt habe, habe ich ein erhötes Interesse an einer zusätzlichen Sicherung diverser MySQL Tabellen.
Bei meiner Suche bin ich auf etwas gestoßen, was sehr gut funktioniert und ich deshalb teilen möchte.
Bei mir werden etwa 300.000 Datensätze exportiert und das Skript braucht ca. 30 Sekunden inkl. Zippen und Versand. Ich denke das ist ok.
<?php
$sqlserver=getvalue(59311);
$user=getvalue(41755);
$password=getvalue(17356);
$database=getvalue(33225);
$dbhandler = mysqli_connect($sqlserver, $user, $password, $database);
$dbhandler->set_charset("utf8");
$tabellen = array();
//zu sicherende Tabellen wählen
$tabllen[0]="awattar";
$tabllen[1]="einspeisung";
$tabllen[2]="kosten";
//SQL Skript erstellen
foreach ($tabllen as $tabelle) {
$dateiname="C:\\ProgramData\\Symcon\\user\\backup_".$tabelle."_".date("Ymd",time()).".sql";
$dateiname_gzip="C:\\ProgramData\\Symcon\\user\\backup_".$tabelle."_".date("Ymd",time()).".gz";
$datei_handle=fopen($dateiname,"w");
$query = "SHOW CREATE TABLE $tabelle";
$daten = mysqli_query($dbhandler, $query);
$zeile = mysqli_fetch_row($daten);
fwrite($datei_handle,"\n\n" . $zeile[1] . ";\n\n");
$query = "SELECT * FROM $tabelle";
$daten = mysqli_query($dbhandler, $query);
$anzahl_spalten = mysqli_num_fields($daten);
for ($i = 0; $i < $anzahl_spalten; $i ++) {
while ($zeile = mysqli_fetch_row($daten)) {
fwrite($datei_handle,"INSERT INTO $tabelle VALUES(");
for ($j = 0; $j < $anzahl_spalten; $j ++) {
$zeile[$j] = $zeile[$j];
if (isset($zeile[$j])) {
fwrite($datei_handle,'"' . $zeile[$j] . '"');
} else {
fwrite($datei_handle,'""');
}
if ($j < ($anzahl_spalten - 1)) {
fwrite($datei_handle,',');
}
}
fwrite($datei_handle,");\n");
}
}
fwrite($datei_handle,"\n");
fclose($datei_handle);
$datei_handle_gzip=gzopen($dateiname_gzip,"w9");
//SQL Backup mit GZIP verkleinern
gzwrite($datei_handle_gzip,file_get_contents($dateiname));
gzclose($datei_handle_gzip);
//SQL Backup Datei löschen
unlink($dateiname);
SMTP_SendMailAttachmentEx(27953,"DEINE@MAILADRESSE.HIER","SQL Backup ".$tabelle,"SQL Backup ".$tabelle,$dateiname_gzip);
}