Herstellen einer Verbindung zu MySQL Server (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenbankkonnektivität (FireDAC)

In diesem Thema wird beschrieben, wie eine Verbindung zu MySQL Server hergestellt wird.

Unterstützte Versionen

Der native FireDAC-Treiber unterstützt:

  • MySQL Server Community-, Enterprise- und Embedded-Editionen von Version 3.21 bis zu Version 8.0.23.
  • MariaDB von Version 5.5 bis zu Version 10.6. Außerdem wurde mit RAD Studio 11.1 die Unterstützung für 10.6-Server mit einem 10.6-Client hinzugefügt.

Client-Software

Windows-Client-Software

Tipp: Die RAD Studio-IDE arbeitet in 32 Bit, deshalb kann keine Verbindung mit MySQL 8.0 hergestellt werden, das nur in 64 Bit erhältlich ist. Um dieses Verbindungsproblem zu vermeiden, können Sie MySQL 5.7.29, die neueste 32-Bit-Version von MySQL, verwenden.

Für FireDAC ist eine der folgenden Bibliotheken erforderlich:

  • Die Client-Bibliothek LIBMYSQL.DLL zum Herstellen einer Verbindung mit dem MySQL-Server.
  • Die eingebettete Serverbibliothek LIBMYSQLD.DLL. Siehe MySQL Embedded-Server weiter unten in diesem Thema.

Sie können diese Bibliotheken aus dem Ordner "Bin" oder "Lib" einer Serverinstallation (Details (EN)) übernehmen und in einen der folgenden Ordner kopieren:

  • in einen in der Umgebungsvariable PATH aufgeführten Ordner (z. B. <Windows>\SYSTEM32)
  • In Ihren Anwendungs-EXE-Ordner.

Zum Herstellen einer Verbindung zu einer 64-Bit-Version von MySQL 8.0 zur Laufzeit benötigen Sie Folgendes:

  • LIBMYSQL.DLL.
  • VS2015 Laufzeit 64 Bit.
  • Zwei Bibliotheken aus dem MySQL MSVC++ Connectors-Paket der Version 8.0:
  • LIBCRYPTO-1_1-x64.DLL.
  • LIBSSL-1_1-x64.DLL.
Hinweis: Wenn Sie einen 64-Bit-SQL-Server verwenden, sind auch die Client-DLLs 64 Bit. Laden Sie die 32-Bit-DLLs von [http://dev.mysql.com/downloads/connector/c/#downloads

herunter, um zur Entwurfszeit eine Verbindung herzustellen oder um diesen Server mit einer 32-Bit-Anwendung zu verwenden.

Alternativ können Sie die erforderlichen Dateien in einen beliebigen anderen Ordner kopieren und ihren Pfad in FDDrivers.ini angeben:

[MySQL]
VendorLib=<folder>\libmysql.dll

Wenn die MySQL-Client-Bibliothek nicht ordnungsgemäß installiert wurde, wird beim Verbindungsversuch eine Exception ausgelöst:

[FireDAC][Phys][MySQL]-314. Cannot load vendor library [libmysql.dll]. The specified module could not be found. Check [libmysql.dll], which is located in one of the PATH directories or in application EXE directory.

macOS-Client-Software

FireDAC benötigt:

  • die x86-Client-Bibliothek libmysqlclient.dylib.

Sie können sie als Connector/C für macOS (hier) herunterladen und in den Ordner "/usr/local" mit dem folgenden Befehl extrahieren:


sudo tar -C /usr/local -zxvf mysql-connector-c-6.1.6-osx10.8-x86.tar.gz

iOS-Client-Software

Im Artikel (Weitere Informationen) wird erklärt, wie libmysqlclient.dylib für iOS erzeugt wird.

Hinweis: Embarcadero Technologies hat dies nicht getestet und bietet dafür auch keine Unterstützung an.

Linux-Client-Software

Um die MySQL-Client-Bibliothek zu installieren:

  1. Auf Ubuntu Server 16.04 LTS, führen Sie aus:
    sudo apt-get install libmysqlclient20
    sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 /usr/lib/x86_64-linux-gnu/libmysqlclient.so
    
  2. Auf Red Hat Enterprise Linux 7, führen Sie aus:
    sudo yum install mysql-libs
    sudo ln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.so
    

Treibereinbindung

So binden Sie den Treiber ein:

Verbindungsdefinitionsparameter

Für eine Verbindung mit einem MySQL-DBMS ist für die meisten Anwendungen die Angabe von DriverID, Server, Database, User_Name, Password und CharacterSet erforderlich (Einzelheiten finden Sie unter Definieren von Verbindungen (FireDAC)).

DriverID=MySQL

Parameter Beschreibung Beispielwert
Server Die TCP/IP-Adresse oder der Host-Name des Servers, auf dem ein MySQL-Server ausgeführt wird. 127.0.0.1
Port Der TCP/IP-Port, über den der MySQL-Server empfängt. 3306
Database Name der aktuellen Datenbank für die Verbindung. Wenn "Database" nicht angegeben ist, wird keine aktuelle Datenbank eingerichtet. MyDB
User_Name Die MySQL-Benutzer-ID. root
Password Das MySQL-Benutzerpasswort.
CharacterSet Der Standardzeichensatz für die Verbindung. Die Sortierfolge der Verbindung wird zur Standardsortierfolge des Zeichensatzes. Einzelheiten finden Sie bei der Anweisung SET NAMES. cp1251
Compress Geben Sie True an, um die Komprimierung des Netzwerkverkehrs zu aktivieren. Standardmäßig ist dieser Parameter auf False gesetzt.
UseSSL

Geben Sie True an, um eine SSL-Verbindung zu aktivieren. Standardmäßig ist dieser Parameter auf False gesetzt. Wenn Sie "UseSSL=True" angeben, müssen Sie zusätzlich die Verbindungsdefinitionsparameter angeben:

  • SSL_key – ist der Pfadname zur Schlüsseldatei.
  • SSL_cert – ist der Pfadname zur Zertifikatsdatei.
  • SSL_cat – ist der Pfadname zur Zertifizierungsinstanzdatei.
  • SSL_capath – ist der Pfadname zu einem Verzeichnis, das vertrauenswürdige SSL-CA-Zertifikate im PEM-Format enthält.
  • SSL_cipher – ist eine Liste mit zulässigen Chiffren für die SSL-Verschlüsselung.

Weitere Einzelheiten finden Sie in der MySQL-Dokumentation:

True
LoginTimeout Steuert die Dauer in Sekunden bis zur Zeitüberschreitung einer Anwendung beim Versuch, eine Verbindung herzustellen. 30
ReadTimeout Die Zeitüberschreitung in Sekunden für Versuche vom Server zu lesen. Jeder Versuch verwendet diesen Zeitüberschreitungswert und bei Bedarf sind Neuversuche möglich, sodass der effektive Gesamt-Zeitüberschreitungswert dreimal höher als der Optionswert ist. Sie können diesen Wert festlegen, damit eine abgebrochene Verbindung früher als durch den von TCP/IP Close_Wait_Timeout gesetzten Wert von 10 Minuten entdeckt werden kann. Diese Option kann nur für TCP/IP-Verbindungen und vor MySQL 5.1.12 nur für Windows verwendet werden. Dieser Parameter ist standardmäßig nicht festgelegt. 5
WriteTimeout Die Zeitüberschreitung in Sekunden für Versuche auf den Server zu schreiben. Jeder Versuch verwendet diesen Zeitüberschreitungswert und bei Bedarf sind net_retry_count Neuversuche möglich, sodass der effektive Gesamt-Zeitüberschreitungswert net_retry_count mal höher als der Optionswert ist. Diese Option kann nur für TCP/IP-Verbindungen und vor MySQL 5.1.12 nur für Windows verwendet werden. Dieser Parameter ist standardmäßig nicht festgelegt. 5
ResultMode

Steuert das Abrufen einer Ergebnismenge auf den Client. Der Vorgabewert ist Store.

  • Store – ruft direkt nach der Ausführung der Abfrage alle Zeilen ab und speichert sie auf einem Client, wodurch der Serverprozess für neue Anforderungen bereit wird.
  • Use – Zeilen werden bei Bedarf von einem Client abgerufen. Der Server kann so lange keine neuen Anforderungen verarbeiten, bis alle Zeilen der Ergebnismenge abgerufen wurden. Damit können Sie die Speicherauslastung bei sehr großen Ergebnismengen reduzieren.
  • Choose – FireDAC wählt automatisch einen Modus aus. Wenn FetchOption.Mode entweder fmAll oder fmExactRecsMax ist, dann "Store", ansonsten "Use".
Use
TinyIntFormat

Steuert die TINYINT(1)-Darstellung. Der Vorgabewert ist Boolean.

  • Boolean – TINYINT(1)-Spalten werden als dtBoolean dargestellt.
  • Integer – TINYINT(1)-Spalten werden als dtSByte oder dtByte dargestellt.
Integer
MetaDefCatalog Standarddatenbankname. Im Entwurfszeitcode wird der Katalogname im Objektnamen weggelassen, wenn er MetaDefCatalog entspricht. Durch Festlegen von MetaDefCatalog wird die aktuelle Datenbank in der MySQL-Sitzung nicht geändert. MyDB

MySQL Embedded-Server

Wichtig:

  • Alle Pfadargumentwerte verwenden Unix-Backslashes (umgekehrte Schrägstriche). Sie können Pfade relativ zum Anwendungs-EXE-Ordner angeben, wodurch die Bereitstellung vereinfacht wird.
  • libmysqld.dll und errmsg.sys müssen dieselbe Version haben.
  • libmysqld.dll v 5.1.34, wie wahrscheinlich einige andere Versionen, ist beschädigt und funktioniert nicht. Aktualisieren Sie auf eine andere Version.
  • Die allgemeine Einrichtung von MySQL Embedded kann schwierig sein. Hinweise für eine vereinfache Einrichtung finden Sie in den Beispielen weiter unten.
  • Im Falle von inkorrekten Argumenten bei der Initialisierung von libmysqld.dll kann die Anwendung ohne Meldung beendet werden.

Führen Sie die folgenden Aktionen aus, um Ihre Anwendung für die Zusammenarbeit mit einem MySQL Embedded-Server vorzubereiten:

  • Fügen Sie die Komponente TFDPhysMySQLDriverLink in Ihre Anwendung ein. Beachten Sie, dass mit "Argument hinzufügen" das Hinzufügen eines Arguments zur Liste TFDPhysMySQLDriverLink.EmbeddedArgs gemeint ist. Optional können Sie die Treiberkonfigurationsdatei verwenden.
  • Kopieren Sie LIBMYSQLD.DLL in den Anwendungs-EXE-Ordner. Wenn dieser Ordner vom Ordner mit der ausführbaren Datei der Anwendungs abweicht, fügen Sie das Argument --basedir=<LIBMYSQLD-Ordner> hinzu, und setzen Sie TADPhysMySQLDriverLink.VendorLib auf <LIBMYSQLD-Ordner>\LIBMYSQLD.DLL.
  • Wenn nur englische Meldungen verwendet werden, kopieren Sie share\english\errmsg.sys in den <LIBMYSQLD-Ordner>, und fügen Sie das Argument --language=<LIBMYSQLD-Ordner> hinzu. Wenn mehrsprachige Meldungen verwendet werden, kopieren Sie die entsprechenden Ordner aus share\* in den <LIBMYSQLD-Ordner>, und behalten Sie die Verzeichnisstruktur bei. Sie müssen das Argument --language nicht hinzufügen, weil <LIBMYSQLD-Ordner>\share\* der Standardspeicherort ist.
  • Wenn andere Zeichensätze als ASCII verwendet werden, kopieren Sie share\english\charsets in den <LIBMYSQLD-Ordner>, und behalten Sie die Verzeichnisstruktur bei. Das Argument--character-sets-dir muss nicht hinzugefügt werden, weil <LIBMYSQLD-Ordner>\share\charsets der Standardspeicherort ist.
  • Wenn sich die Datenbankdateien in anderen Ordnern als dem <LIBMYSQLD-Ordner> befinden, fügen Sie das Argument --datadir=<Datenbankdateien-Ordner> hinzu. Für die Version 5.6.11 ist die Angabe dieses Arguments erforderlich.
  • Wenn die InnoDB-Engine nicht verwendet wird, fügen Sie das Argument --skip-innodb hinzu. Fügen Sie andernfalls das Argument --innodb_data_home_dir=<Datenbankdateien-Ordner> hinzu, wobei der Wert das InnoDB-Datenspeicherverzeichnis ist.
  • Wenn Ihre Anwendung keine Verbindung zu einem Remote-MySQL-Server herstellt, fügen Sie das Argument --skip-networking hinzu.
  • Wenn Ihre Anwendung eine externe Einstellungsdatei verwendet, fügen Sie das Argument --defaults-file=my.ini hinzu.
  • Wenn Ihre Anwendung MySQL-Plug-ins verwendet, fügen Sie das Argument --plugin_dir=<Plug-in-Ordner> hinzu. Normalerweise befinden sich Plug-ins im <LIBMYSQLD-Ordner>\lib\plugin.
  • Fügen Sie weitere Argumente zur Leistungsoptimierung hinzu.


Um eine Verbindung zu einem MySQL Embedded-Server herzustellen, müssen Sie die Verbindungsdefinitionsparameter "Server", "Host", "Port", "User_Name" und "Password" nicht angeben. Wenn Sie das Argument --skip-networking nicht angeben, dann können Sie mithilfe der Datei libmysqld.dll eine Verbindung zu Remote-MySQL-Servern herstellen, genauso wie mit der normalen libmysql.dll.

Einfaches Konfigurationsbeispiel:

  • Zeichensätze: Nur ASCII
  • Meldungen: Nur Englisch
  • Datenbank: der EXE-Ordner


App folder:
  <app>.EXE
  LIBMYSQLD.DLL
  errmsg.sys
  <DB files>
Arguments:
  --datadir=./
  --language=./
  --skip-innodb
  --skip-networking

Erweitertes Konfigurationsbeispiel:

  • Zeichensätze: mehrere
  • Meldungen: mehrere
  • Datenbank: Unterordner "data"


App folder:
  <app>.EXE
  LIBMYSQLD.DLL
  share\*
  share\charsets
  data\*
  data\<DB files>
Arguments:
  --datadir=./data
  --skip-innodb
  --skip-networking

Anwendungsfälle

Verwenden einer sicheren Verbindung

Legen Sie für die Verwendung der TLS/SSL-Verschlüsselung den Parameter UseSSL auf den Wert True fest, und geben Sie dann die Parameter SSL_key, SSL_cert und SSL_ca wie folgt an:


DriverID=MySQL
Server=mysrv
Port=3307
Database=addemo
UseSSL=True
SSL_ca=ca-cert.pem
SSL_cert=client-cert.pem
SSL_key=client-key.pem

Sie können auch die Parameter SSL_capath und SSL_cipher verwenden; weitere Informationen finden Sie beim Eintrag UseSSL in der obigen Tabelle Verbindungsdefinitionsparameter.

Hinweis: Sie können auch die Konfigurationsdatei my.cnf verwenden.

Weitere Anwendungsfälle

  • Herstellen einer Verbindung zu einem lokal ausgeführtem Server, der über den Standard-Port (3306) empfängt:


DriverID=MySQL
Database=addemo
User_Name=root
Password=
  • Herstellen einer Verbindung zu einem Remote-Server, der nicht über den Standard-Port empfängt, unter Verwendung von Unicode für Zeichendaten:


DriverID=MySQL
Server=mysrv
Port=3307
Database=addemo
CharacterSet=utf8
User_Name=me
Password=123
  • Herstellen einer Verbindung zu einem eingebetteten Server unter Verwendung von Unicode für Zeichendaten:


DriverID=MySQL
Database=addemo
CharacterSet=utf8

Siehe auch

Beispiel