Über den Author / Internet / Server / Optimierung und Bereinigung der MySQL Datenbanken

Optimierung und Bereinigung der MySQL Datenbanken

~1 Min. Lesezeit

Wie auch bei Festplatten des eigenen PC, können bei Datenbanken Fehler oder Fragmentierungen auftreten.

Auch wenn der grösste Performanceverlust meist bei falsch gesetzten Indexes liegt, so spielt die Optimierung der Tabellen auch eine kleine Rolle.

Aus diesem Grund habe ich ein einfaches PHP Skript gemacht:

<?php

define('DB_USER', 'root');     // Ersetze usernamehere mit deinem MySQL-Datenbank-Benutzernamen.
define('DB_PASSWORD', ''); // Ersetze yourpasswordhere mit deinem MySQL-Passwort.
define('DB_HOST', 'localhost');    // In 99% der Fälle musst du hier nichts ändern. Falls doch ersetze localhost mit der MySQL-Serveradresse.
define('CheckForCorrupts',true);
define('Optimize',true);

// ab Hier nichts mehr ändern.
$db = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Please check the Settings of the Database (User/Password/Host)");

$abfrage = mysql_query("SHOW databases",$db);
while ($databases = mysql_fetch_array($abfrage))
{
	$tot_data = 0;
	$tot_idx = 0;
	$tot_all = 0;
	$result = mysql_query("SHOW TABLE STATUS FROM `".$databases[0]."`",$db);
	if (mysql_num_rows($result) >= '1'){
		while ($row = mysql_fetch_array($result))
		{
			$tot_data = $row['Data_length'];
			$tot_idx  = $row['Index_length'];
			$total = $tot_data + $tot_idx;
			$total = $total / 1024 ;
			$total = round ($total,3); 
			$total_total += $total;
			$gain= $row['Data_free'];
			$gain = $gain / 1024 ;
			$total_gain += $gain;
			$gain = round ($gain,3);
			if (CheckForCorrupts == true)
			{
			    mysql_query("CHECK TABLE `".$row[0]."`",$db);
        		mysql_query("FLUSH TABLE `".$row[0]."`",$db);	
			}
			if (Optimize == true)
			{
        		mysql_query("OPTIMIZE TABLE `".$row[0]."`",$db);
            }
		}
	}
}
echo "Size of all Databases: ".floor($total_total/1024)." MB (Optimize ";
if (Optimize == true) { echo "has saved "; } else { echo "could save "; }
echo floor($total_gain/1024)." MB)";
?>

Dieses Script kann man per Cronjob oder auch manuell einmal im Monat aufrufen und sich automatisch alle Tables prüfen, reparieren und optimieren lassen. Da die Prüfung und Reparatur selten gebraucht wird, habe ich diese als einzelne Option zum Abschalten hinzugefügt.

Zerstören kann man sich damit nichts, da nur unnötiger Platz entfernt. Bei grossen Datenbanken lohnt sich diese Aktion über die Nacht auszuführen, da die Reorganisation bei mehreren Gigabyte grossen Datenbanken länger dauern könnte.

About Stefan

avatar
Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf.Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

PHP Trojaner suchen und finden

~0 Min. LesezeitPHP Trojaner sind seit längerem sehr beliebt. Mit dem Einsatz von immer mehr …

Microsofts Mail-Sperre aufheben

~1 Min. LesezeitMicrosoft bannt im Moment einige IP Bereiche, weil von vereinzelten IP Adressen Spam …

4 Kommentare

  1. avatar

    Das sieht gut aus, muss ich für meinen Shop mal ausprobieren. Für die WordPress Blogs nutze ich ja das Plugin WP-Optimize, aber mein Shop könnte so was hin und wieder ganz gut gebrauchen 😉
    .-= Tanja´s last blog ..Standmixer Philips HR 2094 um 27% reduziert – aus der Philips Aluminium Serie =-.

  2. avatar

    Hallo, wie muss ich es den Script abändern wenn ich eine Datenbank speziel ansprechen muss. (1und1 Kunde).

    $server = ‚localhost:/tmp/mysql5.sock‘; // MySql server
    $username = ‚dbo+++++++‘; // MySql Username
    $password = ‚+++++++++++‘ ; // MySql Password
    $database = ‚db+++++++‘; // MySql Database

    Es wäre sehr nett wenn Sie mir helfen könnten

    sven Harms

  3. avatar

    $server = ‘:/tmp/mysql5.sock’; // MySql server
    $username = ‘dbo+++++++’; // MySql Username
    $password = ‘+++++++++++’ ; // MySql Password
    $database = ‘db+++++++’; // MySql Database

    So sollte es gehen, einfach localhost weglassen.

  4. avatar

    Nein, dass Format ist 100% richtig. Localhost geht nicht bei 1und1.

    Im Script ist es so:

    define(‚DB_USER‘, ‚u37504505‘); // Ersetze usernamehere mit deinem MySQL-Datenbank-Benutzernamen.
    define(‚DB_PASSWORD‘, ’svenharms111′); // Ersetze yourpasswordhere mit deinem MySQL-Passwort.
    define(‚DB_HOST‘, ‚localhost:/tmp/mysql5.sock‘); // In 99% der Fälle musst du hier nichts ändern. Falls doch ersetze localhost mit der MySQL-Serveradresse.
    define(‚CheckForCorrupts‘,true);
    define(‚Optimize‘,true);

    Hier kann ich nicht eine Spezielle Datenbank ansprechen. Bei mir laufen diverse. Meine Frage ist, wie ich das Script ändern kann, so das ich z.b. die DB75858 bearbeiten kann.

    Sven

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.