MySQL-Datenbank automatisch sichern und per Email versenden

Jeder, der mal eine Datenbank durch einen Crash oder durch eine Programmier-Unachtsamkeit verloren hat und keine Sicherung hatte, weiss wie schlimm das sein kann. Alles ist weg.

Dabei kann man sich sehr einfach vor solch einem Totalverlust schützen. Man lässt sich einfach in bestimmten Intervallen eine Sicherung der Datenbank per Email zuschicken. In Zeiten von Webmail-Diensten mit viel Speicherplatz wie “Google Mail” hat man hier zudem noch einen zusätzlichen Sicherungsfaktor.

Ich habe mir heute mal ein kleines Script geschrieben, mit dem man sich per Email den Inhalt einer Datenbank zuschicken lassen kann:

";

/* Systemcall */
system("/usr/bin/mysqldump -u".$dbuser." -p".$dbpw." -h ".$dbhost." ".$db." | /bin/gzip > ".$file, $fp);

if ($fp==0) echo "Dump generated"; else die("Ooops. An error occured!");

/* Prepare the email*/
$boundary 	= strtoupper(md5(uniqid(time())));
$mail_header  	= "From:".$from."\n";
$mail_header 	.= "MIME-Version: 1.0";
$mail_header 	.= "\nContent-Type: multipart/mixed; boundary=".$boundary;
$mail_header 	.= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";
$mail_header 	.= "\n--".$boundary;
$mail_header 	.= "\nContent-Type: text/plain";
$mail_header 	.= "\nContent-Transfer-Encoding: 8bit";
$mail_header 	.= "\n\n".$message;
$file_content	 = fread(fopen($file,"r"),filesize($file));
$file_content	 = chunk_split(base64_encode($file_content));
$mail_header 	.= "\n--".$boundary;
$mail_header 	.= "\nContent-Type: application/octetstream; name=\"".$file."\"";
$mail_header 	.= "\nContent-Transfer-Encoding: base64";
$mail_header 	.= "\nContent-Disposition: attachment; filename=\"".$file."\"";
$mail_header 	.= "\n\n".$file_content;
$mail_header 	.= "\n--".$boundary."--";

/* Send the email */
mail($to,$subject,"",$mail_header);

?>

Den obigen Text kopiert man mit einem beliebigen Texteditor in eine neue Datei und speichert diese in einem (vornehmlich) geschützten Bereich (z. B. mail_backup.php) auf dem eigenen Webserver. Ruft man nun das Skript auf wird die Datenbank gesichert und dann automatisch an die gewünschte Email-Adresse geschickt.

Wenn man ein Hosting-Paket hat, mit dem man Crons verwalten kann, so kann man sich beispielsweise jeden Sonntag einen Backup schicken lassen — oder auch jeden Tag. Sollte man keinen Zugriff auf Crons haben, so kann man auch einen Dienst im Internet benutzen (z.B. Cron-Server).

Schneller nachschlagen mit AJAX

Für diejenigen, die desöfteren Syntax nachschauen müssen, ist diese kleine Seite interessant (basierend auf AJAX):

Sidebar

Damit kann man recht schnell PHP und CSS und auch bald MySQL und Javascript – Syntax nachschlagen.

Am sinnvollsten ist dieser “Quick Lookup”, wenn man ihn in die Sidebar verfrachtet. Wie das geht ist auf der Seite beschrieben.

➡ Quick Lookup

MySQL 5 fertig

MySQL 5 ist fertig. Wichtige Neuerung sind Stored Procedures, Trigger, Views und Cursor.

* Stored Procedures and SQL Functions — to embed business logic in the database and improve performance;

* Triggers — to enforce complex business rules at the database level;

* Views — to ensure protection of sensitive information;

* Cursors — to allow easier database development and reference of large datasets;

* Information Schema — to provide easy access to metadata;

* XA Distributed Transactions — supports complex transactions across multiple databases in heterogeneous environments;

* SQL Mode — provides server-enforced data integrity for new and existing data;

* New Federated and Archive Storage Engines — MySQL’s unique pluggable storage engine architecture allows greater flexibility, functionality and performance by making it easy to swap database engines in and out, based on users’ application requirements;

* New Migration Toolkit — A new graphical toolkit that completely migrates all data and objects from Oracle, Microsoft SQL Server, Microsoft Access and other database platforms to MySQL;

* Instance Manager — new management assistant that allows remote starting/stopping of any MySQL Server, as well as remote editing of configuration files, reading of error and query logs, and more;

* Updated Connectors and Visual Tools — new high-performance versions of MySQL’s ODBC, Java and .NET database drivers are now available, along with updated versions of the MySQL Query Browser and MySQL Administrator.

Mehr Infos hier.

In the News: Golem, Heise

Wurm verbreitet sich per MySQL

Ein neuartiger Wurm ist in wilder Laufbahn gesichtet worden. Er repliziert sich über die beliebte Datenbank MySQL, indem er versucht über den Port 3306 — standardmässig der MySQL-Port — in ein System einzudringen.

Es wird keine Sicherheitslücke von MySQL ausgenutzt. Stattdessen versucht der Bot in Systeme einzudringen, die ein schwaches “root”-Passwort bei MySQL benutzen.

Gegenmassnahmen liegen auf der Hand: ein sicheres Passwort wählen.

➡ via Golem