Es kommt leider vor, dass man umziehen muss oder möchte - aus welchen Gründen auch immer.
Um dies ohne großen Ärger zu bewerkstelligen wird im folgenden eine kleine Anleitung Schritt für Schritt hinterlegt. Außerdem gehe ich auf bekannte Probleme ein und stelle einige Lösungen bereit.
Achtung: Bitte erst lesen und dann loslegen, keine Garantie auf zerstörte Daten! Sicherung anlegen!
- Zu erstes erst einmal einen neues Blog auf dem neuen Webspace installieren. Die folgenden Schritte importieren/ überschreiben dann die Daten in die bestehenden Tabellen.
- Als nächstes müssen wir die bestehenden Daten aus der „alten“ Datenbank exportieren. Dazu kann man das Plugin WP DatabaseBackup nutzen, oder den Export mit Hilfe eines mySQL-Tools bewerkstelligen. Im weiteren arbeite ich dabei mit phpMyAdmin, welches ein Freeware-Tool ist und von vielen Hosting-Providern angeboten wird.
- Den Export der Datenbank erläutere ich im Artikel „Datenbank Backup mit phpMyAdmin“ genauer. Da gibt es auch entsprechende Screenshots und nötige Erklärungen.
- Nun haben die Daten als SQL-Datei lokal vorliegen. Nun müssen wir die Daten in die neue Datenbank importieren und dabei gibt es nun eventuelle Probleme.
- Wenn nun das neue Blog auf dem neuen Webspace installiert ist, müssen wir die Daten importieren. Dazu ist es wichtig, dass ihr den Präfix kennt, der in der
config.php von WP steht. Im Normalfall ist dies wp_ (Bsp.: wp_post2cat oder wordpress_post2cat). Solltet ihr diesen verändert haben bzw. sollte sich der Präfix eures alten Blogs vom neuen unterscheiden, so müssen in der SQL-Datei die Daten verändert ist. Dazu eignet sich jeder bessere Editor - zum Beispiel Notepad++, mit dem wir nun nach dem alten Präfix suchen und mit dem neuen ersetzen. Damit sollte selbst eine große SQL-Datei schnell verändert sein.
Sucht mit dem Editor nach
`ALTER_PRÄFIX_
und ersetzt es mit dem neuen Präfix.
- Im weiteren kann es zu Problemen kommen, wenn die Datei zu groß ist. Das ist vorallem dann so, wenn Statistik-Plugins laufen und alles mögliche in der DB ablegen. Überlegt also im Gegenzug, was ihr für Daten benötigt - muss wirklich alles rein. Das ist von Provider zu Provider unterschiedlich, aber in der Regel kann man nie mehr als 1MByte an Daten importieren. Das führt nun dazu, dass wir die Datei, falls sie größer ist, aufspalten müssen. Dazu laden wir die SQL-Datei wieder in unseren Editor des Vertrauens und splitten an folgenden Punkten, so dass wir am Ende mehrere Dateien haben, die die max. erlaubte Größe nicht überschreiten.
Beispiel für Tabelle post2cat:
--
-- Tabellenstruktur für Tabelle `wp_post2cat`
--
DROP TABLE IF EXISTS `wp_post2cat`;
CREATE TABLE `wp_post2cat` (
`rel_id` bigint(20) NOT NULL auto_increment,
`post_id` bigint(20) NOT NULL default '0',
`category_id` bigint(20) NOT NULL default '0',
PRIMARY KEY (`rel_id`),
KEY `post_id` (`post_id`,`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=13 ;
--
-- Daten für Tabelle `wp_post2cat`
--
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (1, 1, 1);
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (5, 6, 1);
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (3, 4, 1);
...
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (11, 12, 1);
-- --------------------------------------------------------
Nun heißt es also die Tabellen in eigene Dateien zu legen, wie im obigen Beispiel zu sehen ist, endet jeder Datensatz immer mit
-- --------------------------------------------------------
Danach folgt die nächste Tabelle und die zugehörigen Daten.
Wichtig: legt vorher eine Sicherung der Originaldatei an!
- Nun werden die Daten in die neue Datenbank importiert. Auch dazu nutze ich im folgenden phpMyAdmin. Wer bei seinem Hoster dieses Tool nicht zur Verfügung hat, der kann es auch in seinem Webspace selber einrichten, aber aufpassen - mit einem Passwort schützen!
Wenn der Link „Importieren“ zur Verfügung steht, dann kann man damit direkt die Datei wählen und alles andere macht phpMyAdmin.

Sollte diese Möglichkeit nicht bestehen, dann gehen wir über „SQL“, ganz oben in den Tabs.
- Wenn man nun mit SQl arbeiten muss, so müssen die Anweisungen aus dem SQL-File per Copy (Strg+C)/Paste (Strg+V) in das Fenster von phpMyAdmin übertragen werden und OK klicken.
- Nachdem man alle Daten in die neue Datenbank importiert hat, gehen wir in das Blog zurück und schauen mal, ob alles vorhanden ist und ohne Probleme läuft.
weitere Probleme:
Unter anderem kann es zu Problemen mit Sonderzeichen kommen, heist wir sehen in der Ausgabe kein Ü sondern kryptische Zeichen. Die können wir mit einem kleinen Script beheben. Sollen alle Tabellen in der Datenbank durchforstet werden und alle Sonderzeichen sollen UTF-8 codiert sein, so ist das Script content encoding zu empfehlen.
Die Mime-Deklarierung eures Blogs findet ihr bei WP unter Einstellungen --> Lesen - UTF-8 ist Standard und auch zu empfehlen.
Will man nur einzelne Tabellen durchforsten und gegebenfalls die Zeichen ändern, so kann der folgende Code genutzt werden - Kopieren, in einer php-Datei speichern und in den Ordner wp-content des Blogs kopieren, oder downloaden.
Die Datei dann über den Browser aufrufen. Die Datei für jede Tabelle anpassen.
<?php
/**************************************************
Convert WP Content encoding
BASISSCRIPT: Markus Tacker <m@tacker.org>
Modified: Frank Bueltge <bueltge.de>
***************************************************/
// New coding
$new_encoding = 'UTF-8';
// WordPress config
require_once '../wp-config.php';
// Connect DB
$DBC = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME, $DBC);
$table = $wpdb->prefix.'comments';
echo '<pre>';
$result_data = mysql_query('SELECT * FROM ' . $table);
echo $table . ' ';
while ($data = mysql_fetch_assoc($result_data)) {
$sql = 'UPDATE ' . $table;
// Build set
$set = array();
foreach ($data as $key => $val) {
$set[] = ek($key) . '=' . ev(mb_convert_encoding($data[$key], $new_encoding));
}
$sql .= ' SET ' . join(', ', $set);
// Build where
$where = array();
foreach ($data as $key => $val) {
if (!preg_match('/[0-9]+/', $val)) continue; // Use only numbers in where
$where[] = ek($key) . '=' . ev($data[$key]);
}
$sql .= ' WHERE ' . join(' AND ', $where);
$query_result = mysql_query($sql, $DBC);
if (!$query_result) {
die('Invalid query: ' . mysql_error());
}
echo '.';
flush();
}
echo "\n";
echo 'All done.>/pre>';
// Disconnect DB
mysql_close($DBC);
function ek($string)
{
global $DBC;
return "`" . mysql_real_escape_string($string, $DBC) . "`";
}
function ev($string)
{
global $DBC;
return "'" . mysql_real_escape_string($string, $DBC) . "'";
}
?>
"[...] aber in der Regel kann man nie mehr als 1MByte an Daten importieren [...]"
Dazu ist anzumerken, dass die Daten erst hochgeladen werden müssen bevor sie von phpMyAdmin verarbeitet werden können. Somit stellt jeder Import für den Server erst einmal einen Upload dar.
Die Dateigröße für einen Upload wird i.d.R. in der php.ini geregelt. Es liegt also in der Hand des Server-Admins wie groß Dateien für den Upload sein dürfen. Bei sehr konservativ eingestellten Servern sind das auch schon mal weit weniger als 1MB. Bei anderen Servern auch schon mal mehr als 2MB.
Ich benutze aus verschiedenen Gründen einen Desktop-Client für MySQL-Operationen. Dazu verwende ich MySQL Control Center (gibt es z.B. hier: http://www.soft-ware.net/office/daten/oberflaeche/p03277.asp).
Zum einen habe ich beim Client nicht die Upload-Beschränkungen. Zum anderen lassen sich damit auch noch einige andere "Pflegearbeiten" an den DBS recht komfortabel vornehmen. Man kann SQL-Befehle in Textdateien abspeichern und sie im Client mit 2,3 Mausklicks ausführen.
Ein weiterer Vorteil eines Desktop-Clients liegt in der maximalen Ausführungszeit für PHP-Scripte. Ist diese auf dem Server zu kurz bemessen, kann phpMyAdmin Probleme bei recht umfangreichen (langwierigen) DB-Aktionen bekommen.
Jeder der sich etwas intensiver mit seinen MySQL-DBs beschäftigt, sollte auch mal eionen Blick auf einen Desktop-Client werfen. Neben MySQL Control Center gibt es davon noch ein paar andere.
Hi
danke für die Erklärung, die sehr einfache, ich nehm die in meine Liste zu den WP Tipps auf.
Für große Datenbanken nehm ich immer dieses Script:
http://www.ozerov.de/bigdump.php
damit habe ich Foren mit >500 000 Einträgen und >5000User leichtest übersiedelt.
offtopic:
gemein, vergaß die Spamfrage, nutz den Return button der ganze Kommentar weg *snief* und
entweder hat mein Flock was, aber Deine Seiten *derladen* bei mir kaum
Dir einen schönen Sonntag
Monika, die jetzt die Spamschutzfrage vorher ausgefüllt hat
"Fatal error: Call to undefined function: mb_convert_encoding() in ...\wp-content\iconv.php on line 32"
Beim Aufruf des Konvertierungs-Scriptes
Hallo Ralf,
da das Script ein Schnellschuss ist, wird nicht abgefragt, wenn alles OK ist.
Die Funktion gibt es nicht, die war nur bei einem erweiterten Script da.
LG Frank
Danke für die Hilfe. Nur habe ich das Problem, dass alle Bilder und Artikel noch auf den alten Server verlinken sind, woran kann das liegen?
Dann wirst du nochmal mit Suchen/Ersetzen in der Datenbank die Links ändern müssen. Prüfe im Vorfeld doch mal einen Link im Editor und unbedingt eine Sicherung der DB aufsetzen.
Hallo Frank,
ich bin auch gerade am umziehen und habe eine Frage:
Früher gab es doch in den WordPress-Optionen mal die Möglichkeit, den "echten" Serverpfad zum Blog irgendwo in den Optionen einzustellen. Ich finde das mittlerweile in der neuen Version nirgendwo wieder - weder in den Optionen, noch in der config-Datei.
Nun suchen nur leider ein, zwei Plugins und die Upload-Optionen an der alten Stelle: /homepages/45/d1234583xx/htdocs/blog/wp-content/ .
Hast du eine Ahnung, wo - in welcher Datei - sich die Einstellung versteckt?
Das Problem mit den Umlauten hatte ich auch, habe es mit einem zweiten Import mittels WP-DBManager gelöst ( http://lesterchan.net/portfolio/programming.php ).
Wenn ich mich recht erinnere war das früher bei Verschiedenes. Ist aber nicht mehr drin.
Seltsam, oder? (wie einem die Optionen genommen werden)
Datenbank backups oder umzüge am einfachsten automatisieren
automatische-mysql-db-backups-mit-mysqldumper-und-cron
danke für die wertvolle tipps
~8 Monate früher mit diesem Eintrag und ich hätte mir einiges an Arbeit erspart
Kann es sein, dass der CODE oben ein bisschen durcheinandergeraten ist?
Tolle Zusammenfassung!
Inige Probleme hatte ich auch und konnte sie Lösen.
Danke für die Tipps, war gestern am verzweifeln, da ich mit meinem Blog umziehen muss.
Ich möchte von einem bestehenden 2.7 Blogdie Datenbank in ein neu installiertes 2.7 Blog transferieren. Mit der blogeigenen import/export Funktion geht das gut, aber erstens sind dann alle Überschriften von den Artikeln weg und alle Artikel waren durcheinander. Dies lies sich auch händisch über phpmyadmin nicht beheben.
Dann mit mysqlDumper versucht. Das ging garnicht. Ergebnis war eine weisse Seite.
Jetzt mit dem WordPress Database backup Plugin versucht. Tolle Sache, aber auch da war die weisse Seite dann da, die Tabellen allerdings waren in der Datenbank.
Auch nach hiesiger Anleitung bin ich schon vorgegangen. Ergebnis, die weisse Seite. Hab nun sogar händisch in der wp_options die Einträge _name siteurl und home angepasst, aber daran liegts auch nicht anscheinend. Datenbankpräfixe stimmen auch.
Ich weiss, das es geht, aber ich weiss nicht, was ich falsch mache.
Wäre überaus dankbar und erfreut, wenn mir jemand helfen könnte und würde.
Mit bestem Gruß,
der Rio
Vielen Dank für die klare Beschreibung. Stehe mit meinem Blog nämlich auch grade vor einem Umzug - und das bereitet mir doch erhebliche Bauchschmerzen. Die sind jetzt zwar noch nicht ganz weg, aber ich werd wohl ruhiger schlafen können. Betsen Dank und mach weiter... wenn´s geht auch mit solchen Tipps.
Cool erklärt habs direkt verstanden..
In den beiträgen wird ja hier ziehmlich disskutiert..^^
besten grüße Tobi
Seit ich mit meinem WordPress-Blog umgezogen bin kann ich eigentlich alle Funktionen einwandfrei nutzen, jedoch kann ich einen einzigen Artikel nicht mehr bearbeiten... Es erscheint einfach nur eine leere, weiße Seite!
Kennt das jemand bereits?!
Ich selbst habe das eide rimme rnoch nicht ganz verstanden - werde es mir nochmal durchlesen und hoffe, dass es dann klappt.
Hi, über die Suche "Datenbank-Import in WordPress" bin ich auf diesen Artikel gestossen. Leider beantwortet auch der nicht meine Frage: Ich suche ein Tool, daß mir ein installierbares Backup von WordPress erstellt. Bei joomla gibts sowas mit dem Namen Joomlapack, leider habe ich nichts für WP finden können - hat da jemand evtl. einen Tipp für mich? Vielen Dank schon im Voraus
An dieser Stelle würde ich gerne mal eine Lanze für Notepad++ brechen. Was mir das Tool im letzten Jahr an Arbeit abgenommen hat, ist wirklich unbeschreiblich. Da ich noch mit einer strikten Notepad only Codetechnik "aufgewachsen" bin, war der Umstieg natürlich ein Highlight...
Ansonsten vielen Dank für die tolle Zusammenfassung. Wird direkt mal gebookmarked
Hi,
ich war froh, als ich die neue WordPress-Version installiert hatte - und alles reibungslos gelaufen ist. Das ist noch vergleichsweise einfach im Gegensatz zu einem Umzug. Ob ich den Umzug tatsächlich durchziehe, muss ich mir noch mal durch den Kopf gehen lassen. Die Seite wird jedenfalls gebookmarkt. Thx.
Grüße, Mel
Yeah, die Funktion mb_convert_encoding() hat mir dann also doch nochmal das Wochenende gerettet! Ich hatte die ganze Zeit Probleme mit den Umlauten, die aus einem MySQL Import kamen, aber jetzt laufen sie, und sind keine komischen "ä" mehr! Danke, dass du es auch benutzt hast!
lg dani
Optimal! Danke für das Beispiele der Tabelle post2cat das hat mir sehr weitergeholfen. Da ich auch kurz vor der Portierung eines Blogs stehe, und das vorher noch nicht gemacht habe, kam dein Artikel wie gerufen! Ich hoffe, das es auch alles so funktioniert wie ich mir das vorstelle...
Danke für deinen Artikel! Ich werde mal posten ob es geklappt hat oder nicht^^
danke für den Tipp jetzt werde ich die Umlaute auch endlich los... ich habe bisher immer alles exportiert und dann auf dem neuen server WP neu aufgesetzt und die Einträge und co. wieder importiert und eben das Template mit den ganzen Einstellungen kopiert
Das ist ein wirklich schöner Artikel.
Wer jedoch von wordpress.com auf ein Selfhosting-Blog umziehen möchte, kann das wie im folgenden Artikel beschrieben tun (im anhängenden Whitepaper gibt es zusätzlich noch eine ausführliche Umzugsanweisung):
http://www.socialmediaevolution.de/2011/04/18/blogumzug/
viele Grüße
Gute Anleitung. Man kann auch über die export Funktion von WP die Beiträge im- und exportieren. So dürfte man an der Stelle keine Probleme mit Umlauten haben
Eine Desktop-Client finde ich als Alternative zu PHPmyAdmin auch besser. Ich selbst benutze für solche Zwecke "HeidiSQL" und muss sagen, dasi ich mit Desktorp Variante ziemlich zufrieden bin.
Danke für die tolle Anleitung für den Umzug eines WordPress Blogs. Habe neulich den Hoster mit meinem Blog gewechselt und damit ging's ohne Probleme!
@Charso: Wieso immer gleich nen Desktop Client? Bin zwar nicht so computerversiert, aber die ganzen Programme machen doch immer nur den PC lahm. Ich komme zumindest mit PHPmyAdmin gut zurecht und es bietet alle benötigten Funktionen...
danke dir MiRa der Link hat mir sehr geholfen. ich bin grad dabei ein paar meiner Blogs zu komprimieren und zusammen in einem Größeren Projetk unterzubringen. Da kommt das alles grad passend für mich
"Man kann auch über die export Funktion von WP die Beiträge im- und exportieren. So dürfte man an der Stelle keine Probleme mit Umlauten haben"
Danke für den Tipp aus den Kommentaren. Hat mein Problem mit den Umlauten gelöst.
Hey Super, genau wie beim Peter hat mir der Tip mit der Export Funktion auch weitergeholfen! Besten Dank!