MySQL-Datenbank in Compute Engine klonen

Last reviewed 2019-10-08 UTC

In dieser Anleitung werden zwei Möglichkeiten zum Klonen einer in Compute Engine ausgeführten Microsoft SQL Server-Datenbank beschrieben. Bei der einen werden Snapshots nichtflüchtiger Speicher verwendet. Bei der anderen wird der native Export und Import von MySQL verwendet. Die Exportdatei wird dabei mithilfe von Cloud Storage übertragen. Cloud Storage ist der Objektspeicherdienst von Google Cloud. Dieser bietet eine unkomplizierte, sichere, langlebige und hochverfügbare Möglichkeit zum Speichern von Dateien.

Mit Klonen wird der Vorgang bezeichnet, bei dem eine Datenbank auf einen anderen Server kopiert wird. Die Kopie ist von der Quelldatenbank unabhängig und wird als Snapshot zu einem bestimmten Zeitpunkt gespeichert. Sie können eine geklonte Datenbank für verschiedene Zwecke verwenden, ohne den Produktionsserver zu belasten oder die Integrität der Produktionsdaten zu gefährden. Zu diesen Zwecken gehören:

  • Analytische Abfragen
  • Last- oder Integrationstests von Anwendungen
  • Daten zum Befüllen von Data Warehouses extrahieren
  • Datenexperimente

Beide in dieser Anleitung beschriebenen Methoden zum Klonen haben ihre Vor- und Nachteile. Die ideale Methode ist von der jeweiligen Situation abhängig. In der folgenden Tabelle sind einige grundlegende Merkmale aufgeführt.

Problem Methode 1: Laufwerk-Snapshots Methode 2: Export und Import mit Cloud Storage
Zusätzlicher Speicherplatz auf MySQL-Instanzen erforderlich Kein zusätzlicher Speicherplatz erforderlich Zusätzlicher Speicherplatz zum Speichern der Exportdatei beim Erstellen und Wiederherstellen erforderlich
Zusätzliche Belastung der MySQL-Quellinstanzen während des Klonens Keine zusätzliche Belastung Zusätzliche Belastung auf CPU und E/A beim Erstellen und Hochladen der Exportdatei
Dauer des Klonens Relativ schnell bei großen Datenbanken Relativ langsam für große Datenbanken
Möglichkeit zum Klonen aus MySQL-Instanzen außerhalb von Google Cloud Nein Ja
Komplexität Eine komplexe Abfolge von Befehlen zum Anhängen von geklonten Laufwerken Ein relativ einfacher Befehlssatz zum Klonen
Kann vorhandene Sicherungssysteme nutzen Ja, wenn das Sicherungssystem Laufwerk-Snapshots von Google Cloud verwendet Ja, wenn das Sicherungssystem Dateien in Cloud Storage exportiert
Granularität des Klonens Kann nur ganze Laufwerke klonen Kann nur die angegebene Datenbank klonen
Datenkonsistenz Konsistent zum Zeitpunkt des Snapshots Konsistent zum Zeitpunkt des Exports
Kann Cloud SQL als Quelle verwenden Nein Ja, wenn dieselbe Version verwendet wird
Kann Cloud SQL als Ziel verwenden Nein Ja

In dieser Anleitung wird davon ausgegangen, dass Sie mit der Linux-Befehlszeile und der Verwaltung von MySQL-Datenbanken vertraut sind.

Ziele

  • MySQL-Datenbank in Google Cloud ausführen
  • Demodatenbank auf einem sekundären Laufwerk erstellen
  • MySQL-Datenbank mit Compute Engine-Laufwerk-Snapshots klonen
  • MySQL-Datenbank durch Übertragen einer Exportdatei mit Cloud Storage klonen
  • MySQL-Datenbank durch Übertragen einer Exportdatei mit Cloud Storage in Cloud SQL klonen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Aktivieren Sie die Compute Engine API.
  7. API aktivieren

Umgebung einrichten

Für diese Anleitung müssen Sie Folgendes für Ihre Computing-Umgebung einrichten:

  • Eine MySQL-Instanz in Compute Engine mit dem Namen mysql-prod, die den Produktionsserver für die Datenbank darstellt.
  • Ein zusätzliches Laufwerk mit dem Namen mysql-prod-data zum Speichern Ihrer Produktionsdatenbank, das an den Produktionsserver angehängt ist.
  • Eine Kopie der Datenbank Employees in mysql-prod als Simulation der Produktionsdatenbank, die Sie klonen möchten.
  • Eine MySQL-Instanz in Compute Engine mit dem Namen mysql-test, die den Testserver für die Datenbank darstellt. Auf diesem Server klonen Sie die Datenbank.

Diese Architektur wird im folgenden Diagramm veranschaulicht.

Diagramm mit einer Darstellung der Einrichtung zum Klonen einer MySQL-Datenbank in dieser Anleitung.

Produktions-VM-Instanz erstellen

Zum Simulieren einer Produktionsumgebung richten Sie eine Compute Engine-VM-Instanz ein, auf der MySQL unter Debian Linux ausgeführt wird.

Die VM-Instanz für diese Anleitung verwendet zwei Laufwerke: ein 50-GB-Laufwerk für das Betriebssystem und die Nutzerkonten und ein 100-GB-Laufwerk für den Datenbankspeicher.

In Compute Engine bietet die Verwendung separater Laufwerke keine Leistungsvorteile. Die Leistung von Laufwerken wird durch die Gesamtspeicherkapazität aller Laufwerke bestimmt, die mit einer Instanz verbunden sind, sowie durch die Gesamtzahl der vCPUs auf Ihrer VM-Instanz. Daher können sich die Datenbank und die Logdatei auf demselben Laufwerk befinden.

  1. Öffnen Sie Cloud Shell.

    Zu Cloud Shell

  2. Legen Sie die bevorzugte Zone fest:

    ZONE=us-east1-b
    REGION=us-east1
    gcloud config set compute/zone "${ZONE}"
    
  3. Erstellen Sie eine Compute Engine-Instanz:

    gcloud compute instances create mysql-prod \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --boot-disk-size=50GB \
        --boot-disk-device-name=mysql-prod \
        --create-disk="mode=rw,size=100,type=pd-standard,name=mysql-prod-data,device-name=mysql-prod-data"
    

    Dieser Befehl gewährt der Instanz uneingeschränkten Zugriff auf Google Cloud APIs, erstellt ein sekundäres Laufwerk mit 100 GB und hängt das Laufwerk an die Instanz an. Ignorieren Sie die Warnung zur Laufwerksleistung, da Sie für diese Anleitung keine hohe Leistung benötigen.

Zusätzliches Laufwerk einrichten

Das zweite Laufwerk, das an die Produktionsinstanz angehängt ist, dient zum Speichern der Produktionsdatenbank. Dieses Laufwerk ist leer, daher müssen Sie es partitionieren, formatieren und bereitstellen.

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Wenn neben dem Namen der Instanz mysql-prod ein grünes -Häkchen angezeigt wird, ist die Instanz bereit.

  3. Klicken Sie neben der Instanz mysql-prod auf die Schaltfläche SSH. Im Browser wird eine Terminalverbindung zur Instanz hergestellt.

  4. Rufen Sie im Terminalfenster eine Liste der Laufwerke auf, die an die Instanz angehängt sind:

    lsblk
    

    Die Ausgabe sieht so aus:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   50G  0 disk
    └─sda1   8:1    0   50G  0 part /
    sdb      8:16   0  100G  0 disk
    

    Das Laufwerk mit dem Namen sdb (100 GB) ist das Datenlaufwerk.

  5. Formatieren Sie das Laufwerk sdb und erstellen Sie eine einzelne Partition mit einem ext4-Dateisystem:

    sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard \
        /dev/sdb
    
  6. Erstellen Sie das MySQL-Datenverzeichnis als Bereitstellungspunkt für das Datenlaufwerk:

    sudo mkdir -p /var/lib/mysql
    
  7. Wenn Sie das Laufwerk automatisch an diesem Punkt bereitzustellen, fügen Sie der Datei /etc/fstab einen Eintrag hinzu:

    echo "UUID=`sudo blkid -s UUID -o value /dev/sdb` /var/lib/mysql ext4 discard,defaults,nofail 0 2" \
       | sudo tee -a /etc/fstab
    
  8. Stellen Sie das Laufwerk bereit:

    sudo mount -av
    
  9. Entfernen Sie alle Dateien vom Datenlaufwerk, damit es von MySQL als Datenverzeichnis verwendet werden kann:

    sudo rm -rf /var/lib/mysql/*
    

MySQL-Server installieren

Sie müssen die MySQL Community Edition herunterladen und installieren. Das MySQL-Datenverzeichnis wird auf dem zusätzlichen Laufwerk erstellt.

  1. Laden Sie in der mit mysql-prod verbundenen SSH-Sitzung das MySQL-Konfigurationspaket herunter und installieren Sie es:

    wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
    sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
    
  2. Wenn Sie dazu aufgefordert werden, wählen Sie die Option MySQL Server & Cluster und anschließend mysql-5.7 aus.

  3. Wählen Sie in der Liste die Option OK aus, um die Konfiguration des Pakets abzuschließen.

  4. Aktualisieren Sie den Repository-Cache und installieren Sie die mysql-community-Pakete:

    sudo apt-get update
    sudo apt-get install -y mysql-community-server mysql-community-client
    
  5. Wenn Sie den Hinweis erhalten, dass das Datenverzeichnis bereits vorhanden ist, wählen Sie OK aus.

  6. Wenn Sie aufgefordert werden, ein Root-Passwort anzugeben, erstellen Sie ein Passwort und geben Sie es ein. Notieren Sie sich das Passwort oder bewahren Sie es vorübergehend an einem sicheren Ort auf.

Beispieldatenbank herunterladen und installieren

  1. Installieren Sie in der mit der Instanz mysql-prod verbundenen SSH-Sitzung Git:

    sudo apt-get install -y git
    
  2. Klonen Sie das GitHub-Repository mit den Datenbankskripts Employees:

    git clone https://github.com/datacharmer/test_db.git
    
  3. Wechseln Sie in das Verzeichnis für das Datenbankskript Employees:

    cd test_db
    
  4. Führen Sie das Skript Employees zur Datenbankerstellung aus:

    mysql -u root -p -q < employees.sql
    

    Geben Sie das zuvor erstellte Root-Passwort ein, wenn Sie dazu aufgefordert werden.

  5. Wenn Sie prüfen möchten, ob die Beispieldatenbank funktioniert, führen Sie eine Abfrage aus, mit der die Anzahl der Zeilen in der Tabelle employees gezählt wird:

    mysql -u root -p -e "select count(*) from employees.employees;"
    

    Geben Sie das zuvor erstellte Root-Passwort ein, wenn Sie dazu aufgefordert werden.

    Die Ausgabe sieht so aus:

    +----------+
    | count(*) |
    +----------+
    |   300024 |
    +----------+
    

VM-Testinstanz erstellen

In diesem Bereich erstellen Sie eine MySQL-VM-Instanz mit dem Namen mysql-test als Ziel für die geklonte Datenbank. Die Konfiguration dieser Instanz ist mit der Konfiguration der Produktionsinstanz identisch. Sie erstellen jedoch kein zweites Datenlaufwerk. Stattdessen fügen Sie das Datenlaufwerk später in dieser Anleitung hinzu.

  1. Öffnen Sie Cloud Shell.

    Zu Cloud Shell

  2. Erstellen Sie die MySQL-Testinstanz:

    gcloud compute instances create mysql-test \
      --machine-type=n1-standard-2 \
      --scopes=cloud-platform \
      --boot-disk-size=50GB \
      --boot-disk-device-name=mysql-test
    

    Sie können die Warnung zur Laufwerkleistung ignorieren, da Sie für diese Anleitung keine hohe Leistung benötigen.

MySQL-Server auf der VM-Testinstanz installieren

Sie müssen die MySQL Community Edition auch auf die VM-Instanz mysql-test herunterladen und dort installieren.

  1. Laden Sie in der mit mysql-test verbundenen SSH-Sitzung das MySQL-Konfigurationspaket herunter und installieren Sie es:

    wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
    sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
    
  2. Wenn Sie dazu aufgefordert werden, wählen Sie die Option MySQL Server & Cluster und anschließend mysql-5.7 aus.

  3. Wählen Sie in der Liste die Option OK aus, um die Konfiguration des Pakets abzuschließen.

  4. Aktualisieren Sie den Repository-Cache und installieren Sie die mysql-community-Pakete:

    sudo apt-get update
    sudo apt-get install -y mysql-community-server mysql-community-client
    
  5. Wenn Sie aufgefordert werden, ein Root-Passwort anzugeben, erstellen Sie ein Passwort und geben Sie es ein. Notieren Sie sich das Passwort oder bewahren Sie es vorübergehend an einem sicheren Ort auf.

Datenbank mit Compute Engine-Laufwerk-Snapshots klonen

Eine Möglichkeit, eine auf Compute Engine ausgeführte MySQL-Datenbank zu klonen, besteht darin, die Datenbank auf einem separaten Datenlaufwerk zu speichern und Snapshots von nichtflüchtigen Speichern zu verwenden, um einen Klon dieses Laufwerks zu erstellen.

Mit Snapshots nichtflüchtiger Speicher können Sie eine Kopie der Daten auf dem Laufwerk zu einem bestimmten Zeitpunkt abrufen. Die Planung von Laufwerk-Snapshots ist eine Möglichkeit, Ihre Daten automatisch zu sichern.

In diesem Abschnitt der Anleitung führen Sie folgende Schritte aus:

  • Snapshot des Datenlaufwerks des Produktionsservers erstellen
  • Sie erstellen ein neues Laufwerk anhand dieses Snapshots.
  • Das neue Laufwerk auf dem Testserver bereitstellen
  • Den MySQL-Server auf der Testinstanz neu starten, damit der Server das neue Laufwerk als Datenlaufwerk verwendet

Das folgende Diagramm zeigt, wie eine Datenbank mithilfe von Laufwerk-Snapshots geklont wird.

Diagramm, das die Einrichtung zum Klonen einer MySQL-Datenbank mit Laufwerk-Snapshots zeigt.

Laufwerk-Snapshot erstellen

  1. Öffnen Sie Cloud Shell.

    Zu Cloud Shell

  2. Erstellen Sie in der Zone, in der sich auch die VM-Instanz befindet, einen Snapshot des Datenlaufwerks:

    gcloud compute disks snapshot mysql-prod-data \
         --snapshot-names=mysql-prod-data-snapshot \
         --zone="${ZONE}"
    

    Der Snapshot wird nach einigen Minuten erstellt.

Laufwerk-Snapshot an die Testinstanz anhängen

Sie müssen aus dem erstellten Snapshot ein neues Datenlaufwerk erstellen und es dann der Instanz mysql-test hinzufügen.

  1. Öffnen Sie Cloud Shell.

    Zu Cloud Shell

  2. Erstellen Sie einen neuen nichtflüchtigen Speicher. Verwenden Sie dazu den Snapshot des Produktionslaufwerks als Inhalt:

    gcloud beta compute disks create mysql-test-data \
         --size=100GB \
         --source-snapshot=mysql-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. Hängen Sie das neue Laufwerk mit Lese-/Schreibberechtigungen an die Instanz mysql-test an:

    gcloud compute instances attach-disk mysql-test \
        --disk=mysql-test-data --mode=rw
    

Das neue Datenlaufwerk unter Linux bereitstellen

Um das geklonte Datenlaufwerk als MySQL-Datenverzeichnis zu verwenden, müssen Sie die MySQL-Instanz beenden und das Laufwerk bereitstellen.

  1. Beenden Sie in der mit mysql-test verbundenen SSH-Sitzung den MySQL-Dienst:

    sudo service mysql stop
    
  2. Rufen Sie im Terminalfenster eine Liste der Laufwerke auf, die an die Instanz angehängt sind:

    lsblk
    

    Die Ausgabe sieht so aus:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   50G  0 disk
    └─sda1   8:1    0   50G  0 part /
    sdb      8:16   0  100G  0 disk
    

    Das Laufwerk mit dem Namen sdb (100 GB) ist das Datenlaufwerk.

  3. Stellen Sie den MySQL-Datenträger im MySQL-Datenverzeichnis bereit:

    sudo mount -o discard,defaults /dev/sdb /var/lib/mysql
    

    Durch das Bereitstellen dieses Laufwerks werden alle MySQL-Konfigurationsdateien und -Tablespaces ausgeblendet und durch den Inhalt des Laufwerks ersetzt.

    Mit diesem Befehl wird das Laufwerk vorübergehend bereitgestellt. Beim Systemstart wird es nicht noch einmal bereitgestellt. Wenn Sie das Laufwerk beim Systemstart bereitstellen möchten, erstellen Sie einen fstab-Eintrag. Weitere Informationen finden Sie weiter oben in dieser Anleitung unter Zusätzliches Laufwerk einrichten.

MySQL in der Testinstanz starten

  1. Starten Sie in der mit mysql-test verbundenen SSH-Sitzung den MySQL-Dienst:

    sudo service mysql start
    
  2. Führen Sie eine Abfrage aus, mit der die Anzahl der Zeilen in der Tabelle employees gezählt wird, um die Funktionsfähigkeit der geklonten Datenbank zu prüfen:

    mysql -u root -p -e "select count(*) from employees.employees;"
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-prod ein, wenn Sie dazu aufgefordert werden. Das Root-Passwort der Produktionsinstanz ist erforderlich, da das gesamte MySQL-Datenverzeichnis ein Klon des Datenverzeichnisses der Instanz mysql-prod ist, sodass alle Datenbanken, Datenbanknutzer und ihre Passwörter kopiert werden.

    +----------+
    | count(*) |
    +----------+
    |   300024 |
    +----------+
    

    Die Anzahl von Zeilen stimmt mit der in der Instanz mysql-prod überein.

Nachdem Sie nun gesehen haben, wie Sie eine Datenbank mithilfe von Snapshots nichtflüchtiger Speicher klonen, sollten Sie versuchen, eine Datenbank mithilfe von Export und Import zu klonen. Als letzten Schritt der Anleitung für diesen zweiten Ansatz heben Sie die Bereitstellung des geklonten Laufwerks auf.

Bereitstellung des geklonten Laufwerks rückgängig machen

Führen Sie die folgenden Schritte aus, um die Bereitstellung des geklonten Laufwerks, das Sie mithilfe von Laufwerk-Snapshots erstellt haben, rückgängig zu machen:

  1. Beenden Sie in der mit der Instanz mysql-test verbundenen SSH-Sitzung den MySQL-Dienst:

    sudo service mysql stop
    
  2. Machen Sie die Bereitstellung des geklonten Laufwerks im MySQL-Datenverzeichnis rückgängig:

    sudo umount /var/lib/mysql
    
  3. Starten Sie den MySQL-Dienst neu:

    sudo service mysql start
    

Mit Export und Import klonen

Eine zweite Methode zum Klonen einer MySQL-Datenbank, die auf Compute Engine ausgeführt wird, ist die Verwendung des nativen Exports (mit mysqldump) und Imports von MySQL. Bei diesem Ansatz übertragen Sie die Exportdatei mithilfe von Cloud Storage.

In diesem Bereich der Anleitung werden Ressourcen verwendet, die Sie im Abschnitt Datenbank mit Compute Engine-Laufwerk-Snapshots klonen dieser Anleitung erstellt haben. Wenn Sie diesen Abschnitt nicht abgeschlossen haben, müssen Sie dies nachholen, bevor Sie fortfahren.

In diesem Abschnitt der Anleitung führen Sie folgende Schritte aus:

  • Cloud Storage-Bucket erstellen
  • Datenbank aus der Produktionsinstanz exportieren, indem sie in Cloud Storage geschrieben wird
  • Exportdatei in die Testinstanz importieren, indem sie aus Cloud Storage gelesen wird

Im folgenden Diagramm wird gezeigt, wie eine Datenbank geklont wird, indem mithilfe von Cloud Storage ein Export übertragen wird.

Diagramm mit einer Darstellung der Einrichtung zum Klonen einer MySQL-Datenbank mit Cloud Storage.

Da Systeme außerhalb von Google Cloud Zugriff auf Cloud Storage erhalten können, können Sie mit diesem Ansatz Datenbanken von externen MySQL-Instanzen klonen.

Cloud Storage-Bucket erstellen

Sie müssen einen Cloud Storage-Bucket erstellen, in dem die Exportdateien gespeichert werden, während Sie sie von der Instanz mysql-prod in die Instanz mysql-test übertragen.

  1. Öffnen Sie Cloud Shell.

    Zu Cloud Shell

  2. Erstellen Sie einen Cloud Storage-Bucket in derselben Region wie Ihre VM-Instanzen:

    gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
    

Datenbank exportieren

In der Produktionsumgebung können Sie bereits Sicherungen mit mysqldump-Exportdateien erstellen. Diese Sicherungen können Sie als Grundlage für das Klonen Ihrer Datenbank verwenden.

In dieser Anleitung erstellen Sie mit mysqldump eine neue Exportdatei. Dies hat keine Auswirkungen auf bereits vorhandene vollständige oder inkrementelle Sicherungspläne.

  • Exportieren Sie in der mit der Instanz mysql-prod verbundenen SSH-Sitzung die Datenbank Employees, indem Sie sie in ein Cloud Storage-Objekt im zuvor erstellten Bucket streamen:

    mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose  --hex_blob \
        --databases employees |\
         gcloud storage cp - "gs://$(gcloud config get-value project)-bucket/employees-dump.sql"
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-prod ein, wenn Sie dazu aufgefordert werden.

    Verwenden Sie beim Export den Zeichensatz utf8mb4, um Probleme mit der Zeichencodierung zu vermeiden.

    Die Option --add-drop-database wird verwendet, damit die Anweisungen DROP DATABASE und CREATE DATABASE in den Export aufgenommen werden.

Exportierte Datei importieren

  1. Streamen Sie in der SSH-Sitzung, die mit der Instanz mysql-test verbunden ist, die exportierte Datei aus dem Cloud Storage-Bucket in die mysql-Befehlszeilenanwendung:

    gcloud storage cat "gs://$(gcloud config get-value project)-bucket/employees-dump.sql" |\
        mysql --user=root -p --default-character-set=utf8mb4
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-test ein, wenn Sie dazu aufgefordert werden.

    Verwenden Sie beim Import den Zeichensatz utf8mb4, um Probleme mit der Zeichencodierung zu vermeiden.

  2. Führen Sie eine Abfrage aus, mit der die Anzahl der Zeilen in der Tabelle employees gezählt wird, um die Funktionsfähigkeit der geklonten Datenbank zu prüfen:

    mysql -u root -p -e "select count(*) from employees.employees;"
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-test ein, wenn Sie dazu aufgefordert werden.

    +----------+
    | count(*) |
    +----------+
    |   300024 |
    +----------+
    

    Die Anzahl der Zeilen stimmt mit der in der Instanz mysql-prod überein.

Cloud SQL als Klonziel verwenden

Wenn die Zieldatenbank in Cloud SQL gehostet wird und die Ursprungsdatenbank in Compute Engine, dann kann die Datenbank nur geklont werden, indem sie in Cloud Storage exportiert und dann in Cloud SQL importiert wird.

Wie in der Dokumentation zu Cloud SQL erläutert, kann Cloud SQL die exportierte Datei nur dann importieren, wenn sie keine Trigger, gespeicherten Prozeduren, Ansichten oder Funktionen enthält.

Wenn die Datenbank solche Elemente enthält, müssen Sie sie mithilfe der Befehlszeilenargumente --skip-triggers und --ignore-table [VIEW_NAME] aus dem Export ausschließen und nach dem Import manuell neu erstellen.

Cloud SQL for MySQL-Instanz erstellen

  1. Öffnen Sie Cloud Shell.

    Zu Cloud Shell

  2. Erstellen Sie eine Cloud SQL for MySQL-Instanz, auf der dieselbe Datenbankversion wie auf der Instanz mysql-prod ausgeführt wird:

    gcloud sql instances create mysql-cloudsql \
        --tier=db-n1-standard-2 --region=${REGION} --database-version MYSQL_5_7
    

    Nach einigen Minuten ist die Cloud SQL-Datenbank erstellt.

  3. Setzen Sie das Root-Nutzer-Passwort auf einen bekannten Wert zurück:

    gcloud sql users set-password root \
        --host=% --instance=mysql-cloudsql  --prompt-for-password
    

    Wenn Sie aufgefordert werden, ein Root-Passwort anzugeben, erstellen Sie ein Passwort und geben Sie es ein. Notieren Sie sich das Passwort oder bewahren Sie es vorübergehend an einem sicheren Ort auf.

Datenbank exportieren

Wenn Sie die Datenbank in einem Format exportieren möchten, das für den Import in Cloud SQL geeignet ist, müssen Sie alle Ansichten in der Datenbank ausschließen.

  1. Legen Sie in der mit der Instanz mysql-prod verbundenen SSH-Sitzung eine Umgebungsvariable fest, die eine Reihe von Befehlszeilenargumenten für den Befehl mysqldump enthält, sodass die Ansichten in der Datenbank Employees ignoriert werden:

    DATABASE_NAME=employees
    IGNORE_TABLES_ARGS="`mysql -u root -p -s -s -e \"
        SELECT CONCAT('--ignore-table ${DATABASE_NAME}.',TABLE_NAME)
        FROM information_schema.TABLES
        WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA = '${DATABASE_NAME}';
        \"`"
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-prod ein, wenn Sie dazu aufgefordert werden.

  2. Rufen Sie den Inhalt der Variablen auf, um zu prüfen, ob sie richtig festgelegt wurden:

    echo "${IGNORE_TABLES_ARGS}"
    
    --ignore-table employees.current_dept_emp
    --ignore-table employees.dept_emp_latest_date
    
  3. Exportieren Sie die Datenbank Employees ohne Trigger und Ansichten, indem Sie sie direkt in ein Cloud Storage-Objekt im zuvor erstellten Bucket streamen:

    mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose \
        --hex-blob --skip-triggers --set-gtid-purged=OFF \
        $IGNORE_TABLES_ARGS \
        --databases employees |\
        gcloud storage cp - "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-prod ein, wenn Sie dazu aufgefordert werden.

Objektberechtigungen aktualisieren

Sowohl im Cloud Storage-Bucket als auch im Exportobjekt müssen die richtigen Berechtigungen festgelegt werden, damit sie vom Cloud SQL-Dienstkonto gelesen werden können. Diese Berechtigungen werden automatisch festgelegt, wenn Sie das Objekt mithilfe der Google Cloud Console importieren. Sie können auch mithilfe von gcloud-Befehlen festgelegt werden.

  1. Cloud Shell öffnen

    Zu Cloud Shell

  2. Legen Sie eine Umgebungsvariable fest, die die Adresse des Dienstkontos Ihrer Cloud SQL-Instanz enthält:

    CLOUDSQL_SA="$(gcloud sql instances describe mysql-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Fügen Sie der Bucket-IAM-Richtlinie das Dienstkonto als Leser und Autor hinzu:

    gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \
        --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
    

Exportierte Datenbank importieren

  1. Cloud Shell öffnen

    Zu Cloud Shell

  2. Importieren Sie die exportierte Datei in Ihre Cloud SQL-Instanz:

    gcloud sql import sql mysql-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

    Geben Sie bei Aufforderung y ein.

  3. Führen Sie eine Abfrage aus, mit der die Anzahl der Zeilen in der Tabelle employees gezählt wird, um die Funktionsfähigkeit der geklonten Datenbank zu prüfen:

    echo "select count(*) from employees.employees;" |\
        gcloud sql connect mysql-cloudsql --user=root
    

    Geben Sie das zuvor erstellte Root-Passwort des Datenbankservers mysql-cloudsql ein, wenn Sie dazu aufgefordert werden.

    Die Ausgabe sieht so aus:

    Connecting to database with SQL user [root].Enter password:
    count(*)
    300024
    

    Die Anzahl der Zeilen stimmt mit der in der Instanz mysql-prod überein.

Zusätzliche Informationen zu Produktionssystemen

Laufwerk-Snapshots verwenden

Bei physischen Sicherungen (z. B. Laufwerk-Snapshots) ist es laut MySQL-Dokumentation empfehlenswert, Schreibvorgänge in die Datenbank zu unterbrechen, bevor Sie einen Snapshot erstellen. Dazu verwenden Sie den Befehl FLUSH TABLES WITH READ LOCK. Wenn der Snapshot abgeschlossen ist, können Sie die Schreibvorgänge mit UNLOCK TABLES neu starten.

Bei Datenbanken, die InnoDB-Tabellen verwenden, empfehlen wir, dass Sie den Snapshot direkt erstellen, ohne vorher den Befehl FLUSH TABLES WITH READ LOCK auszuführen. Auf diese Weise kann die Datenbank ohne negative Auswirkungen weiter ausgeführt werden, der Snapshot ist jedoch möglicherweise nicht konsistent. In diesem Fall kann die InnoDB-Engine die Tabellen jedoch in einem konsistenten Zustand neu erstellen, wenn der Klon gestartet wird.

Bei Datenbanken, die MyISAM-Tabellen verwenden, blockiert das Ausführen des Befehls FLUSH TABLES WITH READ LOCK alle Schreibvorgänge zu Tabellen, sodass Ihre Datenbank schreibgeschützt bleibt, bis Sie den Befehl UNLOCK TABLES ausführen.

Wenn Sie einen Snapshot erstellen, ohne die Tabellen vorher zu leeren und zu sperren, besteht das Risiko, dass die neu geklonte Datenbank inkonsistente Daten enthält oder beschädigt ist.

Für einen konsistenten Snapshot von Datenbanken mit MyISAM-Tabellen empfehlen wir daher, FLUSH TABLES WITH READ LOCK auf einem Lesereplikat auszuführen und einen Snapshot dieses Replikats zu erstellen, damit die Leistung der primären (Master-)Datenbank nicht beeinträchtigt wird.

Befehl mysqldump verwenden

Damit eine Exportdatei erstellt wird, die mit der Quelldatenbank konsistent ist, sperrt der Befehl mysqldump während des Exportvorgangs alle Tabellen. Dies bedeutet, dass Schreibvorgänge zur Datenbank blockiert werden, während die Datenbank exportiert wird.

Daher empfehlen wir, den Befehl mysqldump für ein Lesereplikat der primären Datenbank auszuführen, damit die primäre Datenbank nicht blockiert wird.

Bereinigen

Wenn Sie vermeiden möchten, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden, können Sie das dafür erstellte Google Cloud-Projekt löschen.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Nächste Schritte