<?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>zer(o_0)ne &#187; mysql</title>
	<atom:link href="http://www.zero0ne.de/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zero0ne.de</link>
	<description>Datenreisender, Cyberpunk, Sysadmin, Console Cowboy ... lebt in der Wired</description>
	<lastBuildDate>Thu, 26 Jan 2012 15:34:06 +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>MySQL Datenbanken kopieren</title>
		<link>http://www.zero0ne.de/2011/08/mysql-datenbanken-kopieren/</link>
		<comments>http://www.zero0ne.de/2011/08/mysql-datenbanken-kopieren/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 16:00:04 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Stuff]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqldump]]></category>

		<guid isPermaLink="false">http://www.zero0ne.de/?p=3240</guid>
		<description><![CDATA[Um eine Datenbank zu kopieren kann man einfacher weise den Befehl „mysqldump“ auf dem lokalen oder remote Datenbankserver verwenden. Dazu loggt man sich z.B. auf dem lokalen Replikat ein. Nun gibt man den Befehl mit folgenden Parametern an. Einige davon sind Optional, wie zum Beispiel „&#8211;ignore-table“. mysqldump -p -q &#8211;skip-extended-insert &#8211;ignore-table=DB.TB -B DB -r DB.sql [...]]]></description>
			<content:encoded><![CDATA[<p align="JUSTIFY">Um eine Datenbank zu kopieren kann man einfacher weise den Befehl „<strong>mysqldump</strong>“ auf dem lokalen oder remote Datenbankserver verwenden. Dazu loggt man sich z.B. auf dem lokalen Replikat ein. Nun gibt man den Befehl mit folgenden Parametern an. Einige davon sind Optional, wie zum Beispiel „<strong>&#8211;ignore-table</strong>“.<span id="more-3240"></span></p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td valign="TOP"><em>mysqldump -p -q &#8211;skip-extended-insert &#8211;ignore-table=DB.TB -B DB -r DB.sql</em></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr valign="TOP">
<td bgcolor="#e6e6e6" height="27"><strong>Parameter</strong></td>
<td bgcolor="#e6e6e6"><strong>Erklärung</strong></td>
</tr>
<tr valign="TOP">
<td width="1344">
<p align="JUSTIFY">-p</p>
</td>
<td width="4823">
<p align="JUSTIFY">Damit wird nach absetzten des Befehls das MySQL-Passwort abgefragt. Man kann das Passwort auch direkt daran schreiben. Zum Beispiel „<strong>-peinPass0wrd</strong>“</p>
</td>
</tr>
<tr valign="TOP">
<td width="1344">
<p align="JUSTIFY">-q</p>
</td>
<td width="4823">
<p align="JUSTIFY">Dieser Parameter dient dem Schnellen Zeilenweisen schreiben der SQL-Datei. Normalerweise werden Zeilen erst immer gepuffert, so jedoch direkt geschrieben. Dies erhöht vor allen bei großen Tabellen die Geschwindigkeit.</p>
</td>
</tr>
<tr valign="TOP">
<td width="1344">
<p align="JUSTIFY">&#8211;skip-extended-insert</p>
</td>
<td width="4823">
<p align="JUSTIFY">Hier mit erzielt man pro Insert eine Zeile. Normalerweise werden Multiple-Insert gemacht, was zu einer Verkleinerung der Datei führt.</p>
</td>
</tr>
<tr valign="TOP">
<td width="1344">
<p align="JUSTIFY">&#8211;ignore-table</p>
</td>
<td width="4823">
<p align="JUSTIFY">Es können auch Tabellen vom Export ausgeschlossen werden. Diese müssen jedoch immer mit Datenbankname davor angegeben werden. Also z.B.: „<strong>&#8211;ignore-table=dbOnline.tbLog</strong>“</p>
</td>
</tr>
<tr valign="TOP">
<td width="1344">
<p align="JUSTIFY">-B</p>
</td>
<td width="4823">
<p align="JUSTIFY">Hiermit wird die Datenbank angegeben welche exportiert werden soll.</p>
</td>
</tr>
<tr valign="TOP">
<td width="1344">
<p align="JUSTIFY">-r</p>
</td>
<td width="4823">
<p align="JUSTIFY">Mit „-r“ lässt sich eine Ausgabedatei definieren, in welche der gesamte Output geschrieben werden soll. Beispielweise „<strong>-r TestDB.sql</strong>“</p>
</td>
</tr>
</tbody>
</table>
<p align="JUSTIFY">Die Ausführung des Befehls kann je nach Größe der Datenbank von einigen Sekunden bei zu mehreren Minuten Dauern. Bei sehr großen Datenbanken auch Stunden. Ist der Vorgang jedoch abgeschlossen, findet man im aktuellen Verzeichnis den Dump. Diesen kann man nun auf den Server kopieren, wo die Datenbank läuft, in welche man den Export importieren möchte. Dies kann man per SCP oder per SFTP machen, wie einem beliebt.</p>
<p align="JUSTIFY">Hat man nun also die Datei kopiert, wechselt man auf die Konsole des Zielservers. Dort geht man dann in das Verzeichnis, in welchem die Datei liegt. Hier nun folgendes Kommando absetzen:</p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td><em>mysql -p &lt; DB.sql</em></td>
</tr>
</tbody>
</table>
<p align="JUSTIFY">Hiermit wird die Datenbank aus der Datei in den MySQL-Server importiert. Zu beachten sei, das Datenbanken gleichen Namens so überschrieben werden. Ist dies erfolgreich abgeschlossen kann man die SQL-Datei löschen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2011/08/mysql-datenbanken-kopieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datenbankreplikation mit MySQL</title>
		<link>http://www.zero0ne.de/2011/08/datenbankreplikation-mit-mysql/</link>
		<comments>http://www.zero0ne.de/2011/08/datenbankreplikation-mit-mysql/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 10:30:36 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Stuff]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqld]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[replikation]]></category>
		<category><![CDATA[slave]]></category>

		<guid isPermaLink="false">http://www.zero0ne.de/?p=3226</guid>
		<description><![CDATA[Bei einer Replikation, werden alle Queries eines sogn. „Master“ an weitere MySQL-Server übertragen. Dabei müssen aber die gleichen Datenbestände zu Grunde liegen. Es gibt verschiedene Strukturen. Hier werden nur die 2 wichtigsten besprochen. Das wären „Master – Slave“ und „Master – Master“. Einfache Replikation: Master – Slave Für eine asynchrone Replikation werden mindestens 2 MySQL-Server [...]]]></description>
			<content:encoded><![CDATA[<p align="JUSTIFY">Bei einer Replikation, werden alle Queries eines sogn. „<strong>Master</strong>“ an weitere MySQL-Server übertragen. Dabei müssen aber die gleichen Datenbestände zu Grunde liegen. Es gibt verschiedene Strukturen. Hier werden nur die 2 wichtigsten besprochen. Das wären „<strong>Master – Slave</strong>“ und „<strong>Master – Master</strong>“.<span id="more-3226"></span></p>
<h3 align="JUSTIFY">Einfache Replikation: Master – Slave</h3>
<p align="JUSTIFY">Für eine asynchrone Replikation werden mindestens 2 MySQL-Server benötigt, von denen einer als Master und mindestens einer als Slave agiert. Bei dieser Art von Replikation schreibt der Master die Updates (alle Statements, die Datensätze verändern) in eine Binärlog-Datei. Diese dient als Datenspeicher, von welchem aus die Informationen über Datenänderungen an die Slave-Server gesendet werden.</p>
<p align="JUSTIFY">Sobald sich ein Slave mit dem Master verbindet, übermittelt dieser die Position der letzten, erfolgreich empfangenen Änderungen, und empfängt daraufhin vom Master alle Updates seit der übermittelten Position. Nachdem der Slave die Änderungen übernommen hat, schaltet er so zu sagen in den Leerlauf und wartet auf die Übermittlung weiterer Änderungen vom Master.</p>
<h3>Konfiguration eines Master</h3>
<p align="JUSTIFY">Für den später einzurichtenden Slave muss man auf dem Master einen Account anlegen. Dies erledigt man mit einen GRANT-Befehl, welcher allgemein dazu da ist Benutzer anzulegen. „<strong>GRANT SUPER,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO ReplikationsUser@slavehost IDENTIFIED BY &#8216;PWD&#8217; ; Flush Privileges;</strong>“. Wobei hier dann „<strong>@slavehost</strong>“ die IP oder der Hostname des Slave ist. Man sollte dann noch in der „<strong>my.cnf</strong>“ nachsehen ob eine „<strong>server-id</strong>“ vergeben ist. Ohne diese geht es nicht. Jeder Server, der an einer Replikation beteiligt ist, braucht eine eindeutige „<strong>server-id</strong>“. Dabei sind nur Zahlen erlaubt. Man sollte dann auch noch einen Verbindungstest durchführen, indem man sich vom Slave aus auf den Master verbindet. „<strong>mysql -h masterhost -u ReplikationsUser -p</strong>“. Sollte diese Verbindung nicht aufgebaut werden können, sollte man beim Master kontrollieren ob in der Konfig evtl. „<strong>bind-address = 127.0.0.1</strong>“ steht oder ob das Passwort richtig gesetzt ist. Im folgenden Schritt erstellt man dann eine Kopie aller zu replizierenden Daten. Im Regelfall ist das meist alles. Dafür sperrt man den kompletten Server mit einer Schreib-Sperre.</p>
<p align="JUSTIFY">„<strong>FLUSH TABLES WITH READLOCK ;</strong>“. Die Konsole in der man dies Kommando eingegeben hat muss für die Dauer der folgenden Vorgänge geöffnet bleiben, da sonst der Readlock erlischt. Um dem Slave die genaue Position und den Namen der Binärlogdatei mitzuteilen, führt man noch folgendes Kommando aus: „<strong>SHOW MASTER STATUS;</strong>“. Die Ausgabe sollte dabei dieser ähneln:</p>
<table width="100%" cellspacing="0" cellpadding="5">
<colgroup>
<col width="64*" />
<col width="64*" />
<col width="64*" />
<col width="64*" /> </colgroup>
<tbody>
<tr valign="TOP">
<td bgcolor="#c0c0c0" width="25%"><strong>File</strong></td>
<td bgcolor="#c0c0c0" width="25%"><strong>Position</strong></td>
<td bgcolor="#c0c0c0" width="25%"><strong>Binlog_Do_DB</strong></td>
<td bgcolor="#c0c0c0" width="25%"><strong>Binlog_Ignore_DB</strong></td>
</tr>
<tr valign="TOP">
<td width="25%">mysqld-bin.000023</td>
<td width="25%">50958306</td>
<td width="25%"></td>
<td width="25%"></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p align="JUSTIFY">[ Mit den letzten beiden Feldern kann man in der „<strong>my.cnf</strong>“ explizit festlegen, welche einzelnen Datenbanken repliziert werden sollen und welche nicht. Dieses sollte man aber im Regelfall nie auf dem Master festlegen. Sondern eher auf dem Slave filtern. Dort kann man auch wieder in der „<strong>my.cnf</strong>“ festlegen was alles repliziert werden soll und was nicht. ]</p>
<p align="JUSTIFY">Man notiert sich nun den Namen des „<strong>binlog</strong>“ und die Position, danach kann man mit dem Kopieren der Daten beginnen. Hat man nur MyISAM-Datenbanken macht man dies am besten auf Dateiebene. „<strong>tar -cvz -f /backup/mysql/snapshot_DATUM.tar.gz /var/lib/mysql</strong>“. Um die DB nicht all zu lange zu sperren kann man auch erst nur die Daten kopieren und dann später komprimieren. Ist man dann fertig, kann man sich aus der MySQL-Konsole ausloggen und somit die Sperre wieder aufheben.</p>
<h3>Konfiguration eines Slave</h3>
<p align="JUSTIFY">Die MySQL-Version auf dem Slave sollte mindestens der des Masters entsprechen. Sie darf neuer sein, aber nicht älter. Auf dem Slave stoppt man dann erstmal den laufenden MySQL-Server und editiert die „my.cnf“. Dort setzt man auch wieder die Variablen für die Server-ID. Zu beachten ist hier nur, dass die Server-ID sich von der des Masters und aller bestehenden Slaves unterscheiden muss. Will man, das dieser Slave noch Master für weitere untergeordnete Slaves ist, muss man auch darauf achten das hier das binlog aktiviert ist. Hat man dann die Daten, welche man auf dem Master kopiert hat übertragen, kopiert man diese auf dem Slave nach „<strong>/var/lib/mysql</strong>“. Zu beachten sei, das man sich nicht die Datenbank „<strong>mysql</strong>“ überschreibt. Diese sollte man auch in der „my.cnf“ von der Replikation ausnehmen. Dies macht man mit den Optionen:</p>
<p><code>replicate-ignore-db= mysql<br />
replicate-wild-ignore-table = mysql.%</code></p>
<p align="JUSTIFY">Hat man dann die Daten kopiert, kontrolliert man noch mal, ob alle Dateien unterhalb von „<strong>/var/lib/mysql</strong>“ auch dem Benutzer und der Gruppe „<strong>mysql</strong>“ gehören. Jetzt kann man den MySQL-Server wieder starten. Um nun die Replikation zu aktiveren müssen wir dem Slave noch mitteilen, wer der Master ist und an welcher Stelle im binlog er anfangen soll zu lesen. Dies macht man mit dem „<strong>CHANGE MASTER</strong>“ Kommando:</p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td><code>CHANGE MASTER TO<br />
MASTER_HOST = 'master_host',<br />
MASTER_USER = 'ReplikationsUser',<br />
MASTER_PASSWORD = 'PWD',<br />
MASTER_LOG_FILE = 'log file name',<br />
MASTER_LOG_POS = log_offset;</code></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p align="JUSTIFY">Wurde das Statement erfolgreich ausgeführt, wurden alle Änderungen übernommen und der Slave ist soweit bereit die Replikation zu starten. Gestartet wird dann einfach mit „<strong>SLAVE START;</strong>“ (gestoppt mit „<strong>SLAVE STOP;</strong>“). Nach dem Start sollte man mit „<strong>SHOW SLAVE STATUS;</strong>“ den Status der Replikation überprüfen. Steht „<strong>Slave_IO_Running</strong>“ auf „<strong>Yes</strong>“ läuft die Replikation. Dann ist immer noch der Wert „<strong>Seconds_Behind_Master</strong>“ interessant. Er gibt an, wie viel der Slave dem Master hinterher hängt. Am Anfang steht hier eine mehr oder weniger große Zahl, in endlicher Zeit sollte hier dann aber nur noch „0“ stehen. Steht dort „<strong>NULL</strong>“ gibt es ein Problem mit der Replikation, dann ist aber auch „<strong>Slave_IO_Running</strong>“ meisten auf „<strong>No</strong>“. Unter „<strong>Last_Error</strong>“ kann man dann noch nachlesen, wieso es zu einer Unterbrechung kam.</p>
<p align="JUSTIFY"><a href="http://www.zero0ne.de/blog/wp-content/uploads/2011/08/master-slave.png"><img class="aligncenter size-medium wp-image-3228" title="master-slave" src="http://www.zero0ne.de/blog/wp-content/uploads/2011/08/master-slave-300x120.png" alt="" width="300" height="120" /></a></p>
<h3></h3>
<h2>Reparieren der Replikation</h2>
<p align="JUSTIFY">Sollte die Replikation einmal unterbrochen werden, sollte man mit „<strong>slave stop</strong>“ erst mal den Replikations Prozess beenden. Mit „<strong>slave show status\G</strong>“ kann man sich dann den Status ausgeben lassen. Hierbei sollte man jetzt auf die Zeile „<strong>Last_Error</strong>:“ achten. Die dort ausgegebene Fehlermeldung sollte man nun genauer untersuchen und versuchen festzustellen warum es zu diesen Fehler kam. Hat man diesen dann beseitigt kann man mit „<strong>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;</strong>“ MySQL anweisen, dieses Query zu überspringen. Anschließend kann man mit „<strong>slave start</strong>“ die Replikation wieder starten. Wenn alles gut läuft und dies der einzigste Fehler war, müsste diese nun auch wieder laufen.</p>
<h2>Master – Master</h2>
<p align="JUSTIFY">Bei einer Master-Master-Replikation, gibt es, wie der Name schon sagt, 2 Master. Beide sind sich gegenseitig aber noch Slave. Sodas Änderungen auf einen Master direkt auch auf dem 2. Verfügbar sind und umgekehrt. Bei Master Slave kommen Update immer nur von einer Seite, vom Master. Hier kann jeder der beiden Änderungen machen. Dies führt natürlich auch zu Probleme. Was ist, wenn beide den gleichen Datensatz Ändern wollen? Deswegen muss man hier sehr auf die Daten-Integrität achten und am besten immer nur einen der Beiden Master schreiben lassen.</p>
<h2>Aufbau einer Master-Master-Replikation</h2>
<p align="JUSTIFY">Es muss hier auch wieder auf beiden Server von den Gleichen Daten ausgegangen werden. Auf beiden das „<strong>binlog</strong>“ aktiviert sein. Dann kann man auf beiden jeweils einen Slave-Prozess einrichten, welcher den anderen Als Master nimmt.</p>
<p align="JUSTIFY"><a href="http://www.zero0ne.de/blog/wp-content/uploads/2011/08/master-master.png"><img class="aligncenter size-medium wp-image-3237" title="master-master" src="http://www.zero0ne.de/blog/wp-content/uploads/2011/08/master-master-300x120.png" alt="" width="300" height="120" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2011/08/datenbankreplikation-mit-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLd &#8211; Datenbankserver</title>
		<link>http://www.zero0ne.de/2011/08/mysqld-datenbankserver/</link>
		<comments>http://www.zero0ne.de/2011/08/mysqld-datenbankserver/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 10:30:03 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Stuff]]></category>
		<category><![CDATA[datenbank]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqld]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.zero0ne.de/?p=3212</guid>
		<description><![CDATA[Allgemeines Der Aufbau von MySQL ist recht Simple. Die einzige Konfigurationsdatei liegt in „/etc/mysql/“ und heißt „my.cnf“. Hier lassen sich nun die verschiedenen Laufzeitoptionen von MySQL einstellen. Zum Beispiel auf welchen Port und welchen Interface es laufen soll. Aber auch wieviel Puffer und Speicher MySQL verwenden soll. Die eigentlichen Daten von MySQL werden dann in [...]]]></description>
			<content:encoded><![CDATA[<h2>Allgemeines</h2>
<p align="JUSTIFY">Der Aufbau von MySQL ist recht Simple. Die einzige Konfigurationsdatei liegt in „<strong>/etc/mysql/</strong>“ und heißt „<strong>my.cnf</strong>“. Hier lassen sich nun die verschiedenen Laufzeitoptionen von MySQL einstellen. Zum Beispiel auf welchen Port und welchen Interface es laufen soll. Aber auch wieviel Puffer und Speicher MySQL verwenden soll. Die eigentlichen Daten von MySQL werden dann in „<strong>/var/lib/mysql</strong>“ gespeichert. Das Rechte-Management von MySQL wird über eine MySQL-Datenbank mit dem Namen „<strong>mysql</strong>“ gesteuert.<img title="Weiterlesen..." src="http://twitter.zero0ne.de/blog/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><span id="more-3212"></span></p>
<h2>„my.cnf“</h2>
<p align="JUSTIFY">Die „<strong>my.cnf</strong>“ ist in mehrere Teil gegliedert. Jeder Teilbereich wird durch den Namen eckige Klammer abgegrenzt. Der wirklich wichtige Bereich ist „<strong>[mysqld]</strong>“. Dort stehen die Optionen welche für den MySQL-Prozess wichtig sind. Hier man eine gute Grundkonfiguration:</p>
<h2>Server Basics</h2>
<p align="JUSTIFY">Am Anfang sollte man immer Grundlegende Dinge festlegen. Wie z.B. den Buntzer, unter welchen MySQL laufen soll. Soll es an eine IP gebunden werden? Welcher Port verwendet werden soll. Wichtig für die Replikation ist dann auch immer eine eindeutige „<strong>server-id</strong>“. Oft ist es auch sinnvoll „<strong>Selects</strong>“ eine höhere Priorität zu geben. „<strong>skip-locking</strong>“ sollte auf jeden Fall aktiviert sein, da sonst die Performance massiv einbrechen kann. Ohne diese Option werden recht rechenintensive Methoden verwendet, Tabellen von der Festplatte zu lesen.</p>
<p>&nbsp;</p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr>
<th>Grundconfiguration</th>
</tr>
<tr>
<td><code>user = mysql<br />
bind-address = 10.10.10.10<br />
port = 3306<br />
server-id = 40<br />
low_priority_updates = 1<br />
skip-locking</code></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>Server Verzeichnisse und Logdateien</h2>
<p align="JUSTIFY">Im weiteren Verlauf der Konfig werde meist noch mehrere Verzeichnisse und Log-Dateien definiert. Diese sind selbsterklärend. Einzig auf das „<strong>bin-log</strong>“ sollte man genau achten, da darüber die Replikation abläuft. „<strong>datadir</strong>“ ist, wo die Tabellen auf der Festplatte abgelegt werden.</p>
<p>&nbsp;</p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr>
<th>weitere Grundkonifguration</th>
</tr>
<tr>
<td><code>socket = /var/run/mysqld/mysqld.sockpid-file = /var/run/mysqld/mysqld.pid<br />
log-bin = /var/log/mysql/master-blog<br />
log-error = /var/log/mysql/mysqld.err<br />
log-queries-not-using-indexes = /var/log/mysql/q-n-u-i.log<br />
log-slow-queries = /var/log/mysql/slow-q.log<br />
basedir = /usr<br />
datadir = /var/lib/mysql<br />
tmpdir = /tmp</code></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>Puffer und Caches</h2>
<p align="JUSTIFY">MySQL hat verschiedene Cache-Funktionen und Puffer. Manche sind nur auf Verbindungsebene aktive, wieder andere serverweit. Aber es geht auch, das man auf seiner Verbindung den Cache/Puffer neu definiert und so den Serverweiten überschreibt, für seine Verbindung. Cache und Puffer kann man nie pauschal festlegen. Sie müssen auf die jeweiligen Anwendungen angepasst werden, welche mit der Datenbank arbeiten sollen.</p>
<p>&nbsp;</p>
<table cellspacing="0" cellpadding="5">
<tbody>
<tr>
<th>Detailkonfiguration</th>
</tr>
<tr>
<td><code>max_connections = 350open_files_limit = 3600<br />
long_query_time = 5<br />
thread_cache_size = 200<br />
query_cache_size = 96M<br />
query_cache_limit = 5M<br />
table_cache = 4200<br />
max_heap_table_size = 64M<br />
tmp_table_size = 32M<br />
read_buffer_size = 512k<br />
key_buffer_size = 4500M<br />
read_rnd_buffer_size = 8M<br />
join_buffer_size = 1M<br />
sort_buffer_size = 1M</code></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Bei „<strong>max_connections</strong>“ handelt es sich um die Anzahl der offenen Verbindungen, oder eingeloggten Benutzer wenn man so will.</p>
<p>„<strong>open_files_limit</strong>“ gibt an, wieviele Dateien der MySQL-Prozess gleichzeitig öffnen darf.</p>
<p>„<strong>long_query_time</strong>“ wird in Sekunden angegeben. Es definiert ab welcher laufzeit ein Query als „slow query“ eingestuft wird.</p>
<p>„<strong>thread_cache_size</strong>“ gibt die Anzahl der Threads an, welche zurückgehalten werden.</p>
<p>„<strong>query_cache_szie</strong>“ legt die Größe des Speichers für SELECT-Querys fest.</p>
<p>„<strong>query_cache_limit</strong>“ besagt, das Querys, welche größer als das Limit sind, nicht gecached werden sollen.</p>
<p>„<strong>table_cache</strong>“ gibt die Anzahl an Tabellen vor, welche im Speicher gehalten werden sollen.</p>
<p>„<strong>max_heap_table_size</strong>“ gibt an, wie groß eine Tabellen sein darf, welche temporär im RAM erzeugt wird.</p>
<p>„<strong>tmp_table_size</strong>“ legt die gesamt Größe des Tabellen-Cache fest.</p>
<p>„<strong>read_buffer_size</strong>“ ist für das sequenzielle auslesen von Tabellen zuständig. Werte größer als 512 KB bringen kaum mehr Performance.</p>
<p>„<strong>key_buffer_size</strong>“ legt die Größe des Speichers für die MyISAM Key-Files der Tabellen fest. Man sollte möglichst versuchen viel davon im Speicher zu haben.</p>
<p>„<strong>read_rnd_buffer_size</strong>“ ist für nicht-sequenzielle und parallele Zugriffe auf Tabellen zuständig.</p>
<p>„<strong>join_buffer_size</strong>“, wie der Name schon da, um bei „joins“ zwischen zu speichern.</p>
<p>„<strong>sort_buffer_size</strong>“, beim Sortieren ist dieser Puffer wichtig.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2011/08/mysqld-datenbankserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MAMP &#8211; XAMPP für den Mac</title>
		<link>http://www.zero0ne.de/2009/11/mamp-xampp-fuer-den-mac/</link>
		<comments>http://www.zero0ne.de/2009/11/mamp-xampp-fuer-den-mac/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 15:42:01 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[mamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php4]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[xampp]]></category>

		<guid isPermaLink="false">http://www.zero0ne.de/?p=1157</guid>
		<description><![CDATA[Immer wieder gut wenn man PHP/MYSQL oder auch Java Sachen auf seinen Mac entwickeln will und dazu einen einfachen weg sucht sich nen Apache- und MySQL-Server zu installieren. MAMP macht das in der gewohnt einfachen Art von XAMPP. Man lädt sich einfach das Package  von der MAMP Seite herunter ( Link ). In gewohnt einfacher [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Immer wieder gut wenn man PHP/MYSQL oder auch Java Sachen auf seinen Mac entwickeln will und dazu einen einfachen weg sucht sich nen Apache- und MySQL-Server zu installieren. MAMP macht das in der gewohnt einfachen Art von XAMPP. Man lädt sich einfach das Package  von der MAMP Seite herunter ( <a title="MAMP" href="http://www.mamp.info/" target="_blank">Link</a> ). In gewohnt einfacher art lässt es sich einfach durch ziehen in den Programme-Ordner installieren. Zu beachten sie, das man das normal MAMP nimmt und nicht die Pro-Version. Dies ist nur gegen Geld zu verwendet, hat aber anfangs eine zwei wöchige Trial. Und eigentlich reicht auch die normale Version. Die Pro bringt nur kleine unwesentlich Gimmicks mit sich, wie DynDNS integration oder einen Config-Editor. Für den Durchschnittsentwickler also kaum interessant.<span id="more-1157"></span></p>
<p><a href="http://www.zero0ne.de/wordpress/wp-content/uploads/mampinstall.png"><img class="aligncenter size-thumbnail wp-image-1158" title="mampinstall" src="http://www.zero0ne.de/wordpress/wp-content/uploads/mampinstall-150x150.png" alt="mampinstall" width="150" height="150" /></a></p>
<p style="text-align: center;">Installationsdialog von MAMP</p>
<p style="text-align: justify;">Nachdem man es nun installiert hat kann man es einfach starten. Danach fragt es sofort, auch wenn man die normale Version genommen hat, ob man nicht die Pro-Version nehmen mag. Dies verneint man dann und kommt ins normal kleine Interface von MAMP. Gleichzeitig öffnet sich auch noch ein Browser-Fenster in dem die &#8220;Weboberfläche&#8221; von MAMP öffnet. Hier hat man einmal die PHPInfo-Informationen und einen phpMyAdmin, sowie einige allgemeine Informationen.</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://www.zero0ne.de/wordpress/wp-content/uploads/mampinterface.png"><img class="aligncenter size-thumbnail wp-image-1159" title="mampinterface" src="http://www.zero0ne.de/wordpress/wp-content/uploads/mampinterface-150x150.png" alt="mampinterface" width="150" height="150" /></a></p>
<p style="text-align: center;">MAMP Interface</p>
<p style="text-align: justify;">Hier in dem Interface kann man nun die Server starten und beenden. Einige wenige Grundeinstellungen können noch unter &#8220;Einstellungen&#8230;&#8221; getroffen werden. Wie z.B. ob die Server beim starten sofort gestartet werden sollen und ob beim starten gefragt werden soll, ob man nicht doch die Pro-Version haben mag. Weiterhin können die Ports, auf welchen die Server laufen sollen, eingestellt werden. Sowie kann man die PHP-Version einstellen und definieren wo das Documentroot des Apache sein soll.</p>
<p style="text-align: left;"><a style="text-decoration: none;" href="http://www.zero0ne.de/wordpress/wp-content/uploads/mampoptionen.png"><img class="aligncenter size-medium wp-image-1160" title="mampoptionen" src="http://www.zero0ne.de/wordpress/wp-content/uploads/mampoptionen-300x214.png" alt="mampoptionen" width="300" height="214" /></a></p>
<p style="text-align: center;">Optionen von MAMP</p>
<p style="text-align: justify;">Und wenn die Server dann von allein starten und durch manuelles klicken auf &#8220;Server starten&#8221; ist man auch schon fertig. Unter &#8220;localhost:8888&#8243; ist der Apache zu erreichen und über &#8220;localhost:8889&#8243; der MySQL-Server. Hat man die aufgegangen Weboberfläche von MAMP geschlossen kann man diese durch klicken auf &#8220;Startseite öffnen&#8221; wieder holen.</p>
<p style="text-align: left;">So, das wärs dann also&#8230;.</p>
<p style="text-align: left;">Hier noch eine Auflistung des kompletten inhalts von MAMP:</p>
<p style="text-align: left;">&nbsp;</p>
<li style="padding-left: 60px;">Apache 2.0.63</li>
<li style="padding-left: 60px;">MySQL 5.1.37</li>
<li style="padding-left: 60px;">PHP 4.4.9 &amp; 5.2.10</li>
<li style="padding-left: 60px;">APC 3.0.19 &amp; APC 3.1.2</li>
<li style="padding-left: 60px;">eAccelerator 0.9.5.3</li>
<li style="padding-left: 60px;">XCache 1.2.2</li>
<li style="padding-left: 60px;">phpMyAdmin 2.11.9.5 &amp; phpMyAdmin 3.2.0.1</li>
<li style="padding-left: 60px;">Zend Optimizer 3.3.3</li>
<li style="padding-left: 60px;">SQLiteManager 1.2.0</li>
<li style="padding-left: 60px;">Freetype 2.3.9</li>
<li style="padding-left: 60px;">t1lib 5.1.2</li>
<li style="padding-left: 60px;">curl 7.19.5</li>
<li style="padding-left: 60px;">jpeg 7</li>
<li style="padding-left: 60px;">libpng-1.2.38</li>
<li style="padding-left: 60px;">gd 2.0.34</li>
<li style="padding-left: 60px;">libxml 2.7.3</li>
<li style="padding-left: 60px;">libxslt 1.1.24</li>
<li style="padding-left: 60px;">gettext 0.17</li>
<li style="padding-left: 60px;">libidn 1.15</li>
<li style="padding-left: 60px;">iconv 1.13</li>
<li style="padding-left: 60px;">mcrypt 2.5.8</li>
<li style="padding-left: 60px;">YAZ 3.0.47 &amp; PHP/YAZ 1.0.14</li>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2009/11/mamp-xampp-fuer-den-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Nacht der lebenden Server &#8230;</title>
		<link>http://www.zero0ne.de/2008/12/die-nacht-der-lebenden-server/</link>
		<comments>http://www.zero0ne.de/2008/12/die-nacht-der-lebenden-server/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 19:05:12 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[amavis]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[awstats]]></category>
		<category><![CDATA[cacti]]></category>
		<category><![CDATA[clamav]]></category>
		<category><![CDATA[courier]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[openfire]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[pop3]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.zero0ne.de/?p=198</guid>
		<description><![CDATA[So gestern dann mal wieder an mein Projekt eines selbkompilierten Servers. Naja, nur Apache, PHP, MySQL sind wirklich selbstkompiliert. Dann kommt noch eine angepasste Version von Postfox dazu. Dann noch ein wenig IMAP und POP3, sowie ein Virenfilter dazu und fertig. Das ganze läuft im Rahmen einer Serveraktualisierung von <a title="www.dunkel-volk.de" href="http://www.dunkel-volk.de" target="_self">www.dunkel-volk.de</a>.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">So gestern dann mal wieder an mein Projekt eines selbkompilierten Servers. Naja, nur Apache, PHP, MySQL sind wirklich selbstkompiliert. Dann kommt noch eine angepasste Version von Postfox dazu. Dann noch ein wenig IMAP und POP3, sowie ein Virenfilter dazu und fertig. Das ganze läuft im Rahmen einer Serveraktualisierung von <a title="www.dunkel-volk.de" href="http://www.dunkel-volk.de" target="_blank">www.dunkel-volk.de</a>.<br />
<span id="more-198"></span><br />
Das ganze bereite eine Freund und ich nun schon ein paar Monate vor. Irgendwie fehlte wohl immer so richtig die Zeit. Es ist ja nicht so das wir das ganze von Hand installieren, so nach und nach. Nein, es soll alles gescripted ablaufen. So das wir so gut wie nichts mehr machen müssen. Also haben wir uns da eine kleine Scriptsammlung zusammen geschrieben und anhand einiger Tutorials, welche auf  binär-Paketen setzen, die Lücken aufgefüllt.<br />
Angefangen haben wir mit einen frisch installierten Debian 4.0. Dann noch so die Grundlagen wie SSH und MC oder mal hier und da die ein oder andere Bibliothek und den ganzen Kram zum Kompilieren noch. Gefolgt davon dann die Quellen von Apache, MySQL und PHP. Diese konnten wir jetzt speziell an unsere Bedürfnisse anpassen und so auch die aktuellsten Versionen nehmen. Wo das dann alles fertig war, dachten wir uns, nen eigener Mail server sei ja auch nicht schlecht. Der jetzige den wir haben ist nicht wirklich kontrollierbar und es gibt massig SPAM. Also wollten wir das besser machen ;-) Da ich mir zuvor schon für mich und die Arbeit ein Postfix-Buch gekauft habe, war das ja perfekt zum üben und Erfahrungen sammeln. Also haben wir dann zu den drei bestehenden Server-Programmen noch Postfix, Courier, Spammassin, Amavis/Clamav hinzugefügt. Diese haben wir aller dings aus dem repository von Debian genommen. Ausser Postfix, dies haben wir zwar auch aus dem Repository genommen, dann aber mit der Source-Version überspielt, welche vorher gepatcht wurde. Das ist es dann also, ist ja nicht all zu viel denkt man. Da kann man sich aber gewaltig irren, weil es noch sehr sehr viele kleine ecken und kanten gab, an welchen man etwas nachbessern musste, oder wo etwas nicht so klappte wie man sich das eigentlich dachte.</p>
<p style="text-align: justify;">Gestern haben wir uns dann mal einen VServer erstellt, also ne VM die ich bereit stellte und darauf eine Domain geschalten. Dann alles nach und nach installiert. Eigentlich sollten wir ja nicht soviel eingreifen müssen, da wir ja viele scripte vorbereitet hatten. Dies war aber ein Irrtum. Das meiste lief ganz gut durch, also Apache, MySQL und PHP. Postfix ging auch ganz gut durch. Doch dann die Konfiguration davon. Da gab es dann doch das ein oder andere Problem, was isch dann aber auch lösen lies. Meist waren es kleine Fehler mit grossen Auswirkungen wie eben falsche Dateiberechtigungen oder Datenbankberechtigungen. Eines der Grösseren Probleme war, das die ClamAV Version von Debian wohl einen Tick hat und in der Konfiguration, so wie ich sie hier hatte, nicht richtig funktionierte. Nach ein wenig Recherche im Netz fand ich dann aber einen passenden Workaround.<br />
So gegen 23 Uhr war dann alles soweit erstmal bereit das es lief. Also ein Webserver mit PHP und MySQL support, MySQL an sich und eine Mailserverkonstrukt, was Emails empfangen und verenden kann. Wir hatten um 12:00 Uhr Mittags angefangen. Naja, mal ne grössere Pause zum einkaufen und noch eine weitere zum essen. Was jetzt dann noch fehlte waren so Kleinigkeiten wie die Richtige Verschlüsselung der Mails und Statistik tools wie AwStats und Cacti. Auch sollte noch ein Jabber-Server hinzukommen. Dies haben wir dann noch bis 4 Uhr morgens implementiert. Als Jabber Server hatten wir uns dann für OpenFire entschieden, aufgrund der GUI. Is ja für Mausschubser, aber falls eben mal kein Admin zu Hand ist, das die auch mal ein wenig was regeln können. Dann noch als Test für den Webserver und PHP sowie MySQL noch eben ein kleines WordPress aufgesetzt um zu sehen  ob das läuft.</p>
<p>Ich werde dann mal Demnächst die Final Version der Script-Sammlung hier noch veröffentlichen.</p>
<p>hier dann noch ein paar quellen:</p>
<p><a href="http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.10" target="_blank">HowtoForge Tutorial für einen Mail Server</a></p>
<p><a href="http://workaround.org/articles/ispmail-etch/" target="_blank">Workaround Tutorial für einen Mail Server</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2008/12/die-nacht-der-lebenden-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Updates&#8230;</title>
		<link>http://www.zero0ne.de/2008/11/updates/</link>
		<comments>http://www.zero0ne.de/2008/11/updates/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 14:02:09 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bilder]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[schreiben]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripten]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://www.zero0ne.de/?p=167</guid>
		<description><![CDATA[So, hab einige kleine Änderungen an der Seite vorgenommen&#8230; Hab unter &#8220;about me&#8221; zwei Bilder aktualisiert und unter Hardware endlich mal mein MacBook ein gepflegt. Weiterhin gab&#8217;s dann noch ein kleines Design-Update und ein paar neue Artikel auch gleich noch.  Vllt schaff ich es ja wieder mal öfter was zu schreiben, auf Arbeit sammeln sich [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">So, hab einige kleine Änderungen an der Seite vorgenommen&#8230; Hab unter &#8220;about me&#8221; zwei Bilder aktualisiert und unter Hardware endlich mal mein MacBook ein gepflegt. Weiterhin gab&#8217;s dann noch ein kleines Design-Update und ein paar neue Artikel auch gleich noch. <br />
Vllt schaff ich es ja wieder mal öfter was zu schreiben, auf Arbeit sammeln sich jedenfalls immer genug Themen an. Doch komm ich irgendwie nie dazu darüber zu schreiben, mag es Zeitmangel oder pure Faulheit sein.<br />
Ein Thema wäre auch mal, mein seit langen geführtes Projekt Apache+MySQL+PHP+Postfix aus den Quellen zu kompilieren. Das ganze dann automatisiert per Script auf Debianbasis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2008/11/updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>compiling the weekend&#8230;</title>
		<link>http://www.zero0ne.de/2008/05/compiling-the-weekend/</link>
		<comments>http://www.zero0ne.de/2008/05/compiling-the-weekend/#comments</comments>
		<pubDate>Sun, 25 May 2008 21:26:45 +0000</pubDate>
		<dc:creator>zer(o_0)ne</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[compiling]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[kompilieren]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://www.alex23.de/wordpress/?p=118</guid>
		<description><![CDATA[von freitag abend bis samstag abend hab ich mich mit einen freund zusammen durch apache, mysql und php, sowie perl gekämpft. Erst haben wir uns apache vorgenommen. Geguckt wie wir das am besten kompilieren können. also welche optionen es alles gibt. Dann geguckt wies durch läuft und alles protokolliert. Danach war mysql dran, auch wieder [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">von freitag abend bis samstag abend hab ich mich mit einen freund zusammen durch apache, mysql und php, sowie perl gekämpft. Erst haben wir uns apache vorgenommen. Geguckt wie wir das am besten kompilieren können. also welche optionen es alles gibt. Dann geguckt wies durch läuft und alles protokolliert. Danach war mysql dran, auch wieder nach geschaut, welche optionen am sinnvollsten wären und wie es beim kompilieren durch läuft. alles protokolliert. Dann kam php und perl. Das selbe. kompilieren und alles protokollieren. Anschliessend haben wir alles zusammen in ein script gepackt und noch verschiedenen anpassungen vorgenommen. Am schluss hatten wir ein script was uns am stück alles runterläd, auspackt, konfiguriert, kompiliert und installiert. Jetzt überdenken wir noch mal die konfiguration und suchen nach verbesserungen&#8230; wir bauen uns unser eigenes lamp/xampp &#8230; dann unsere eigene distri und danach reissen wir die weltherrschaft an uns&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zero0ne.de/2008/05/compiling-the-weekend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

