MySQL サーバーへの接続(FireDAC)

提供: RAD Studio
移動先: 案内検索

データベース接続(FireDAC) への移動

このトピックでは、MySQL Server への接続方法を説明します。

サポート対象バージョン

FireDAC ネイティブ ドライバは次をサポートしています:

  • MySQL Server Community、Enterprise、Embedded の各エディションのバージョン 3.21 以降。
  • MariaDB 5.5 以降。

クライアント ソフトウェア

Windows 版クライアント ソフトウェア

ヒント: RAD Studio IDE は 32 ビットで動作します。このため、MySQL 8.0 に接続できません(これは 64 ビットでのみ使用可能なため)。 この接続の問題を回避するため、MySQL の 32 ビットの最新版である MySQL 5.7.29 を使用することができます。

FireDAC では以下のライブラリのいずれかが必要です:

  • MySQL サーバーへの接続用 LIBMYSQL.DLL クライアント ライブラリ。
  • LIBMYSQLD.DLL 組み込みサーバー ライブラリ。 本トピックの以降にある、「MySQL 組み込みサーバー」をを参照してください。

これらのファイルは、サーバー(詳細)のインストール フォルダの Bin または Lib フォルダから取得して、以下の場所に置くことができます。

  • PATH 環境変数値に含まれているフォルダ(たとえば <Windows>\SYSTEM32 など)
  • アプリケーションの EXE ファイルのフォルダ

実行時に MySQL 8.0 の 64 ビット版に接続するには、次が必要です:

  • LIBMYSQL.DLL
  • VS2015 ランタイム 64 ビット。
  • 8.0 バージョンの MySQL MSVC++ コネクタ パックから次の 2 つのライブラリ:
  • LIBCRYPTO-1_1-x64.DLL
  • LIBSSL-1_1-x64.DLL
メモ: 64 ビット SQL サーバーを使用する場合、クライアント DLL もまた64 ビットとなります。 設計時に接続するには、または 32 ビット アプリケーションでこのサーバーを使用するには、32 ビット DLL を [http://dev.mysql.com/downloads/connector/c/#downloads

代わりに、他のフォルダに必須ファイルを置き、それらのパスを FDDrivers.ini に指定しても構いません:

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

MySQL クライアント ライブラリが正しくインストールされていない場合は、接続を試みたときに以下の例外が発生します。

[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 クライアント ソフトウェア

FireDAC を使用するには、以下が必要です。

  • libmysqlclient.dylib - x86 クライアント ライブラリ

これは、macOS 用 Connector/C としてダウンロードし(こちら)次のコマンドを使用して、/usr/local フォルダに解凍します:


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

iOS 版クライアント ソフトウェア

こちらの記事(詳細情報)で iOS 用に libmysqlclient.dylib をビルドする方法が説明されています。

Embarcadero はこのソフトウェアのテストは行っておらず、お問い合わせも承っておりません。ご了承ください。

Linux 版クライアント ソフトウェア

MySQL クライアント ライブラリをインストールするには:

  1. Ubuntu Server 16.04 LTS では、次を実行します:
    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. Red Hat Enterprise Linux 7 では、次を実行します:
    sudo yum install mysql-libs
    sudo ln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.so
    

ドライバのリンク

ドライバをリンクするには、以下のいずれかを行います。

  • [ツール パレット]の[FireDAC Links]ページから、TFDPhysMySQLDriverLink コンポーネントをドロップします。
  • uses 句に FireDAC.Phys.MySQL ユニットを追加します。

接続定義パラメータ

MySQL DBMS に接続するには、ほとんどのアプリケーションで、DriverID、Protocol、ServerDatabaseUser_NamePasswordCharacterSet を指定する必要があります(詳細については「接続の定義(FireDAC)」参照)。


DriverID=MySQL

パラメータ 説明 値の例
Server MySQL サーバーが動作しているサーバーの TCP/IP アドレスまたはホスト名。 127.0.0.1
Port MySQL サーバーがリスンしている TCP/IP ポート。 3306
Database この接続の現在のデータベースの名前。Database を指定しない場合、現在のデータベースはセットアップされません。 MyDB
User_Name MySQL のユーザー ID。 root
Password MySQL のユーザー パスワード。
CharacterSet この接続で使用するデフォルトの文字セット。接続の照合順序がその文字セットのデフォルトの照合順序になります。詳細は、SET NAMES 文を参照してください。 cp1251
Compress True に指定すると、ネットワーク トラフィックの圧縮が行われます。デフォルトでは、False に設定されます。
UseSSL

True に指定すると SSL 接続が有効になります。デフォルトでは、False に設定されます。UseSSL を True に設定した場合には、さらに以下の接続定義パラメータを指定する必要があります。

  • SSL_key -- キー ファイルへのパス名
  • SSL_cert -- 証明書ファイルへのパス名
  • SSL_ca -- 認証局ファイルへのパス名
  • SSL_capath -- 信頼できる SSL CA 証明書が pem 形式で格納されているディレクトリへのパス名
  • SSL_cipher -- SSL 暗号化に使用可能な暗号形式のリスト

さらなる詳細については、「MySQL ドキュメント」を参照してください。

True
LoginTimeout 接続の確立中にアプリケーションがタイムアウトするまでの時間(秒単位)を制御します。 30
ReadTimeout サーバーからの読み取りを行おうとしたときにタイムアウトするまでの時間(単位は秒)。読み取りを試みるたびにこのタイムアウト値が使われ、必要であれば再試行されるため、実際にタイムアウトするまでの合計値は、このオプション値の 3 倍になります。この値を設定すると、TCP/IP Close_Wait_Timeout の値(10 分)よりも早くに接続の切断を検出することができます。このオプションが有効なのは、TCP/IP 接続の場合のみであり、さらに、MySQL 5.1.12 より前のバージョンでは Windows 版のみです。デフォルトでは設定されません。 5
WriteTimeout サーバーに対して書き込みを行おうとしたときにタイムアウトするまでの時間(単位は秒)。書き込みを試みるたびにこのタイムアウト値が使われ、必要であれば net_retry_count 回の再試行が行われるため、実際にタイムアウトするまでの合計値は、このオプション値の net_retry_count 倍になります。このオプションが有効なのは、TCP/IP 接続の場合のみであり、さらに、MySQL 5.1.12 より前のバージョンでは Windows 版のみです。デフォルトでは設定されません。 5
ResultMode

結果セットのクライアントへの取得方法を制御します。デフォルト値は Store です。

  • Store -- クエリを実行した直後にすべての行を取得してクライアントに格納します。そのため、サーバー プロセスは新しい要求を処理できるようになります。
  • Use -- クライアントからの要求に応じて行が取得されます。結果セットのすべての行の取得が終わるまで、サーバーは新しい要求を処理することができません。これを指定すると、結果セットのサイズが非常に大きい場合にメモリ使用量を減らすことができます。
  • Choose -- FireDAC が自動的にモードを選択します。FetchOption.Mode が fmAll または fmExactRecsMax であれば "Store" に、それ以外であれば "Use" になります。
説明
TinyIntFormat

TINYINT(1) の表現形式を制御します。デフォルト値は Boolean です。

  • Boolean - TINYINT(1) 列は dtBoolean として表現されます。
  • Integer - TINYINT(1) 列は dtSByte または dtByte として表現されます。
Integer
MetaDefCatalog デフォルト データベース名。カタログ名が MetaDefCatalog と同じ場合、設計時コードではオブジェクト名からカタログ名が省略されます。MetaDefCatalog を設定しても、MySQL セッションにおける現在のデータベースは変更されません。 MyDB

MySQL Embedded サーバー

重要

  • すべてのパス引数の値には Unix のバックスラッシュを使用してください。パスはアプリケーションの EXE が含まれるフォルダからの相対パスで指定できるため、配置が簡単になります。
  • libmysqld.dll と errmsg.sys は同じバージョンでなければなりません。
  • libmysqld.dll のバージョン 5.1.34(おそらくは他の一部のバージョンも)は破損していて正しく動作しません。他のバージョンにアップデートしてください。
  • MySQL Embedded の一般的なセットアップは困難である可能性があります。簡略なセットアップについては、この後の例を参照してください。
  • libmysqld.dll の初期化の引数が正しくない場合、アプリケーションがメッセージを出さずに終了する可能性があります。

MySQL Embedded サーバーを使用するようアプリケーションを準備するには、以下の作業が必要です。

  • TFDPhysMySQLDriverLink コンポーネントをアプリケーションに追加します。この後の "引数を追加する" は "引数を TFDPhysMySQLDriverLink.EmbeddedArgs リストに追加する" という意味です。状況に応じてドライバ構成ファイルを使用することもできます。
  • LIBMYSQLD.DLL をアプリケーション実行可能ファイルと同じフォルダにコピーします。アプリケーション実行可能ファイルのフォルダと異なるフォルダに置く場合には、--basedir=<LIBMYSQLD フォルダ> という引数を追加し、TADPhysMySQLDriverLink.VendorLib を <LIBMYSQLD フォルダ>\LIBMYSQLD.DLL に設定します。
  • 英語のメッセージだけを使用する場合には、share\english\errmsg.sys<LIBMYSQLD フォルダ> にコピーし、--language=<LIBMYSQLD フォルダ> という引数を追加します。複数言語のメッセージを使用する場合には、share\* 内の該当するフォルダを、ディレクトリ構造を保ったまま >LIBMYSQLD フォルダ> にコピーします。<LIBMYSQLD フォルダ>\share\* はデフォルトの場所なので、--language 引数を追加する必要はありません。
  • 使用する文字セットが ASCII 以外の場合には、share\english\charsets を、ディレクトリ構造を保ったまま <LIBMYSQLD フォルダ> にコピーします。<LIBMYSQLD フォルダ>\share\charsets はデフォルトの場所なので、--character-sets-dir 引数を追加する必要はありません。
  • データベース ファイルを <LIBMYSQLD フォルダ> 以外のフォルダに置く場合には、--datadir=<データベース ファイル フォルダ> という引数を追加します。5.6.11 の場合には、この引数を必ず指定しなければなりません。
  • InnoDB エンジンを使用しない場合には、--skip-innodb 引数を追加します。使用する場合には、--innodb_data_home_dir=<データベース ファイル フォルダ> という引数を追加します(値には InnoDB データ領域のディレクトリを指定します)。
  • アプリケーションでリモートの MySQL サーバーに接続しない場合には、--skip-networking 引数を追加します。
  • アプリケーションで外部設定ファイルを使用する場合には、--defaults-file=my.ini という引数を追加します。
  • アプリケーションで MySQL プラグインを使用する場合には、--plugin_dir=<プラグイン フォルダ> という引数を追加します。通常、プラグインは <LIBMYSQLD フォルダ>\lib\plugin に格納されています。
  • パフォーマンス チューニングのための適切な引数を追加します。


MySQL Embedded サーバーに接続する場合、Server、Host、Port、User_Name、Password の各接続定義パラメータを指定する必要はありません。--skip-networking 引数を指定しない場合は、通常の libmysql.dll と同様の方法で、libmysqld.dll を使用してリモートの MySQL サーバーに接続することができます。


簡単なセットアップ例:

  • 文字セット: ASCII のみ
  • メッセージ: 英語のみ
  • データベース: EXE フォルダ


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

複雑なセットアップ例:

  • 文字セット: 複数
  • メッセージ: 複数
  • データベース: "data" サブフォルダ


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

使用例

セキュアな接続の使用

TLS/SSL 暗号化を使用するには、UseSSL パラメータを定義して値を True に設定し、SSL_keySSL_cert、および SSL_ca の各パラメータを以下のように指定します。


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

SSL_capath および SSL_cipher のパラメータを使用することもできます。詳細は、上記「接続定義パラメータ」の表の「UseSSL」の項目を参照してください。

メモ: 構成ファイル my.cnf を使用することも可能です。

その他の使用例

  • ローカルで動作しているサーバーに接続し、デフォルト(3306)ポートをリスンする場合:


DriverID=MySQL
Database=addemo
User_Name=root
Password=
  • (デフォルト以外のポートをリスンし、文字データには Unicode を使用する)リモート サーバーに接続する場合:


DriverID=MySQL
Server=mysrv
Port=3307
Database=addemo
CharacterSet=utf8
User_Name=me
Password=123
  • 組み込みサーバーに接続し、文字データには Unicode を使用する場合:


DriverID=MySQL
Database=addemo
CharacterSet=utf8

関連項目

サンプル