Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Migration von MySQL zu PostgreSQL – Was Sie wissen sollten

Unabhängig davon, ob Sie eine Datenbank oder ein Projekt von MySQL zu PostgreSQL migrieren oder PostgreSQL für ein neues Projekt mit nur MySQL-Kenntnissen wählen, es gibt ein paar Dinge, die Sie über PostgreSQL und die Unterschiede zwischen den beiden Datenbanksystemen wissen sollten.

PostgreSQL ist ein vollständig Open-Source-Datenbanksystem, das unter einer eigenen Lizenz veröffentlicht wird, der PostgreSQL-Lizenz, die als „eine liberale Open-Source-Lizenz, ähnlich der BSD- oder MIT-Lizenz“ beschrieben wird. Dies hat es der PostgreSQL Global Development Group (allgemein als PGDG bezeichnet), die das Open-Source-Projekt entwickelt und pflegt, ermöglicht, das Projekt mit Hilfe von Menschen auf der ganzen Welt zu verbessern und es zu einer der stabilsten und funktionsreichsten Datenbanklösungen zu machen Heute konkurriert PostgreSQL mit den besten proprietären und Open-Source-Datenbanksystemen um Funktionen, Leistung und Popularität.

PostgreSQL ist ein äußerst kompatibles relationales Datenbanksystem, das skalierbar und anpassbar ist und von einer blühenden Community von Menschen täglich verbessert wird.

Was PostgreSQL benötigt

In einem früheren Blog haben wir die Einrichtung und Optimierung von PostgreSQL für ein neues Projekt besprochen. Es ist eine gute Einführung in die Konfiguration und das Verhalten von PostgreSQL und kann hier gefunden werden:https://severalnines.com/blog/setting-optimal-environment-postgresql.

Wenn Sie eine Anwendung von MySQL zu PostgreSQL migrieren, sollten Sie sie am besten auf einer ähnlichen Hardware oder Hosting-Plattform wie die MySQL-Quelldatenbank hosten.

Vor Ort

Wenn die Datenbank vor Ort gehostet wird, sind Bare-Metal-Hosts (statt virtuelle Maschinen) im Allgemeinen die beste Option zum Hosten von PostgreSQL. Virtuelle Maschinen fügen manchmal einige hilfreiche Funktionen hinzu, aber sie gehen zu Lasten des Verlusts von Leistung und Leistung des Hosts im Allgemeinen, während Bare Metal der PostgreSQL-Software vollen Zugriff auf die Leistung mit weniger Schichten zwischen ihr und der Hardware ermöglicht. Lokale Hosts benötigen einen Administrator, der die Datenbanken verwaltet, unabhängig davon, ob es sich um einen Vollzeitmitarbeiter oder einen Auftragnehmer handelt, je nachdem, was für die Anwendungsanforderungen sinnvoller ist.

In der Cloud

Cloud-Hosting hat in den letzten Jahren einen langen Weg zurückgelegt, und unzählige Unternehmen auf der ganzen Welt hosten ihre Datenbanken auf Cloud-basierten Servern. Da Cloud-Hosts in hohem Maße konfigurierbar sind, kann die richtige Größe und Leistung des Hosts für die spezifischen Anforderungen der Datenbank zu angemessenen Kosten ausgewählt werden.

Je nach verwendeter Hosting-Option können neue Hosts schnell bereitgestellt, Arbeitsspeicher / CPU / Festplatte schnell optimiert und sogar zusätzliche Backup-Methoden verfügbar gemacht werden. Achten Sie bei der Auswahl eines Cloud-Hosts darauf, ob ein Host dediziert oder gemeinsam genutzt wird, wobei dediziert besser für Datenbanken mit extrem hoher Auslastung ist. Ein weiterer Schlüssel besteht darin, sicherzustellen, dass die für den Cloud-Host verfügbaren IOPS gut genug für die Anforderungen der Datenbankaktivität sind. Selbst bei einem großen Speicherpool für PostgreSQL gibt es immer Festplattenoperationen, um Daten auf die Festplatte zu schreiben oder Daten abzurufen, wenn sie sich nicht im Speicher befinden.

Cloud-Dienste

Da PostgreSQL immer beliebter wird, ist es auf vielen Cloud-Datenbank-Hosting-Diensten wie Heroku, Amazon AWS und anderen verfügbar und holt schnell die Popularität von MySQL ein. Diese Dienste ermöglichen es einem Drittanbieter, eine PostgreSQL-Datenbank einfach zu hosten und zu verwalten, sodass der Fokus weiterhin auf der Anwendung liegen kann.

Konzepte / Begriffsvergleiche

Bei der Migration von MySQL zu PostgreSQL sind einige Vergleiche zu berücksichtigen, allgemeine Konfigurationsparameter, Begriffe oder Konzepte, die ähnlich funktionieren, aber ihre Unterschiede aufweisen.

Datenbankbedingungen

Verschiedene Datenbankbegriffe können innerhalb verschiedener Implementierungen der Technologie unterschiedliche Bedeutungen haben. Zwischen MySQL und PostgreSQL gibt es einige grundlegende Begriffe, die etwas anders verstanden werden, sodass manchmal eine Übersetzung erforderlich ist.

„Cluster“

In MySQL bezieht sich ein „Cluster“ normalerweise auf mehrere MySQL-Datenbankhosts, die miteinander verbunden sind, um Clients als eine einzelne Datenbank oder einen Satz von Datenbanken zu erscheinen.

Wenn in PostgreSQL auf einen „Cluster“ verwiesen wird, handelt es sich um eine einzelne laufende Instanz der Datenbanksoftware und all ihrer Unterprozesse, die dann eine oder mehrere Datenbanken enthält.

„Datenbank“

In MySQL können Abfragen gleichzeitig auf Tabellen aus verschiedenen Datenbanken zugreifen (vorausgesetzt, der Benutzer hat die Berechtigung, auf jede Datenbank zuzugreifen).

SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;

In PostgreSQL kann dies jedoch nicht passieren, es sei denn, es werden Foreign Data Wrappers verwendet (ein Thema für ein anderes Mal). Stattdessen hat eine PostgreSQL-Datenbank die Option für mehrere „Schemas“, die ähnlich wie Datenbanken in MySQL funktionieren. Schemata enthalten die Tabellen, Indizes usw. und es kann gleichzeitig über dieselbe Verbindung zu der Datenbank, in der sie sich befinden, zugegriffen werden.

SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;

Schnittstelle zu PostgreSQL

Im MySQL-Befehlszeilenclient (mysql) verwendet die Schnittstelle zur Datenbank Schlüsselfunktionen wie „DESCRIBE table“ oder „SHOW TABLES“. Der PostgreSQL-Befehlszeilenclient (psql) verwendet seine eigene Form von „Backslash-Befehlen“. Beispielsweise lautet der Befehl von PostgreSQL anstelle von „SHOW TABLES“ „\dt“, und anstelle von „SHOW DATABASES;“ lautet der Befehl „\l“.

Eine vollständige Liste der Befehle für „psql“ finden Sie mit dem Backslash-Befehl „\?“ in psql.

Sprachunterstützung

Wie MySQL verfügt PostgreSQL über Bibliotheken und Plugins für alle wichtigen Sprachen sowie ODBC-Treiber nach dem Vorbild von MySQL und Oracle. Eine großartige und stabile Bibliothek für jede benötigte Sprache zu finden, ist eine einfache Aufgabe.

Gespeicherte Prozeduren

Im Gegensatz zu MySQL bietet PostgreSQL eine breite Palette unterstützter prozeduraler Sprachen zur Auswahl. In der Basisinstallation von PostgreSQL sind die unterstützten Sprachen PL/pgSQL (SQL Procedural Language), PL/Tcl (Tcl Procedural Language), PL/Perl (Perl Procedural Language) und PL/Python (Python Procedural Language). Drittentwickler haben möglicherweise mehr Sprachen, die nicht offiziell von der PostgreSQL-Hauptgruppe unterstützt werden.

Konfiguration

  • Erinnerung

    MySQL stimmt dies mit key_buffer_size ab, wenn MyISAM verwendet wird, und mit innodb_buffer_pool_size, wenn InnoDB verwendet wird.

    PostgreSQL verwendet shared_buffers für den Hauptspeicherblock, der der Datenbank zum Zwischenspeichern von Daten zur Verfügung gestellt wird, und hält im Allgemeinen etwa 1/4 des Systemspeichers, es sei denn, bestimmte Szenarien erfordern eine Änderung. Abfragen, die Speicher zum Sortieren verwenden, verwenden den work_mem-Wert, der vorsichtig erhöht werden sollte.

Tools für die Migration

Die Migration zu PostgreSQL kann einige Arbeit erfordern, aber es gibt Tools, die die Community entwickelt hat, um bei diesem Prozess zu helfen. Im Allgemeinen konvertieren / migrieren sie die Daten von MySQL nach PostgreSQL und erstellen Tabellen / Indizes neu. Gespeicherte Prozeduren oder Funktionen sind eine andere Geschichte und erfordern normalerweise manuelles Umschreiben, entweder teilweise oder von Grund auf.

Einige verfügbare Beispieltools sind pgloader und FromMySqlToPostgreSql. Pgloader ist ein in Common Lisp geschriebenes Tool, das mit dem COPY-Befehl Daten aus MySQL in PostgreSQL importiert und Daten, Indizes, Fremdschlüssel und Kommentare mit Datenkonvertierung lädt, um die Daten wie vorgesehen in PostgreSQL korrekt darzustellen. FromMySqlToPostgreSql ist ein ähnliches Tool, das in PHP geschrieben ist und MySQL-Datentypen sowie Fremdschlüssel und Indizes in PostgreSQL konvertieren kann. Beide Tools sind kostenlos, es gibt jedoch viele andere Tools (kostenlos und kostenpflichtig), die neu entwickelt werden, wenn neue Versionen der jeweiligen Datenbanksoftware veröffentlicht werden.

Die Konvertierung sollte nach der Migration immer eine gründliche Bewertung beinhalten, um sicherzustellen, dass die Daten korrekt konvertiert wurden und die Funktionalität wie erwartet funktioniert. Es wird immer empfohlen, vorher zu testen, um Timings und Datenvalidierung zu gewährleisten.

Replikationsoptionen

Wenn Sie von MySQL kommen, wo die Replikation verwendet wurde oder aus irgendeinem Grund überhaupt eine Replikation erforderlich ist, stehen Ihnen für PostgreSQL mehrere Optionen zur Verfügung, jede mit ihren eigenen Vor- und Nachteilen, je nachdem, was durch die Replikation benötigt wird.

  • Integriert:

    Standardmäßig verfügt PostgreSQL über einen eigenen integrierten Replikationsmodus für Point-In-Time-Recovery (PITR). Dies kann entweder über den dateibasierten Protokollversand eingerichtet werden, bei dem Write-Ahead-Protokolldateien an einen Standby-Server gesendet werden, wo sie gelesen und wiedergegeben werden, oder über die Streaming-Replikation, bei der ein schreibgeschützter Standby-Server Transaktionsprotokolle über eine Datenbankverbindung zur Wiedergabe abruft sie.

    Jede dieser integrierten Optionen kann entweder als „Warm-Standby“ oder „Hot-Standby“ eingerichtet werden . Ein „Hot-Standby“ ermöglicht schreibgeschützten Verbindungen, sich zu verbinden und Abfragen zu stellen, und ist außerdem jederzeit bereit, bei Bedarf auch ein Lese-/Schreib-Master zu werden.

  • Slony:

    Eines der ältesten Replikationstools für PostgreSQL ist Slony, eine Trigger-basierte Replikationsmethode, die ein hohes Maß an Anpassung ermöglicht. Slony ermöglicht die Einrichtung eines Master-Knotens und einer beliebigen Anzahl von Replica-Knoten sowie die Möglichkeit, den Master auf jeden gewünschten Knoten umzuschalten, und ermöglicht dem Administrator, auszuwählen, welche Tabellen (wenn nicht alle Tabellen) repliziert werden sollen. Es wurde nicht nur zum Replizieren von Daten im Falle eines Ausfalls / Lastausgleichs verwendet, sondern auch zum Versenden bestimmter Daten an andere Dienste oder sogar für Upgrades mit minimaler Ausfallzeit, da die Replikation über verschiedene Versionen von PostgreSQL hinweg erfolgen kann.

    Slony hat die Hauptanforderung, dass jede zu replizierende Tabelle entweder einen PRIMARY KEY oder einen UNIQUE-Index ohne nullfähige Spalten hat.

  • Bucardo:

    Wenn es um Multi-Master-Optionen geht, ist Bucardo einer der wenigen für PostgreSQL. Wie Slony ist es ein Softwarepaket von Drittanbietern, das auf PostgreSQL aufsetzt. Bucardo nennt sich selbst „ein asynchrones PostgreSQL-Replikationssystem, das sowohl Multi-Master- als auch Multi-Slave-Operationen ermöglicht“. Der Hauptvorteil ist die Multi-Master-Replikation, die recht gut funktioniert, jedoch keine Konfliktlösung aufweist, daher sollten Anwendungen mögliche Probleme erkennen und entsprechend beheben.

    Es gibt auch viele andere Replikationstools, und die Auswahl des für eine Anwendung am besten geeigneten Tools hängt von den spezifischen Anforderungen ab.

Laden Sie noch heute das Whitepaper PostgreSQL-Verwaltung und -Automatisierung mit ClusterControl herunterErfahren Sie, was Sie wissen müssen, um PostgreSQL bereitzustellen, zu überwachen, zu verwalten und zu skalierenLaden Sie das Whitepaper herunter

Gemeinschaft

PostgreSQL hat eine blühende Community, die bereit ist, bei allen Problemen / Informationen zu helfen, die möglicherweise benötigt werden.

  • IRC

    Ein aktiver IRC-Chatroom namens #postgresql ist auf freenode verfügbar, da Administratoren und Entwickler weltweit über PostgreSQL und verwandte Projekte / Probleme chatten. Es gibt noch kleinere Räume für Besonderheiten wie Slony, Bucardo und mehr.

  • Mailinglisten

    Es gibt eine Handvoll PostgreSQL-Mailinglisten für „Allgemein“, „Admin“, „Leistung“ und sogar „Anfänger“ (ein großartiger Ausgangspunkt, wenn Sie neu bei PostgreSQL im Allgemeinen sind). Die Mailinglisten werden von vielen auf der ganzen Welt abonniert und bieten eine sehr nützliche Fülle von Ressourcen, um alle Fragen zu beantworten, die beantwortet werden müssen.

    Eine vollständige Liste der PostgreSQL-Mailinglisten finden Sie unter https://www.postgresql.org/list/

  • Benutzergruppen

    Benutzergruppen sind ein großartiger Ort, um sich in der Community zu engagieren und aktiv zu werden, und viele große Städte weltweit haben eine PostgreSQL-Benutzergruppe (PUG), der Sie beitreten und an der Sie teilnehmen können, und wenn nicht, sollten Sie erwägen, eine zu gründen. Diese Gruppen eignen sich hervorragend, um Kontakte zu knüpfen, neue Technologien kennenzulernen und einfach nur persönlich Fragen an Personen mit unterschiedlichen Erfahrungsstufen zu stellen.

  • Dokumentation

    Am wichtigsten ist, dass PostgreSQL sehr gut dokumentiert ist. Alle Informationen zu Konfigurationsparametern, SQL-Funktionen und Verwendung können leicht über die offizielle Dokumentation auf der Website von PostgreSQL abgerufen werden. Bei Unklarheiten hilft die Community bei den zuvor skizzierten Möglichkeiten weiter.