Connexion à MySQL Server (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Connectivité des bases de données (FireDAC)

Cette rubrique explique comment établir une connexion à MySQL Server.

Versions prises en charge

Le pilote natif FireDAC prend en charge :

  • MySQL Server Community Edition, Enterprise Edition et Embedded Edition version 3.21 et ultérieure.
  • MariaDB 5.5 et versions ultérieures.

Logiciel client

Logiciel client Windows

FireDAC requiert l'une des bibliothèques x86 ou x64 suivantes :

  • La bibliothèque client LIBMYSQL.DLL pour établir la connexion à MySQL Server. Dans l'idéal, sa version doit être équivalente à celle du serveur.
  • La bibliothèque du serveur embarqué LIBMYSQLD.DLL. Voir Serveur MySQL embarqué plus loin dans cette rubrique.

Vous pouvez les extraire du dossier Bin ou Lib d'installation d'un serveur (détails) et les placer dans :

  • un dossier inclus dans votre variable d'environnement PATH (par exemple, <Windows>\SYSTEM32)
  • le dossier EXE de votre application.

Remarque : Si vous utilisez un serveur SQL 64 bits, les DLL client seront également en 64 bits. Pour établir une connexion à la conception, ou pour utiliser ce serveur avec une compilation 32 bits, téléchargez les DLL 32 bits depuis http://dev.mysql.com/downloads/connector/c/#downloads.

tout autre dossier, en spécifiant dans FDDrivers.ini :

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

Si la bibliothèque client MySQL n'a pas été installée correctement, une exception est déclenchée quand vous essayez de vous connecter :

[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.

Logiciel client OS X

FireDAC requiert :

  • la bibliothèque client libmysqlclient.dylib x86.

Vous pouvez la télécharger sous forme de Connecteur/C pour OS X (ici) et l'extraire dans le dossier /usr/local, à l'aide de la commande :


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

Logiciel client iOS

L'article (plus d'informations (EN)) explique comment construire libmysqlclient.dylib pour iOS.

Notez que Embarcadero Technologies n'a pas testé ce produit et ne fournit pas d'assistance pour lui.

Logiciel client Linux

Pour installer la bibliothèque client MySQL :

  1. Sur Ubuntu Server 16.04 LTS, exécutez :
    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. Sur Red Hat Enterprise Linux 7, exécutez :
    sudo yum install mysql-libs
    sudo ln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.so
    

Liaison du pilote

Pour lier le pilote :

Paramètres de définition de la connexion

Pour établir une connexion au SGBD MySQL, la plupart des applications requièrent que vous spécifiiez DriverID, Server, Database, User_Name, Password, et CharacterSet. Pour plus de détails, voir Définition d'une connexion (FireDAC).

DriverID=MySQL

Paramètre Description Valeur exemple
Server Adresse TCP/IP ou nom d'hôte du serveur exécutant un serveur MySQL. 127.0.0.1
Port Port TCP/IP sur lequel le serveur MySQL écoute. 3306
Database Nom de la base de données en cours pour la connexion. Si ce paramètre n'est pas spécifié, aucune base de données n'est configurée. MyDB
User_Name ID utilisateur MySQL. root
Password Mot de passe utilisateur MySQL.
CharacterSet Jeu de caractères par défaut de la connexion. Le classement de la connexion devient le classement par défaut du jeu de caractères. Pour plus de détails, voir l'instruction SET NAMES. cp1251
Compress Spécifiez True pour activer la compression du trafic réseau. La valeur par défaut est False.
UseSSL

Spécifiez True pour activer la connexion SSL. La valeur par défaut est False. L'attribution de la valeur True à UseSSL requiert en outre la spécification des paramètres de définition de connexion suivants :

  • SSL_key -- chemin du fichier de clés.
  • SSL_cert -- chemin du fichier de certificat.
  • SSL_ca -- chemin du fichier de l'autorité de certificat.
  • SSL_capath -- chemin vers un répertoire contenant des certificats SSL CA de confiance au format pem.
  • SSL_cipher -- liste des chiffrements autorisés pour utiliser le cryptage SSL.

Pour plus d'informations, voir la documentation MySQL :

True
LoginTimeout Contrôle la durée, en secondes, s'écoulant avant qu'une application dépasse le temps imparti pour établir la connexion. 30
ReadTimeout Délai, en secondes, pour tenter de lire à partir du serveur. Comme chaque tentative utilise cette valeur et que plusieurs tentatives peuvent s'avérer nécessaires, la valeur totale du délai efficace équivaut à trois fois la valeur de l'option. Vous pouvez définir ce paramètre de façon à ce qu'une connexion perdue puisse être détectée avant la valeur TCP/IP Close_Wait_Timeout de 10 minutes. Cette option fonctionne uniquement pour les connexions TCP/IP et, pour les versions antérieures à MySQL 5.1.12, uniquement pour Windows. Par défaut, elle n'est pas définie. 5
WriteTimeout Délai, en secondes, pour tenter d'écrire sur le serveur. Comme chaque tentative utilise cette valeur et que plusieurs tentatives net_retry_count peuvent s'avérer nécessaires, la valeur totale du délai efficace équivaut à net_retry_count fois la valeur de l'option. Cette option fonctionne uniquement pour les connexions TCP/IP et, pour les versions antérieures à MySQL 5.1.12, uniquement pour Windows. Par défaut, elle n'est pas définie. 5
ResultMode

Contrôle l'extraction d'un ensemble de résultats vers un client. La valeur par défaut est Store.

  • Store -- extrait toutes les lignes juste après l'exécution de la requête et les stocke sur un client, laissant le processus serveur prêt pour d'autres requêtes.
  • Use -- les lignes sont extraites sur demande à partir d'un client. Le serveur ne peut pas traiter les nouvelles requêtes tant que toutes les lignes de l'ensemble de résultats ne sont pas extraites. Vous pouvez ainsi réduire l'utilisation de la mémoire sur les ensembles de résultats très volumineux.
  • Choose -- FireDAC choisit automatiquement un mode. Si FetchOption.Mode est paramétré sur fmAll ou fmExactRecsMax, utilisez la valeur "Store" ; sinon, utilisez "Use".
Use
TinyIntFormat

Contrôle la représentation TINYINT(1). La valeur par défaut est Boolean.

  • Boolean - les colonnes TINYINT(1) sont représentées sous la forme dtBoolean.
  • Integer - les colonnes TINYINT(1) sont représentées sous la forme dtSByte ou dtByte.
Integer
MetaDefCatalog Nom de la base de données par défaut. En mode conception, le code exclut le nom du catalogue du nom d'objet s'il est égal à MetaDefCatalog. Le fait de définir MetaDefCatalog ne change pas la base de données actuelle dans la session MySQL. MyDB

Serveur MySQL Embarqué

Important :

  • Toutes les valeurs relatives aux arguments de chemin utilisent des barres obliques Unix. Vous pouvez spécifier des chemins par rapport au dossier EXE de l'application, ce qui simplifie le déploiement.
  • libmysqld.dll et errmsg.sys doivent être de la même version.
  • libmysqld.dll v 5.1.34, comme probablement d'autres versions, est endommagée et ne fonctionne pas. Effectuer la mise à jour vers une autre version.
  • La configuration générale de MySQL Embarqué peut s'avérer complexe. Vous trouverez plus loin des exemples simplifiant ce processus.
  • En cas d'arguments incorrects pour l'initialisation de libmysqld.dll, l'application peut se terminer en mode silencieux.

Pour préparer votre application à fonctionner avec un serveur MySQL Embarqué, procédez comme suit :

  • Incluez le composant TFDPhysMySQLDriverLink dans votre application. Veuillez noter que "ajouter un argument" signifie "ajouter un argument à la liste TFDPhysMySQLDriverLink.EmbeddedArgs". Vous pouvez également utiliser le fichier de configuration des pilotes.
  • Copiez LIBMYSQLD.DLL dans le dossier exécutable de l'application. Si ce dossier diffère du dossier exécutable de l'application, ajoutez l'argument --basedir=< dossier LIBMYSQLD> et définissez TADPhysMySQLDriverLink.VendorLib sur <dossier LIBMYSQLD >\LIBMYSQLD.DLL.
  • Si seuls des messages en anglais sont utilisés, copiez share\english\errmsg.sys vers <dossier LIBMYSQLD > et ajoutez l'argument --language=<dossier LIBMYSQLD >. Si vous utilisez des messages en plusieurs langues, copiez les dossiers appropriés de share\* vers <dossier LIBMYSQLD>, en conservant la structure des répertoires. Il est inutile d'ajouter l'argument --language, car <dossier LIBMYSQLD>\share\* est l'emplacement par défaut.
  • Si les jeux de caractères utilisés ne sont pas ASCII, copiez share\english\charsets vers <dossier LIBMYSQLD >, en préservant la structure de répertoires. Il est inutile d'ajouter l'argument --character-sets-dir, car <dossier LIBMYSQLD>\share\charsets est l'emplacement par défaut.
  • Si les fichiers de la base de données se trouvent dans d'autres dossiers que <dossier LIBMYSQLD>, ajoutez l'argument --datadir=<dossier des fichiers de la base de données>. Avec la version 5.6.11, vous devez spécifier cet argument.
  • Si le moteur InnoDB n'est pas utilisé, ajoutez l'argument --skip-innodb. Sinon, ajoutez l'argument --innodb_data_home_dir=<dossier des fichiers de la base de données>, dont la valeur est le répertoire de l'espace de données InnoDB.
  • Si votre application ne se connecte pas à un serveur MySQL distant, ajoutez l'argument --skip-networking.
  • Si votre application utilise un fichier de paramètres externe, ajoutez l'argument --defaults-file=my.ini.
  • Si votre application utilise des plugins MySQL, ajoutez l'argument --plugin_dir=<dossier des plugins>. Normalement, les plugins se trouvent dans <dossier LIBMYSQLD>\lib\plugin.
  • Ajoutez les arguments appropriés pour optimiser les performances.


Pour vous connecter au serveur MySQL embarqué, il est inutile de spécifier les paramètres de définition de connexion Server, Host, Port, User_Name, Password. Si vous ne spécifiez pas l'argument --skip-networking, vous pouvez utiliser libmysqld.dll pour vous connecter aux serveurs MySQL distants, comme avec le fichier libmysql.dll normal.

Exemple de configuration simple :

  • Jeux de caractères : ASCII uniquement
  • Messages : anglais uniquement
  • Base de données : dossier EXE


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

Exemple de configuration étendue :

  • Jeux de caractères : multiple
  • Messages : multiple
  • Base de données : sous-dossier "données"


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

Exemples d'utilisation

Utilisation d'une connexion sécurisée

Pour utiliser l'encryptage TLS/SSL, définissez le paramètre UseSSL avec True comme valeur, puis spécifiez les paramètres SSL_key, SSL_cert et SSL_ca comme suit :


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

Vous pouvez aussi utiliser les paramètres SSL_capath et SSL_cipher. Voir l'entrée UseSSL dans le tableau Paramètres de définition de la connexion ci-dessus pour plus d'informations.

Remarque : Vous pouvez aussi utiliser le fichier de configuration my.cnf.

Autres cas d'utilisation

  • Connexion à un serveur exécuté localement, écoutant sur le port par défaut (3306) :


DriverID=MySQL
Database=addemo
User_Name=root
Password=
  • Connexion à un serveur distant, écoutant sur un port autre que le port par défaut, en utilisant Unicode pour les données des caractères :


DriverID=MySQL
Server=mysrv
Port=3307
Database=addemo
CharacterSet=utf8
User_Name=me
Password=123
  • Connexion à un serveur embarqué, en utilisant Unicode pour les données des caractères :


DriverID=MySQL
Database=addemo
CharacterSet=utf8

Voir aussi

Exemples