pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


Delphi/C++Buidler/RAD Studioのデータベース接続コンポーネントFireDACからDockerコンテナのMySQLにつなぐ

とりあえずざっくりな忘備録。開発環境からつないでみるだけです。

MySQL Serverを自分の作業マシンや仮想マシンに入れるのはイマイチな気がしたので、せっかくなのでDockerで作ることにします。

手順自体は普通に MySQL Server をインストールする場合と基本的には同じです。

必要なもの

準備

Delphi/C++Builder/RAD Studio Enterprise

買いましょう。

libmysql.dll(MySQLWindowsクライアント)

libmysql.dll は MySQL Connecotr/C に含まれるので、これを開発環境に一旦インストールする。

https://dev.mysql.com/downloads/connector/c/

ただし単体インストーラは存在しないので、MySQL Installer でインストールします。

MySQL Connecotr/C はインストールの途中で明示的に追加します。

インストールしたら、パスが通っているフォルダか、またはDelphiIDEのパスにコピーします。

Docker MySQLコンテナ

Delphi 10.2 では MySQL は Version 5.7 までの対応っぽい。 ここに対応データベースバージョンが書かれている。

FireDAC データベースのサポート - Status

そこで Docker MySQL コンテナイメージも 5.7 のものを選んで入手することにします。

公式のイメージは https://hub.docker.com/r/mysql/mysql-server/ に情報がありまして、これを見ると 5.7 は次のようにインストールできそうです。

docker run \
    --name mysql57 \
    -e MYSQL_ROOT_PASSWORD=secret \
    -p 3306:3306 \
    -d mysql/mysql-server:5.7

ただしこの手順で起動しても、MySQL への接続は localhost からしか行えません。そこで一旦こんなふうに実行して、root ユーザがすべてのデータベースに対して任意のノードから接続できるようにしてみます。

$ docker exec -it mysql57 mysql -uroot -p
mysql> grant all privileges on *.* to root@'%' identified by 'secret';

実際の運用環境では、当然ながら、こんなざっくりとした設定をしてはダメです。

FireDACでの接続定義の作成

TFDConnectionで、最低限、こんな感じで設定すれば接続できるはずです。黄色でハイライトされている箇所を実際の環境にあわせて設定します。 f:id:pslabo:20181110193455p:plain

設定を作ったら「テスト」を実行して設定が正しいことを確認します。

接続できたら、あとはTFDQueryなどでクエリ実行するなりして利用できます。

うまく接続できない場合は、MySQL Workbench や mysql コマンド等で接続できるかどうかを確かめるとよいでしょう。

ちなみに最初は MySQL 8 のコンテナを立てたのですが、MySQL Workbench からは正常に接続でき、FireDAC から接続するとエラーが出たので、サポートバージョンで明記されている 5.7 のコンテナを作り直しました。とはいえ、docker run するだけなので、手間なく動かせるのは大変ありがたいです。実インストールしていたら、アンインストールするとか、スナップショットに戻すとかの作業が必要になるわけですし。