MySQL サーバーへの接続(FireDAC)
データベース接続(FireDAC) への移動
このトピックでは、MySQL Server への接続方法を説明します。
目次
サポート対象バージョン
FireDAC ネイティブ ドライバは次をサポートしています:
- MySQL Server Community、Enterprise、Embedded の各エディションのバージョン 3.21 以降。
- MariaDB 5.5 以降。
クライアント ソフトウェア
Windows 版クライアント ソフトウェア
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
代わりに、他のフォルダに必須ファイルを置き、それらのパスを FDDrivers.ini に指定しても構いません:
[MySQL]
VendorLib=<folder>\libmysql.dll
MySQL クライアント ライブラリが正しくインストールされていない場合は、接続を試みたときに以下の例外が発生します。
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 クライアント ライブラリをインストールするには:
-
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
-
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、Server、Database、User_Name、Password、CharacterSet を指定する必要があります(詳細については「接続の定義(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 に設定した場合には、さらに以下の接続定義パラメータを指定する必要があります。
さらなる詳細については、「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 です。
|
説明 |
TinyIntFormat |
TINYINT(1) の表現形式を制御します。デフォルト値は Boolean です。
|
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_key、SSL_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
関連項目
サンプル
- FireDAC MySQL サンプル