Connexion à MySQL Server (FireDAC)

De Appmethod Topics
Aller à : navigation, rechercher

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

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

Versions supportées

Le pilote natif FireDAC supporte MySQL Server Community Edition, Enterprise Edition et Embedded Edition version 3.21 et ultérieure.

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

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.
  • tout autre dossier, en spécifiant dans FireDAC\DB\ADDrivers.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 Linux

FireDAC requiert :

  • la bibliothèque client libmysqlclient.so x86 ou x64.

Pour installer sur Linux, utilisez les commandes :

 sudo apt-get update
 sudo apt-get install libmysqlclient16
 sudo ln -s /usr/lib/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so

Logiciel client Mac OS X

FireDAC requiert :

  • la bibliothèque client libmysqlclient.dylib x86.

Vous pouvez la télécharger sous forme de Connecteur/C pour Mac 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.0.2-osx10.5-x86-32bit.tar

Logiciel client iOS

L'article explique comment construire libmysqlclient.dylib pour iOS.

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

Liaison du pilote

Pour lier le pilote :

Paramètres de définition de la connexion

Pour se connecter à un SGBD MySQL, la plupart des applications vous demandent de spécifier DriverID, Server, Database, User_Name, Password, CharacterSet.

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 forme dtBoolean.
  • Integer - les colonnes TINYINT(1) sont représentées sous 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 vous n'utilisez que des messages en anglais, copiez share\english\errmsg.sys dans <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 vous utilisez d'autres jeux de caractères qu'ASCII, copiez share\english\charsets dans <dossier LIBMYSQLD>, en conservant la structure des 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 : multiples
  • Messages : multiples
  • 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

  • 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
  • Connexion à un serveur distant, en utilisant une connexion SSL :
 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

Voir aussi