In Kapitel 32, Abschnitt 32.3.4, Seiten 456, 457 werden gemäß dem MySQL 5.0 Certification Study Guide die Bedingungen für die binäre Portabilität beschrieben , die Folgendes hervorheben :
Die Binärportabilität ist wichtig, wenn Sie eine auf einem Computer erstellte Binärsicherung auf einem anderen Computer mit einer anderen Architektur verwenden möchten. Die Verwendung einer Binärsicherung ist beispielsweise eine Möglichkeit, Datenbanken von einem MySQL-Server auf einen anderen zu kopieren.
Für MyISAM bedeutet die binäre Portabilität, dass Sie die Dateien für eine MyISAM-Tabelle direkt von einem MySQL-Server auf einen anderen auf einem anderen Computer kopieren können und der zweite Server auf die Tabelle zugreifen kann.
Binäre Portabilität bedeutet für InnoDB, dass Sie die Tablespace-Dateien direkt von einem MySQL-Server auf einem Computer auf einen anderen Server auf einem anderen Computer kopieren können und der zweite Server auf den Tablespace zugreifen kann. Standardmäßig werden alle von einem Server verwalteten InnoDB-Tabellen zusammen im Tablespace gespeichert. Die Portabilität des Tablespace hängt also davon ab, ob alle einzelnen InnoDB-Tabellen portierbar sind. Wenn auch nur eine Tabelle nicht portierbar ist, ist auch der Tablespace nicht portierbar.
MyISAM-Tabellen und InnoDB-Tablespaces können binär von einem Host auf einen anderen übertragen werden, wenn zwei Bedingungen erfüllt sind:
- Beide Maschinen müssen eine Zweierkomplement-Ganzzahl-Arithmetik verwenden
- Beide Maschinen müssen das IEEE-Gleitkommaformat verwenden, andernfalls dürfen die Tabellen keine Gleitkomma-Spalten enthalten (FLOAT oder DOUBLE).
In der Praxis sind diese beiden Bedingungen wenig einschränkend. Integer-Arithmetik mit Zweierkomplement und IEEE-Gleitkomma-Format sind die Norm für moderne Hardware. Eine dritte Bedingung für die Binärportabilität von InnoDB ist, dass Sie für Tabellen und Datenbanken Namen in Kleinbuchstaben verwenden. Dies liegt daran, dass InnoDB diese Namen intern (in seinem Datenwörterbuch) in Windows in Kleinbuchstaben speichert. Die Verwendung von Kleinbuchstaben ermöglicht die binäre Portabilität zwischen Windows und Unix. Um die Verwendung von Kleinbuchstaben zu erzwingen, können Sie die folgenden Zeilen in eine Optionsdatei einfügen:
[mysqld]
lower_case_table_names=1
Wenn Sie InnoDB für die Verwendung von tabellenbezogenen Tablespaces konfigurieren, werden die Bedingungen für die Binärportabilität erweitert, um auch die .ibd-Dateien für InnoDB-Tabellen einzuschließen. (Die Bedingungen für die freigegebenen Tablespaces gelten weiterhin, da sie das Datenwörterbuch enthalten, in dem Informationen zu allen InnoDB-Tabellen gespeichert sind.)
Wenn die Bedingungen für die Binärportabilität nicht erfüllt sind, können Sie MyISAM- oder InnoDB-Tabellen von einem Server auf einen anderen kopieren, indem Sie sie in einem Textformat (z. B. mit mysqldump) sichern und sie erneut auf den Zielserver laden.
Es gibt zwei Hauptmethoden, die auf der Speicherengine basieren, um einzelne Tabellen zu verschieben.
Für das gegebene Beispiel nehmen wir folgendes an:
- Datadir ist / var / lib / mysql
- Datenbank namens mydb
- Tabelle in der Mydb- Datenbank mit dem Namen mytable .
MyISAM-Tabellen
Wenn mydb.mytable die MyISAM-Speicher-Engine verwendet, wird die Tabelle physisch als drei separate Dateien dargestellt
- /var/lib/mysql/mydb/mytable.frm (.frm-Datei)
- /var/lib/mysql/mydb/mytable.MYD (.MYD-Datei)
- /var/lib/mysql/mydb/mytable.MYI (.MYI-Datei)
Die .frm enthält die Tabellenstruktur.
Die .MYD enthält die Tabellendaten.
Die .MYI enthält die Tabellenindexseite
Diese Dateien werden voneinander abhängig verwendet, um die Tabelle von einem logischen Standpunkt in MySQL aus darzustellen. Da diese Dateien keine weitere logische Zuordnung haben, migrieren Sie eine Tabelle von einem DB-Server auf einen anderen. Sie können dies sogar von einem Windows-Server auf einen Linux-Server oder ein MacOS. Natürlich können Sie mysql herunterfahren und die 3 Tabellendateien kopieren. Sie könnten Folgendes ausführen:
LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;
Halten Sie in einer SSH-Sitzung die Tabelle als schreibgeschützt und halten Sie das Schloss 24 Stunden lang. Führen Sie die Kopie eine Sekunde später in einer anderen SSH-Sitzung aus. Beenden Sie dann die MySQL-Sitzung mit der 24-Stunden-Sperre. Sie müssen nicht 24 Stunden warten.
InnoDB-Tabellen
Basierend auf dem oben genannten Zitat aus dem Zertifizierungsbuch gibt es viele Faktoren, die das Sichern einer bestimmten InnoDB-Tabelle bestimmen. Führen Sie der Einfachheit, Klarheit und Kürze halber einfach einen mysqldump der gewünschten Tabelle mit den --single-transaction-Parametern durch, um einen perfekten Zeitpunkt-Dump der Tabelle zu erhalten. Sie müssen sich nicht mit der InnoDB-Semantik befassen, wenn Sie nur eine Tabelle benötigen. Sie können dieses Dumpfile auf einen beliebigen MySQL-Server Ihrer Wahl laden.
Da wurden hier zwei Fragen zusammengeführt (jcolebrand): EDIT
Wenn Sie mehr als gewillt sind, mit einer langsamen DB-Leistung zu leben, können Sie eine Reihe von Rsyncs vom alten Server (ServerA) zum neuen Server (ServerB) ausführen, auch wenn mysql noch auf ServerA ausgeführt wird.
Schritt 01) Installieren Sie auf ServerB dieselbe Version von MySQL wie auf ServerA
Schritt 02) Führen Sie auf ServerA eine Ausführung SET GLOBAL innodb_max_dirty_pages_pct = 0;
von MySQL aus und ungefähr 10 Minuten (dies löscht schmutzige Seiten aus dem InnoDB- Pufferpool. Dies hilft auch, ein schnelleres Herunterfahren von MySQL durchzuführen.) Wenn Ihre Datenbank ausschließlich MyISAM ist, können Sie diesen Schritt überspringen.
Schritt 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql
Schritt 04) Wiederholen Sie Schritt 03, bis eine Synchronisierung weniger als 1 Minute dauert
Schritt 05) service mysql stop
auf ServerA
Schritt 06) Führen Sie eine weitere rsync durch
Schritt 07) scp ServerA:/etc/my.cnf ServerB:/etc/
Schritt 08) service mysql start
auf ServerB
Schritt 08) service mysql start
auf ServerA (optional)
Versuche es !!!
VORBEHALT
Sie können einen solchen Replikationsslave erstellen. Denken Sie daran, die Server-ID explizit in der master /etc/my.cnf und eine andere Nummer für die Server-ID in der slave /etc/my.cnf festzulegen