Angenommen, es gibt ein solches Szenario, ein kleines Programm wird entwickelt und wir nutzen die Popularität des Double Eleven-Events und sammeln schnell mehr als eine Million Benutzer in einem Monat Programmseite zum Senden von Vorlagennachrichtenbenachrichtigungen an WeChat-Benutzer.
Da die Datenmenge zunimmt, wird der bisher genutzte Serverplatz etwas unzureichend. Vor kurzem habe ich ein neues Framework speziell für die Backend-Entwicklung kleiner Programme geschrieben, daher möchte ich die Originaldaten in die Datenbank migrieren neues System. Ich habe eine 4-Core-8G-Maschine gekauft und mit der Datenmigration begonnen. Lassen Sie uns den Migrationsprozess einfach aufzeichnen.
In der normalen Entwicklung verwenden wir häufig die Methode zur Datensicherung und -migration, indem wir das Tool mysqldump verwenden, um eine SQL-Datei zu exportieren und dann SQL in die neue Datenbank zu importieren um die Datenmigration abzuschließen. [Empfohlen: MySQL-Video-Tutorial]
Experimente haben ergeben, dass es einige Minuten dauert, eine Datenbank mit einer Million Ebenen über MySQLDump in eine SQL-Datei zu exportieren. Die Größe der exportierten SQL-Datei beträgt etwa 1 GB und dann 1 GB Das Kopieren der Datei auf einen anderen Server mit dem scp-Befehl kann einige Minuten dauern. Ich habe den Quellbefehl verwendet, um Daten in die Datenbank des neuen Servers zu importieren. Ich habe ihn die ganze Nacht ausgeführt und die Daten wurden nicht importiert.
Skriptmigration
Die direkte Bedienung der Datenbank über die Befehlszeile zum Exportieren und Importieren von Daten ist eine bequemere Möglichkeit, aber wenn die Datenmenge groß ist, ist sie oft zeitaufwändiger und erfordert eine höhere Serverleistung . Wenn der Zeitbedarf für die Datenmigration nicht sehr hoch ist, können Sie versuchen, ein Skript zur Datenmigration zu schreiben. Obwohl ich es noch nicht ausprobiert habe, denke ich, dass es wahrscheinlich zwei Skriptlösungen gibt.
Die erste Methode besteht darin, ein Migrationsskript auf dem Migrationszielserver auszuführen, eine Remoteverbindung zur Datenbank des Quelldatenservers herzustellen, die Quelldaten durch Festlegen von Abfragebedingungen in Blöcken zu lesen und sie nach dem Lesen in die Zieldatenbank zu schreiben. Diese Migrationsmethode ist möglicherweise relativ ineffizient. Der Datenexport und -import entspricht einem synchronen Prozess, und Sie müssen warten, bis der Lesevorgang abgeschlossen ist, bevor Sie ihn schreiben. Wenn die Abfragebedingungen angemessen gestaltet sind, können mehrere Migrationsskripte auch im Multithread-Modus gestartet werden, um den Effekt einer parallelen Migration zu erzielen.
Die zweite Methode kann mit Redis kombiniert werden, um eine „Produktion + Verbrauch“-Migrationslösung zu erstellen. Der Quelldatenserver kann als Datenproduzent fungieren, indem er ein Multithread-Skript auf dem Quelldatenserver ausführt, die Daten in der Datenbank parallel liest und die Daten in die Redis-Warteschlange schreibt. Als Verbraucher führt der Zielserver auch ein Multithread-Skript auf dem Zielserver aus, stellt eine Remote-Verbindung zu Redis her, liest die Daten in der Redis-Warteschlange parallel und schreibt die gelesenen Daten in die Zieldatenbank. Im Vergleich zur ersten Methode handelt es sich bei dieser Methode um eine asynchrone Lösung. Durch die Verwendung von Redis als Datenübertragungsstation wird die Effizienz erheblich verbessert.
Hier können Sie auch die Go-Sprache zum Schreiben von Migrationsskripten verwenden. Mithilfe der nativen Parallelitätsfunktionen können Sie den Zweck der parallelen Migration von Daten erreichen und die Migrationseffizienz verbessern.
Dateimigration
Die erste Migrationslösung ist zu ineffizient und die zweite Migrationslösung ist teurer im Code. Durch den Vergleich und die Analyse der online gefundenen Informationen habe ich mich schließlich für die Verwendung von MySQL entschieden. Der Befehl
select data into outfile file.txt、load data infile file.txt into table
schließt die Migration von Millionen von Daten in Form von Import- und Exportdateien ab.
Exportieren Sie die Datendatei in die Quelldatenbank
select * from dc_mp_fans into outfile '/data/fans.txt';
Kopieren Sie die Datendatei auf den Zielserver
zip fans.zip /data/fans.txtscp fans.zip root@ip:/data/
Importieren Sie die Datei in die Zieldatenbank
unzip /data/fans.zipload data infile '/data/fans.txt' into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@dummy,@dummy,@dummy,language,country,province,city,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy);
Folgen Sie diesen wenigen Schritten und erledigen Sie hundert Aufgaben in ein paar Minuten Serverübergreifende Migration von Datentabellen mit 10.000 Ebenen.
Hinweise: Einstellungen für MySQL-Sicherheitselemente secure%'; Unabhängig davon, ob MySQL diese Option aktiviert hat, gibt der Standardwert Null an, dass Import- und Exportbefehle nicht ausgeführt werden dürfen.
Ändern Sie das MySQL-Konfigurationselement über vim /etc/my.cnf und setzen Sie den Wert von secure_file_priv auf leer:[mysqld] secure_file_priv=''
Im obigen Beispiel werden Daten aus der Tabelle dc_mp_fans der Quelldatenbank in die Tabelle wxa_fans der Zieldatenbank migriert. Die Felder der beiden Datentabellen sind: dc_mp_fans
wxa_fans
Beim Importieren von Daten können Sie den Feldnamen so festlegen, dass er mit den Daten des Zielfelds übereinstimmt, und die unnötigen Zielfelddaten über @dummy verwerfen.
Basierend auf dieser Datenmigrationserfahrung lautet die Zusammenfassung:
Das obige ist der detaillierte Inhalt vonKonzentrieren Sie sich auf die Aufzeichnung des Datenmigrationsprozesses auf Millionenebene von MySQL!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!