<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>techspread &#187; MySQL</title>
	<atom:link href="http://www.techspread.de/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.techspread.de</link>
	<description></description>
	<lastBuildDate>Sat, 04 Feb 2012 14:37:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Liquibase in Java Anwendung einbinden</title>
		<link>http://www.techspread.de/8010/liquibase-in-java-anwendung-einbinden</link>
		<comments>http://www.techspread.de/8010/liquibase-in-java-anwendung-einbinden#comments</comments>
		<pubDate>Sat, 24 Sep 2011 19:33:49 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Liquibase]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=8010</guid>
		<description><![CDATA[Mit Liquibase können Änderungen an Datenbanken einfach und nachvollziehbar durchgeführt werden.]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich mich mit dem leicht zu erlernenden Java Framework <a href="http://www.liquibase.org/">Liquibase</a> beschäftigt. Liquibase basiert auf Datenbank unabhängigen Changesets im XML-Format und ermöglicht einfache und nachvollziehbare Änderungen an Datenbanken. Normalerweise führt man Liquibase mit <a href="http://ant.apache.org/">Ant</a>, <a href="http://maven.apache.org/">Maven</a>, <a href="http://www.springsource.org/">Spring</a> oder der Kommandozeile aus, ich wollte Liquibase jedoch zu Testzwecken direkt in meine Anwendung ohne Spring integrieren. Leider ist das API schlecht dokumentiert, sodass ich einige Stunden mit der Suche nach einer Lösung verbracht habe (dabei bin ich auf viele andere mit demselben Problem gestoßen).</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-8011" title="Liquibase Logo" src="http://www.techspread.de/wp-content/uploads/liquibase_logo.gif" alt="" width="342" height="64" /></p>
<p><span id="more-8010"></span></p>
<p>Zunächst habe ich ein Maven-Projekt erstellt und den MySQL-Treiber sowie Liquibase eingebunden:</p>
<pre class="brush:xml">&lt;dependency&gt;
	&lt;groupId&gt;mysql&lt;/groupId&gt;
	&lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
	&lt;version&gt;5.1.17&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
	&lt;groupId&gt;org.liquibase&lt;/groupId&gt;
	&lt;artifactId&gt;liquibase-core&lt;/artifactId&gt;
	&lt;version&gt;2.0.1&lt;/version&gt;
&lt;/dependency&gt;</pre>
<p>Danach habe ich zu Testzwecken ein sehr einfach gestricktes Changeset unter <em>src/main/resources/changelog.xml</em> angelegt:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
	http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"&gt;
	&lt;changeSet id="1" author="patrick"&gt;
		&lt;createTable tableName="kontakt"&gt;
			&lt;column name="id" type="int"&gt;
				&lt;constraints primaryKey="true" nullable="false" /&gt;
			&lt;/column&gt;
			&lt;column name="vorname" type="varchar(32)"&gt;
				&lt;constraints nullable="false" /&gt;
			&lt;/column&gt;
			&lt;column name="nachname" type="varchar(32)"&gt;
				&lt;constraints nullable="false" /&gt;
			&lt;/column&gt;
		&lt;/createTable&gt;
	&lt;/changeSet&gt;
&lt;/databaseChangeLog&gt;</pre>
<p>Zum Ausführen des Changesets habe ich dann folgende Klasse implementiert:</p>
<pre class="brush:java">package de.techspread.liquibase;

import java.sql.Connection;
import java.sql.DriverManager;

import liquibase.Liquibase;
import liquibase.database.core.MySQLDatabase;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;

public final class Main {

	private String driver    = "com.mysql.jdbc.Driver";
	private String url       = "jdbc:mysql://localhost/liquibase";
	private String username  = "benutzername";
	private String password  = "passwort";
	private String changelog = "changelog.xml";			

	public static void main(String[] args) throws Exception {
		new Main();
	}

	public Main() throws Exception {
		Class.forName(driver);
		Connection connection = DriverManager.getConnection(url, username, password);
		JdbcConnection jdbcConnection = new JdbcConnection(connection);
		MySQLDatabase databaseConnection = new MySQLDatabase();
		databaseConnection.setConnection(jdbcConnection);
		Liquibase liquibase = new Liquibase(changelog, new ClassLoaderResourceAccessor(), databaseConnection);
		liquibase.update(null);
	}

}</pre>
<p>Bevor man das Changeset ausführen kann, muss natürlich die Datenbank und ggf. einen entsprechender Benutzer eingerichtet werden.</p>
<p>Beim Start der Anwendung führt Liquibase nun die gewünschten Änderungen an der Datenbank durch (in diesem Fall wird eine Tabelle angelegt). Zusätzlich legt Liquibase eine eigene Tabelle an, in der sich Liquibase das aktuelle Changeset merkt.</p>
<p>Konfiguriert man nun weitere Changesets, bringt Liquibase die Datenbank beim nächsten Start der Anwendung auf den aktuellsten Stand. Damit gehören unnachvollziehbare Änderungen an der Datenbank der Vergangenheit an.</p>
<p>Sollte ein Datenbank-Update fehlschlagen, können zudem auch Rollback-Einträge definiert werden. Weiteres erfahrt ihr natürlich auf der Projektwebseite, ich möchte hier keine vollständige Dokumentation hinlegen <img src='http://www.techspread.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/8010/liquibase-in-java-anwendung-einbinden/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL-Datenbanken sichern</title>
		<link>http://www.techspread.de/1356/mysql-datenbanken-sichern</link>
		<comments>http://www.techspread.de/1356/mysql-datenbanken-sichern#comments</comments>
		<pubDate>Sat, 14 May 2011 08:45:53 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Restore]]></category>
		<category><![CDATA[Sicherung]]></category>
		<category><![CDATA[Wiederherstellung]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=1356</guid>
		<description><![CDATA[Diese Anleitung erkärt das Sicherun und Wiederherstellen von MySQL-Datenbanken]]></description>
			<content:encoded><![CDATA[<p>Vorgestern habe ich meinen Server neu aufgesetzt und in dem Rahmen natürlich auch wieder meine tägliche Datensicherung. Für die Sicherung meiner Datenbanken habe ich mir ein Script geschrieben, mit deren Hilfe ich automatisch jede einzelne Datenbank meines MySQL-Servers in eine eigene Datei sichere. Dieser Artikel zeigt die Grundbefehle für eine MySQL-Datensicherung und natürlich stelle ich auch mein Script zur Verfügung.<span id="more-1356"></span></p>
<h3>MySQL-Datenbank sichern</h3>
<p>MySQL-Datenbanken sichert man am Besten mit dem Kommandozeilen-Tool <a href="http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html">mysqldump</a>, welches standardmäßig mit dem MySQL-Server mitinstalliert wird. Die Syntax zur Sicherung einer Datenbank lautet wie folgt:</p>
<pre class="brush:shell">mysqldump -u&lt;Benutzername&gt; -p&lt;Passwort&gt; &lt;Datenbank&gt; &gt; &lt;SQL-Datei&gt;</pre>
<p>Beispiel:</p>
<pre class="brush:shell">mysqldump –uroot –pgeheim techspread &gt; /backup/techspread.sql</pre>
<p>Natürlich bietet der mysqldump Befehl noch etliche weitere Parameter, in den meisten Fällen ist diese Variante jedoch vollkommen ausreichend.</p>
<h3>MySQL-Datenbank wiederherstellen</h3>
<p>Die Syntax zum Wiederherstellen der Datenbank lautet wie folgt:</p>
<pre class="brush:shell">mysql -u&lt;Benutzername&gt; –p&lt;Passwort&gt; &lt;Datenbank&gt; &lt; &lt;SQL-Datei&gt;</pre>
<p>Beispiel:</p>
<pre class="brush:shell">mysql –uroot –pgeheim techspread &lt; /backup/techspread.sql</pre>
<h3>MySQL-Datenbank via Netzwerk sichern</h3>
<p>Wer noch einen Schritt weiter gehen möchte, kann auch MySQL-Server  per Netzwerk/Internet sichern. Dazu muss dem mysqldump-Befehl lediglich  ein weiterer Parameter mit auf den Weg gegeben werden. Der angegebene  Benutzer muss natürlich auch Zugriff via Netzwerk erhalten (was in der  Standardeinstellung nicht der Fall ist):</p>
<pre class="brush:shell">mysqldump -h &lt;Server&gt; -u&lt;Benutzername&gt; -p&lt;Passwort&gt; &lt;Datenbank&gt; &gt; &lt;SQL-Datei&gt;</pre>
<p>Beispiel:</p>
<pre class="brush:shell">mysqldump -h techspread.de -uroot -pgeheim techspread &gt; /backup/techspread.sql</pre>
<h3>MySQL-Backup-Script</h3>
<p>Damit man sich nicht manuell um die Sicherung jeder einzelnen Datenbank kümmern muss, habe ich folgendes Script geschrieben:</p>
<pre class="brush:shell">#! /bin/bash

BACKUPDIR=&lt;Sicherungsordner&gt;
USERNAME=&lt;Benutzername&gt;
PASSWORD=&lt;Passwort&gt;

if [ -d $BACKUPDIR ];
then
	rm -r $BACKUPDIR
fi

mkdir $BACKUPDIR
cd $BACKUPDIR

DATABASES=`mysql -u$USERNAME -p$PASSWORD -Bse 'show databases'`
for DATABASE in $DATABASES;
do
	if [ "$DATABASE" != "information_schema" ];
	then
		mysqldump -u$USERNAME -p$PASSWORD $DATABASE &gt; ${DATABASE}.sql
	fi
done</pre>
<h3>Schlussbemerkung</h3>
<p>Auf Basis der vorgestellten Befehle und dem Script kann man sich noch weitaus mächtigere Scripte schreiben. So habe ich das Script auf Arbeit so eingerichtet, dass man über Parameter an das Script das Sicherungsverzeichnis, den Server, den Benutzernamen und das Passwort übergibt. Dadurch kann man komfortabel eine zentrale Sicherung für mehrere MySQL-Server einrichten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/1356/mysql-datenbanken-sichern/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webserver unter Mac OS installieren</title>
		<link>http://www.techspread.de/6654/webserver-unter-mac-os-installieren</link>
		<comments>http://www.techspread.de/6654/webserver-unter-mac-os-installieren#comments</comments>
		<pubDate>Sat, 19 Feb 2011 21:08:55 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[MAMP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=6654</guid>
		<description><![CDATA[Diese Anleitung zeigt die Installation eines lokalen Webservers mit den Bordmitteln von Mac OS.]]></description>
			<content:encoded><![CDATA[<p>Wie manche bereits aus meiner <a href="/4297/webserver-unter-windows-installieren">Anleitung zur Installation eines Webservers unter Windows</a> wissen, verabscheue ich vorkonfigurierte Webserver wie zum Beispiel <a href="http://www.apachefriends.org/de/xampp.html">XAMPP</a>. Unter Mac OS scheint es wohl üblich zu sein, das fertige <a href="http://www.mamp.info/de/index.html">MAMP</a>-Paket zu installieren, dabei hat Mac OS von Haus aus schon fast alle Komponenten für einen lokalen Webserver mit dabei!<span id="more-6654"></span></p>
<h3>root-Rechte verschaffen</h3>
<p>Also setzen wir uns nun einen eigenen lokalen Webserver mit Mac OS Bordmitteln auf. Verschaffe dir zunächst einmal root-Rechte im Terminal:</p>
<pre>sudo -i</pre>
<h3>Webserver konfigurieren</h3>
<p>Danach wechselst du in den Konfigurationsordner des Apache-Webservers&#8230;</p>
<pre>cd /etc/apache2</pre>
<p>&#8230; und öffnest die Haupkonfigurationsdatei des Webservers:</p>
<pre>nano httpd.conf</pre>
<p>Entferne erst einmal das Rautezeichen vor der folgenden Zeile, damit das PHP-Modul mitgeladen wird:</p>
<pre>#LoadModule php5_module        libexec/apache2/libphp5.so</pre>
<p>Für die Entwicklung empfiehlt sich die Vergabe voller Zugriffsrechte. Ändere dazu den <em>&lt;Directory&gt;</em>-Block wie folgt ab:</p>
<pre>&lt;Directory /&gt;
   Options FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
&lt;/Directory&gt;</pre>
<p>Der <em>DirectoryIndex</em>-Eintrag muss noch um die Datei <em>index.php</em> erweitert werden:</p>
<pre>DirectoryIndex index.html index.php</pre>
<p>Damit du virtuelle Hosts (vhosts) anlegen kannst,  entfernst du das Rautezeichen vor der Zeile</p>
<pre>#Include /private/etc/apache2/extra/httpd-vhosts.conf</pre>
<p>und erstellst auch gleich deinen ersten vhost-Eintrag. Öffne dazu die Konfigurationsdatei für vhosts</p>
<pre>nano extra/httpd-vhosts.conf</pre>
<p>und kommentiere beide voreingestellten vhosts mit Rautezeichen aus. Füge dann folgenden Eintrag an das Ende hinzu:</p>
<pre>&lt;VirtualHost *:80&gt;
   ServerName &lt;Projekt&gt;
   DocumentRoot "/Users/&lt;Benutzer&gt;/Sites/&lt;Projekt&gt;"
&lt;/VirtualHost&gt;</pre>
<p>Ersetze hierbei <em>&lt;Projekt&gt;</em> durch den Namen deines Webprojektes und <em>&lt;Benutzer&gt;</em> durch deinen Benutzernamen. Jetzt fügst du noch einen Eintrag zum Ende der Datei <em>/etc/hosts</em> hinzu:</p>
<pre>echo "127.0.0.1 &lt;Projekt&gt;" &gt;&gt; /etc/hosts</pre>
<p><em>&lt;Projekt&gt;</em> muss hierbei wieder durch den Namen deines Projektes ersetzt werden. Dieser Eintrag muss unbedingt mit dem <em>ServerName</em>-Eintrag in der letzten editierten Datei übereinstimmen. Für jedes weitere Projekt musst du die letzten beiden Schritte wiederholen und den Webserver neustarten:</p>
<pre>apachectl restart</pre>
<p>Bei mir kommt immer eine Warnung, der Webserver startet trotzdem neu.</p>
<h3>PHP einrichten</h3>
<p>Jetzt richtest du erst einmal PHP ein. Kopiere dazu die Vorlage für die PHP-Konfigurationsvorlage und öffne diese in einem Editor:</p>
<pre>cp /etc/php.ini.default /etc/php.ini
nano /etc/php.ini</pre>
<p>Zum Entwickeln lohnt es sich, alle Fehler auszugeben. Passe also die Einstellung für <em>error_reporting</em> wie folgt an:</p>
<pre>error_reporting = E_ALL</pre>
<p>Schalte dann die Fehlerausgabe an:</p>
<pre>display_errors = On</pre>
<p>Danach aktivierst du noch ein paar gängige PHP-Module (entferne das Semikolon am Anfang der Zeile):</p>
<pre>extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_xmlrpc.dll</pre>
<p>Gleich unter dem Extension-Block stellst du die richtige Zeitzone ein:</p>
<pre>date.timezone = Europe/Berlin</pre>
<p>Jetzt müssen noch die Angaben für den MySQL-Socket angepasst werden, da diese auf einen falschen Pfad verweisen:</p>
<pre>pdo_mysql.default_socket = /tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock</pre>
<p>Jetzt ist ein Neustart des Webservers fällig:</p>
<pre>apachectl restart</pre>
<h3>MySQL-Server installieren</h3>
<p>Lade dir nun den <a href="http://www.mysql.de/downloads/mysql/">MySQL-Server</a> als 32-Bit dmg-Datei herunter und installiere alle drei Dateien aus dem Paket. Starte den Server dann über den Eintrag in den Systemeinstellungen. Der Server wird ohne root-Passwort installiert, sodass du nun erst einmal ein Passwort vergeben solltest:</p>
<pre>/usr/local/mysql/bin/mysql -uroot
UPDATE mysql.user SET Password=PASSWORD('&lt;Passwort&gt;') WHERE User='root';
FLUSH PRIVILEGES;
quit;</pre>
<p>Statt <em>&lt;Passwort&gt;</em> setzt du natürlich dein Passwort ein. Noch einmal den MySQL-Server über die Systemeinstellungen neustarten und dein lokaler Webserver ist fertig gestellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/6654/webserver-unter-mac-os-installieren/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Bilder in MySQL-Datenbank speichern</title>
		<link>http://www.techspread.de/6487/bilder-in-mysql-datenbank-speichern</link>
		<comments>http://www.techspread.de/6487/bilder-in-mysql-datenbank-speichern#comments</comments>
		<pubDate>Mon, 07 Feb 2011 14:40:44 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Bilder]]></category>
		<category><![CDATA[BLOB]]></category>
		<category><![CDATA[Nachteile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Vorteile]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=6487</guid>
		<description><![CDATA[Dieser Artikel beleuchtet die Vor- und Nachteile des Speichern von Bildern in einer MySQL-Datenbank und zeigt ein simples PHP-Script, um Bilder in die Datenbank zu schreiben und wieder auszulesen.]]></description>
			<content:encoded><![CDATA[<p>Ich habe mich heute damit beschäftigt, wie man Bilder in einer relationalen Datenbank wie MySQL ablegen kann. Diese Methode hat viele Vorteile aber auch schlagkräftige Nachteile. Mit diesem Artikel beleuchte ich zunächst einmal die Vor- und Nachteile und zeige euch dann ein passendes PHP-Script, um Bilder in eine MySQL-Datenbank zu speichern und wieder auszulesen.<span id="more-6487"></span></p>
<h3>Vorteile</h3>
<p>Viele Vorteile ergeben sich aus dem Fakt, dass Informationen (Artikel, Texte etc) zusammen in einer Datenbank abgespeichert werden. Dadurch können Bilder nicht ohne weiteres einfach verwaisen und es wird die Integrität der Daten vereinfacht. Metadaten können ebenfalls problemlos mit den Bildern verknüpft werden.</p>
<p>Die Speicherung in einer Datenbanken bringt aber auch noch andere Vorteile mit sich. So können sehr schnell und einfach Load-Balancing-Systeme auf Datenbank-Ebene eingeführt werden. Eine Portierung von einem System auf ein anderes ist ebenfalls sehr einfach, da einfach ein Backup der Datenbank erstellt und auf einen anderen Server übertragen werden kann &#8211; die Anwendung ist dann sofort wieder einsatzbereit.</p>
<p>Auch ist die Rechteverwaltung innerhalb einer Datenbank leichter umzusetzen, als auf Dateisystem-Ebene.</p>
<p>Es ergeben sich sicherlich noch weitere Vorteile, die mir auf die schnelle nicht eingefallen sind <img src='http://www.techspread.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Nachteile</h3>
<p>Das Auslesen von Bildern aus einer Datenbank ist im Gegensatz zu einem direkten Zugriff auf das Dateisystem deutlich langsamer, da zunächst immer die Datenbankabfrage abgefragt werden muss. Zudem kann ein Browser die Bilder nicht ohne weiteres zwischenspeichern, da der Webserver nicht erkennen kann, ob das Bild seit dem letzten Besuch verändert wurde. Die Backup-Strategie muss auch angepasst werden, da Bilder in Datenbanken als BLOBs (Binary Large Objects) abgelegt werden. Dadurch ist es nicht mehr so einfach möglich, textbasierte, inkrementelle Sicherungen zu erstellen.</p>
<p>Diese Nachteile können jedoch durch intelligente Lösungen drastisch reduziert werden. So kann man z.B. per PHP-Script überprüfen, ob sich das Bild in der Datenbank verändert hat und entsprechende Header zurückgeben. Für die Datenbank-Sicherung kann z.B. ein <a href="http://dev.mysql.com/doc/refman/5.1/en/point-in-time-recovery.html">Point-in-Time Recovery</a> verwendet werden.</p>
<h3>PHP-Beispiel</h3>
<p>Nachdem ich nun die Vor- und Nachteile erläutert habe, stelle ich ein simple Lösung vor, um Bilder per PHP in eine Datenbank zu bringen und wieder auszulesen. Diese Lösung ist wirklich minimalistisch und kann sollte um Überprüfungen und weitere Funktionalitäten erweitert werden.</p>
<p>Zunächst einmal muss eine entsprechende Datenbank angelegt werden:</p>
<pre class="brush:sql">CREATE DATABASE imagedb;
CREATE TABLE imagedb.images (
	id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	image BLOB NOT NULL,
	mimetype VARCHAR(32) NOT NULL
);</pre>
<p>Nachdem die Datenbank angelegt wurde, erstellst du eine Datei namens <em>connect.php</em>, in der die MySQL-Verbindungsdaten hinterlegt werden und auch gleich die Verbindung zur Datenbank aufgebaut wird:</p>
<pre class="brush:php">&lt;?php
	// MySQL-Verbindungsdaten
	$hostname = 'localhost';
	$database = 'imagedb';
	$username = 'Dein DB-Benutzer';
	$password = 'Dein DB-Password';

	// MYSQL-Verbindung herstellen
	mysql_connect($hostname, $username, $password) or die(mysql_error());
	mysql_select_db($database) or die(mysql_error());
?&gt;</pre>
<p>Danach legst du die Datei <em>index.php</em> an, die für das Hochladen und Anzeigen der Bilder verantwortlich ist:</p>
<pre class="brush:php">&lt;?php
	// MySQL-Verbindung herstellen
	require 'connect.php';

	// Formular abgeschickt
	if(isset($_FILES['image'])) {

		// Datei hochgeladen
		if(is_uploaded_file($_FILES['image']['tmp_name'])) {

			// Verweis auf Bild
			$image = $_FILES['image']['tmp_name'];

			// Vorbereiten für den Upload in DB
			$data = addslashes(file_get_contents($image));

			// Metadaten auslesen
			$meta = getimagesize($image);
			$mime = $meta['mime'];

			// Bild in DB speichern
			mysql_query("INSERT INTO images VALUES('', '$data', '$mime')");
		}
	}
?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"&gt;
	&lt;head&gt;
		&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8" /&gt;
		&lt;title&gt;MySQL-Bilder-Datenbank&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Bild hochladen&lt;/h1&gt;
		&lt;form action="" method="post" enctype="multipart/form-data"&gt;
			&lt;input name="image" type="file" /&gt;
			&lt;input type="submit" value="hochladen" /&gt;
		&lt;/form&gt;
		&lt;h1&gt;Bilderliste&lt;/h1&gt;
		&lt;?php
			$result = mysql_query("SELECT id FROM images");
			while($row = mysql_fetch_object($result)) {
				echo '&lt;img alt="" src="image.php?id='.$row-&gt;id.'" /&gt;&lt;br /&gt;';
			}
		?&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Zuletzt wird die Datei <em>image.php</em> benötigt, die sich um das Auslesen der Bilder aus der Datenbank kümmert:</p>
<pre class="brush:php">&lt;?php
	// MySQL-Verbindung herstellen
	require 'connect.php';

	// Bild ausgeben
	$id = addslashed($_GET['id']);
	$result = mysql_query("SELECT image, mimetype FROM images WHERE id='$id'");
	$row = mysql_fetch_object($result);
	header("Content-type: $row-&gt;mimetype");
	echo $row-&gt;image;
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/6487/bilder-in-mysql-datenbank-speichern/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Performance der MySQL-Datenbank verbessern</title>
		<link>http://www.techspread.de/6016/performance-der-mysql-datenbank-verbessern</link>
		<comments>http://www.techspread.de/6016/performance-der-mysql-datenbank-verbessern#comments</comments>
		<pubDate>Tue, 07 Dec 2010 17:19:25 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tuning]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=6016</guid>
		<description><![CDATA[Mit dem hier vorgestellten Script kann man seine MySQL-Datenbank gezielt optimieren.]]></description>
			<content:encoded><![CDATA[<p>Ich habe eben gerade nach einem Script gesucht, das meine WordPress-Tabellen automatisch per <a href="http://de.wikipedia.org/wiki/Cron">cronjob</a> optimiert. Sonst habe ich dafür immer <a href="http://wordpress.org/extend/plugins/wp-optimize/">WP-Optimize</a> verwendet, ich wollte das Prozedere aber in einen cronjob auslagern. Dabei bin ich auf ein Script eines MySQL-Entwicklers gestoßen, mit dem man die Einstellungen seiner Datenbank überprüfen und daraufhin gezielt optimieren kann.<span id="more-6016"></span></p>
<p>Um die Datenbank zu testen, musste ich zunächst <a href="http://de.wikipedia.org/wiki/Basic_Calculator">bc</a> auf meinem System nachinstallieren:</p>
<pre>aptitude install bc</pre>
<p>Danach habe ich das Script heruntergeladen, ausführbar gemacht und dann natürlich ausgeführt:</p>
<pre>wget http://www.day32.com/MySQL/tuning-primer.sh
chmod +x tuning-primer.sh
./tuning-primer.sh</pre>
<p>Nach Auswählen des Sockets und der Eingabe der Benutzerdaten vergleicht das Script die derzeitige MySQL-Konfiguration mit Laufzeit-Daten des MySQL-Servers. Der MySQL-Server sollte also am Besten schon einige Zeit im Betrieb gewesen sein, bevor man dieses Script zur Performance-Optimierung heranzieht. Auf Basis dieses Vergleichs schlägt das Script Verbesserungen vor, welche in der MySQL-Konfigurationsdatei &#8211; für gewöhlich <em>my.cnf</em> &#8211; vorgenommen werden können.</p>
<p>Da sich die Anforderungen an die Datenbank ständig ändern können, sollte man dieses Script immer mal wieder nutzen, um eine bestmögliche Performance erzielen zu können.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/6016/performance-der-mysql-datenbank-verbessern/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>MySQL-Datenbank sichern und wiederherstellen mit phpMyAdmin</title>
		<link>http://www.techspread.de/5084/mysql-datenbank-sichern-und-wiederherstellen-mit-phpmyadmin</link>
		<comments>http://www.techspread.de/5084/mysql-datenbank-sichern-und-wiederherstellen-mit-phpmyadmin#comments</comments>
		<pubDate>Tue, 21 Sep 2010 15:49:02 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[Recovery]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=5084</guid>
		<description><![CDATA[Heute zeige ich euch, wie man mit phpMyAdmin seine Datenbanken sichern und wiederherstellen kann.]]></description>
			<content:encoded><![CDATA[<p>Heute war ich eine ganze Zeit lang mit <a href="http://blog.morvagor.de">Thomas</a> im Gespräch, wie er seine WordPress-Installation auf eine andere Domain umziehen kann. Im Zuge dessen empfiehlt es sich ja immer, vor allen Änderungen ein Backup seiner Datenbank zu machen. Da einigen anscheinend noch nicht geläufig ist, wie man ein Backup seiner Datenbank macht und diese wiederherstellt, schreibe ich nun ein kleines Tutorial für <a href="http://www.phpmyadmin.net">phpMyAdmin</a> zu diesem Thema. Für kleinere Datenbanken reicht phpMyAdmin vollkommen aus, bei wirklich großen Datenbanken sollte man aber lieber ein anderes Tool wie z.B. den <a href="http://www.mysqldumper.de/">MySQLDumper</a> oder <a href="http://www.mysql.de/products/workbench/">MySQL Workbench</a> verwenden.<span id="more-5084"></span></p>
<p>Zunächst einmal musst du phpMyAdmin aufrufen. Auf der linken Seite wählst du dann die entsprechende Datenbank aus. Oben findest du dann den Menüpunkt <em>Exportieren</em>. Die Voreinstellungen für die Datensicherung sind eigentlich immer vollkommen in Ordnung, sodass man unten rechts einfach auf <em>OK</em> klicken muss, um die SQL-Datei dann abspeichern zu können.</p>
<p>Das Backup kann man auch ehr einfach wieder einspielen. Dazu wählst du die Datenbank aus und löschst zunächst alle Tabellen aus dieser. Danach gehst du oben auf Importieren, wählst die zuvor gespeicherte SQL-Datei aus und klickst unten rechts auf <em>OK</em>. Nach kurzer Zeit solltest du eine Bestätigung über den erfolgreichen Import erhalten. Das Löschen aller Tabellen ist deshalb nötig, da du sonst ggf. alle Datensätze doppelt in der Datenbank haben würdest, was ja unerwünscht ist.</p>
<p>Falls du noch Fragen zu der Datensicherung haben solltest, frag lieber dreimal nach, statt am Ende deine Daten in das Datennirvana zu schicken! <img src='http://www.techspread.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.: Wer seine Datenbanken lieber über die Kommandozeile sichert, sollte sich meinen Artikel <a href="/1356/mysql-datensicherung-best-practice">MySQL-Datensicherung &#8220;Best Practice&#8221;</a> anschauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/5084/mysql-datenbank-sichern-und-wiederherstellen-mit-phpmyadmin/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Webserver unter Windows installieren</title>
		<link>http://www.techspread.de/4297/webserver-unter-windows-installieren</link>
		<comments>http://www.techspread.de/4297/webserver-unter-windows-installieren#comments</comments>
		<pubDate>Wed, 21 Jul 2010 15:24:27 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WAMP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=4297</guid>
		<description><![CDATA[Heute zeige ich euch, wie ihr auf Pakete wie XAMPP verzichten könnt und eure eigene PHP-Entwicklungsumgebung aufsetzt.]]></description>
			<content:encoded><![CDATA[<p>Als Webentwickler bin ich zu Hause auf ein Testsystem angewiesen. Viele Leute empfehlen immer <a href="http://www.apachefriends.org/de/xampp.html">XAMPP</a> als Entwicklungsserver. Aber XAMPP ist zumindest für mich der absolute Graus: man weiß nicht, welche Einstellungen vom &#8220;Standard&#8221; abweichen, häufig zickt XAMPP rum und letztendlich muss man eh noch in der Konfiguration herumpfuschen, damit das System läuft, wie es soll. Ich vertraue da lieber auf meine jahrelang erprobte Eigeninstallation eines <a href="http://de.wikipedia.org/wiki/LAMP#Varianten">WAMP</a>-Servers. Deshalb zeige ich euch heute, wie ich diese Umgebung immer aufsetze.<span id="more-4297"></span></p>
<h2>Pakete herunterladen</h2>
<p>Zunächst einmal musst du folgende Pakete herunterladen:</p>
<ul>
<li><a href="http://httpd.apache.org/download.cgi">Apache Webserver</a><br />
Win32 Binary including OpenSSL</li>
<li><a href="http://www.mysql.de/downloads/mysql/">MySQL-Server</a><br />
in der Essentials-Version, nach Klick auf Download unten auf <em>» No thanks, just take me to the downloads!</em> drücken</li>
<li><a href="http://windows.php.net/download/">PHP</a><br />
unbedingt VC6 x86 Non  Thread Safe / Installer</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/4297/webserver-unter-windows-installieren/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>WordPress-Revisions per Script löschen</title>
		<link>http://www.techspread.de/4023/wordpress-revisions-per-script-loeschen</link>
		<comments>http://www.techspread.de/4023/wordpress-revisions-per-script-loeschen#comments</comments>
		<pubDate>Mon, 05 Jul 2010 21:02:11 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Cronjob]]></category>
		<category><![CDATA[Revision]]></category>
		<category><![CDATA[Script]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=4023</guid>
		<description><![CDATA[Mit diesem Script können die WordPress-Revisionsdaten ganz einfach gelöscht werden. Kombiniert mit einem cronjob hat man so immer eine gepflegte Datenbank.]]></description>
			<content:encoded><![CDATA[<p>WordPress speichert ja bekanntermaßen beim Verfassen und Aktualisieren eines Artikels immer mehrere Revisions zwischen. Zwar kann man dieses Verhalten per config-Datei anpassen oder auch bequem per Script komplett deaktivieren, das kann aber auch Nachteile nach sich ziehen. Deshalb habe ich mir ein kleines Bash-Script geschrieben, das per <a href="http://de.wikipedia.org/wiki/Cron">Cronjob</a> immer Mitternachts ausgeführt wird und die WordPress-Revisions löscht.<span id="more-4023"></span></p>
<pre>mysql -u&lt;Benutzername&gt; -p&lt;Passwort&gt; -e "USE wordpress; DELETE FROM wp_posts WHERE post_type = 'revision';"</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/4023/wordpress-revisions-per-script-loeschen/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Bestimmte Zeilen aus MySQL-Datenbank auslesen</title>
		<link>http://www.techspread.de/3970/bestimmte-zeilen-aus-mysql-datenbank-auslesen</link>
		<comments>http://www.techspread.de/3970/bestimmte-zeilen-aus-mysql-datenbank-auslesen#comments</comments>
		<pubDate>Mon, 05 Jul 2010 13:28:47 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[LIMIT]]></category>
		<category><![CDATA[SELECT]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=3970</guid>
		<description><![CDATA[Wenn man nur ganz bestimmte Zeilen einer MySQL-Datenbank ausgeben möchte, kann man dies mit der alternativen LIMIT-Syntax erreichen.]]></description>
			<content:encoded><![CDATA[<p>Eben hatte ich das Problem, dass mir bei einer MySQL-Datenbank-Sicherung ein Fehler um die Ohren geflogen ist. Der Fehler besagte, dass die Verbindung beim Auslesen einer bestimmten Zeile abgerissen ist. Dementsprechend wollte ich mal nachschauen, was in der Zeile steht. Doch wie gebe ich nur eine ganz bestimmte Zeile aus?<span id="more-3970"></span></p>
<p>Die Lösung dafür ist mehr als einfach. Sicherlich habt ihr schonmal ein LIMIT wie im folgenden Beispiel benutzt:</p>
<pre>SELECT * FROM &lt;Tabelle&gt; LIMIT 10;</pre>
<p>Dieses Statement sorgt dafür, dass euch die ersten 10 Reihen der entsprechenden Tabelle ausgegeben werden. Möchte man allerdings nur ganz bestimmte Zeilen ausgeben, verwendet man eine andere LIMIT-Syntax:</p>
<pre>SELECT * FROM &lt;Tabelle&gt; LIMIT &lt;offset&gt;,&lt;length&gt;</pre>
<p>Möchte man nun zum Beispiel nur die Reihen 13 bis 16 ausgeben, lautet das Statement wie folgt:</p>
<pre>SELECT * FROM &lt;Tabelle&gt; LIMIT 12,4</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/3970/bestimmte-zeilen-aus-mysql-datenbank-auslesen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL root-Passwort zurücksetzen</title>
		<link>http://www.techspread.de/3375/mysql-root-passwort-zuruecksetzen</link>
		<comments>http://www.techspread.de/3375/mysql-root-passwort-zuruecksetzen#comments</comments>
		<pubDate>Thu, 10 Jun 2010 10:18:57 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Passwort]]></category>
		<category><![CDATA[Reset]]></category>
		<category><![CDATA[root]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=3375</guid>
		<description><![CDATA[Heute zeige ich euch, wie ihr in kurzer Zeit euer MySQL root-Passwort zurücksetzen, wenn ihr euer Passwort vergessen oder euch ausgesperrt habt.]]></description>
			<content:encoded><![CDATA[<p>Ab und zu passiert es mal, dass man sein MySQL Root-Passwort vergisst oder dass man sich schlicht und einfach aussperrt. In dem Fall muss man das Passwort für den MySQL Root-Benutzer zurücksetzen. Das kann man ganz einfach in ein paar kurzen Schritten:<span id="more-3375"></span></p>
<p>Zunächst fährst du den MySQL-Server herunter. Danach startest du den MySQL-Server so neu, dass er keine Authentifizierungsdaten abfragt:</p>
<pre>mysqld --skip-grant-tables</pre>
<p>Danach verbindest du dich zum MySQL-Server:</p>
<pre>mysql</pre>
<p>Nun kannst du schnell das Passwort zurücksetzen:</p>
<pre>UPDATE mysql.user SET Password=PASSWORD('&lt;Dein Passwort&gt;') WHERE User='root';
FLUSH PRIVILEGES;</pre>
<p>Bei der ersten Zeile musst du natürlich &lt;Dein Passwort&gt; durch das neu zu vergebende Passwort ersetzen. Danach stoppst du den MySQL-Dienst wieder und startest ihn wie gewohnt neu. Nun kannst du dich mit dem neu vergebenen Passwort am Server anmelden.</p>
<p>Diese Methode ist zwar nicht die sicherste, aber bei weitem die einfachste. Im Zweifelsfall findest du auf der Seite <a href="http://dev.mysql.com/doc/refman/5.1/en/resetting-permissions.html">How to Reset the Root Password</a> aus der MySQL-Dokumentation noch andere sicherere Methoden, um das Root Password zu ändern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/3375/mysql-root-passwort-zuruecksetzen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

