Analyse von Mysql-Datenmigrationsmethoden und -Tools

Analyse von Mysql-Datenmigrationsmethoden und -Tools

In diesem Artikel wird hauptsächlich die Analyse von MySQL-Datenmigrationsmethoden und -tools vorgestellt. Der Artikel stellt sie anhand von Beispielcode sehr ausführlich vor, was einen gewissen Referenzwert für das Studium oder die Arbeit aller hat. Freunde, die sie benötigen, können darauf zurückgreifen.

Datenmigration ist eine der Aufgaben, die jedes Backend bewältigen muss. Dieser Artikel stellt einige gängige Methoden und Tools zur Datenmigration vor.

mysqldump: Datenmigration ohne Änderung der Datenstruktur

Daten exportieren

mysqldump -u root -p DATENBANKNAME Tabellenname > dump.sql

Daten wiederherstellen

mysql -u root -p DATENBEZEICHNUNG < dump.sql

Oder verbinden Sie sich mit dem MySQL-Client

mysql> Quelldump.sql

Stellen Sie mit pymysql eine Verbindung zur Datenbank her

Datenbank, die direkt mit Benutzername und Passwort verbunden werden kann

Klasse GeneralConnector:
  def __init__(selbst, Konfiguration, return_dic=Falsch):
    selbst.return_dic = return_dic
    self.config = Konfiguration

  def __enter__(selbst):
    self.conn = pymysql.connect(**self.config, Port=3306)
    wenn self.return_dic:
      # Eine Datenzeile wird zu einem Wörterbuch self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
    anders:
      selbst.cursor = selbst.conn.cursor()
    returniere self.cursor

  def __exit__(selbst, *args):
    selbst.cursor.schließen()
    selbst.conn.commit()
    selbst.conn.close()

verwenden:

# local_db = {
# 'Benutzer': 'root',
# 'passwd': '',
# 'Host': '127.0.0.1',
# "db": "lokale_db"
# }
mit GeneralConnector(const.local_db, return_dic=True) als Cursor:
  cursor.execute('WÄHLEN Sie `col1`, `col2` AUS Test;')
  return cursor.fetchall()

Herstellen einer Verbindung zu einer Datenbank auf einem Server, der eine SSH-Verbindung erfordert

Klasse SSHConnector:
  def __init__(selbst, Server, Konfiguration, return_dic=Falsch):
    self.return_dic=Rückgabewert
    self.server = Server
    self.config = Konfiguration

  def __enter__(selbst):
    self.conn = pymysql.connect(**self.config, port=self.server.local_bind_port)
    wenn self.return_dic:
      # Eine Datenzeile wird zu einem Wörterbuch self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
    anders:
      selbst.cursor = selbst.conn.cursor()
    returniere self.cursor

  def __exit__(selbst, *args):
    selbst.cursor.schließen()
    selbst.conn.commit()
    selbst.conn.close()

verwenden:

#SERVER = SSHTunnelForwarder(
# (Remote-Host, SSH-Port),
# ssh_username=BENUTZERNAME,
# ssh_pkey=SSH_SCHLÜSSEL,
# ssh_private_key_password=SSH_KEY_PASSWD,
# remote_bind_address=('127.0.0.1', 3306) # MySQL-Dienststandort# )
# server_db = {
# 'Benutzer': 'root',
# 'passwd': '',
# 'Host': '127.0.0.1',
# 'db': 'server_db'
# }
# Erstellen Sie einen Tunnel, um das MySQL des Servers mit const.SERVER als Server an den lokalen Port 3306 zu binden:
  mit SSHConnector(server, const.server_db) als Cursor:
    cursor.execute('Tabellen anzeigen;')
    Daten = Cursor.fetchall()
    drucken(Daten)

Verschiedene Cursoroperationen

1.cursor.execute(SQL-Anweisung)

Ausführen einer SQL-Anweisung

2. cursor.fetchall()

Holen Sie sich alle Ergebnisse des Cursors, häufig verwendet nach der Select-Anweisung

3. cursor.fetchone()

Holen Sie sich das erste Ergebnis des Cursors

4. Cursor.lastrowid

Die letzte Daten-ID

5.cursor.executemany(Einfügeanweisung, Datenliste)

Batch-Einfügen einer Datenmenge, wie z. B.

mit const.SERVER als Server:
  mit connector.Connector(server, const.db_1) als Cursor:
    cursor.execute('wähle * aus den Einstellungen aus')
    Einstellungen = Cursor.fetchall()

  mit connector.Connector(server, const.db_2) als Cursor:
    cursor.executemany('in Präferenzwerte (`id`,`theme`,`user_id`) einfügen (%s,%s,%s)', Einstellungen)

Ergebnisse vom Listentyp vom Cursor abrufen

cursor.execute('WÄHLEN Sie `Name` AUS Benutzer;')

Die direkte Verwendung von fetchall() kann nur die in Tupel verpackten Daten abrufen

cursor.fetchall()
# (('Jack',), ('Ben'))

Jetzt möchte ich eine Liste mit Ergebnismengen erhalten, genau wie flat=True in Django

Es gibt zwei Möglichkeiten

Listenverständnis

name_list = [x[0] für x in cursor.fetchall()]

Der Nachteil dieser Methode besteht darin, dass sie zuerst fetchall() verwendet, um den Ergebnisset in den Speicher zu lesen und ihn dann in eine Liste umzuwandeln, was nicht effizient ist.

itertools

Name_Liste = Liste(itertools.chain.from_iterable(cursor))

Diese Methode wird empfohlen. Erstens werden dabei nicht alle Ergebnisse in den Speicher geladen. Zweitens ist die Verwendung von itertools zum Generieren von Listen schneller als die Listenableitung.

So verwenden Sie Django-Modelle bei der Datenmigration

  • Sie müssen die Einstellungsdatei von Django kopieren, unnötige Konfigurationen löschen und die Zieldatenbank für die Migration einrichten.
  • Sie müssen die in diesem Modell verwendeten Dateien kopieren
  • Sie müssen das Verzeichnis eingeben, in dem sich die Datei models.py befindet, in settings.INSTALLED_APPS
  • Starten Sie Django oben in Ihrem Migrationsskript
Betriebssystem importieren
Django importieren
System importieren
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "übersetzen.settings")
django.setup()

Django stellt über eine lokale Weiterleitung in einem SSH-Tunnel eine Verbindung zu einer Remote-Datenbank her

Erstellen Sie einen SSH-Tunnel, um die Remote-Datenbank einem lokalen Port zuzuordnen

ssh -L local_port:localhost:<Remote-MySQL-Port> <Benutzername>@<Remote-Host>

Wenn die SSH-Verbindung besteht, können Sie auf die Remote-Datenbank zugreifen, indem Sie auf den lokalen Port zugreifen

Konfigurieren Sie die Datenbank in den Django-Einstellungen

DATENBANKEN = {
  'Standard': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': Datenbankname,
    'USER': remote_mysql_user, # Passwort für Remote-Datenbankkonto 'PASSWORD': remote_mysql_password,
    'HOST': "lokaler Host",
    'PORT': local_port, # Die Remote-Datenbank ist dem lokalen Port 'OPTIONS' zugeordnet: {'init_command': 'SET default_storage_engine=INNODB;'}
    }
}

Wenn Sie das Django-Modell verwenden, greifen Sie an diesem Punkt über den SSH-Tunnel auf die Remote-Datenbank zu

Vorsichtsmaßnahmen

  • Kennen Sie die Menge der zu migrierenden Daten im Voraus und nutzen Sie 5 bis 10 % der Daten, um die Migrationsgeschwindigkeit zu testen.
  • Schätzen Sie die gesamte Migrationszeit anhand von Testdaten. Wenn die gesamte Migrationszeit mehr als eine Stunde beträgt, führen Sie das Migrationsskript unbedingt auf dem Server aus, damit der Migrationsprozess nicht so leicht unterbrochen wird. Die Serverleistung ist viel besser als die eines PCs.
  • Versuchen Sie, Batch-Einfügungen zu verwenden, um die Anzahl der Schreibvorgänge in die Datenbank zu reduzieren, indem Sie cursor.executemany oder Djangos bulk_create verwenden.
  • Der Migrationsprozess sollte protokolliert werden, damit Sie wissen, zu welchem ​​Schritt die Daten migriert wurden, und den Haltepunkt finden, um die Ausführung fortzusetzen, wenn ein unerwarteter Terminalabbruch auftritt.
  • Das Feld „Erstellungszeit“ plus „auto_add_now“ zeichnet automatisch die Erstellungszeit der Daten auf. Beim Einfügen von Daten ist die Zuweisung eines Wertes zu diesem Feld ungültig.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
  • 5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden
  • Detaillierte Erklärung des MySQL-Überwachungstools mysql-monitor
  • Eine detaillierte Einführung in den Aufbau und die Verwendung des Tools Anemometer zeigt MySQL Slow Logs grafisch an
  • So verwenden Sie MySQL-Stresstest-Tools
  • Das Pycharm-Tool konnte keine Verbindung zur MySQL-Datenbank herstellen
  • So reparieren Sie beschädigte MySQL-Datenbankdateien schnell mit den Tools myisamchk und mysqlcheck
  • Eine schnelle Lösung zum versehentlichen Löschen von MySQL-Daten (MySQL Flashback Tool)
  • Das KTL-Tool realisiert die Methode zum Synchronisieren von Daten von MySQL zu MySQL
  • So stellen Sie eine Verbindung zum MySQL-Visualisierungstool Navicat her
  • Empfehlen Sie mehrere MySQL-bezogene Tools

<<:  JavaScript Canvas zeichnet dynamische Drahtgittereffekte

>>:  Das neueste, äußerst detaillierte grafische Tutorial zum Herunterladen und Installieren virtueller VMware-Maschinen

Artikel empfehlen

Tutorial zur Verarbeitung statischer Ressourcen in Tomcat

Vorwort Alle Anfragen in Tomcat werden von Servle...

12 nützliche Array-Tricks in JavaScript

Inhaltsverzeichnis Array-Deduplizierung 1. from()...

Lösung für den Überlauf der HTML-Tabelle

Wenn die Tabelle breit ist, kann es zu einem Über...

Erläuterung des HTML-Tabellenlayouts als Beispiel

Die Elemente in einem HTML-Dokument werden hinter...

Anwendungsszenario für die MySQL-Konfiguration mehrerer Instanzen

Inhaltsverzeichnis Mehrere MySQL-Instanzen Übersi...

Feste Tabellenbreite table-layout: fest

Damit die Tabelle den Bildschirm (den verbleibende...

Beispiel zum Verlassen der Schleife in Array.forEach in js

Inhaltsverzeichnis forEach() Methode So springen ...

Grundlegendes zur CSS-Eigenschaft „transform-origin“

Vorwort Ich habe vor kurzem eine Feuerwerksanimat...

Wozu dient das Feld „enctype“ beim Hochladen von Dateien?

Das enctype-Attribut des FORM-Elements gibt den Ko...