Access から ODBC コネクタで MySQL (on Debian) に接続する
会社に置いている Windows 機で Access から MySQL への接続を試してみる
MySQL から ODBC コネクタをダウンロードする
こちらから使用しているプラットフォームに合わせてサイトの表示が切り替わる。
Windows の場合も Mac の場合もだけど Connector-ODBC という文字列が付いているものと付いていないものがある。どうちがうのだろうか。
↑ファイル名を見ると ansi が入っているかどうかの違いみたいだ。
会社の Windows 機では zip アーカイブのものを両方とも落として中身を見てみたが、ぱっと見はよくわからなかった。たぶんどちらでも大丈夫なのだろうと勝手に納得。
それとは別に msi のインストーラー形式のものをダウンロードしてインストール。
64-bit の OS を使用している場合、32-bit の ODBC ドライバをインストールしてもコントロールパネル(管理ツール→データソース)からは見えないらしい。
%systemdrive%\Windows\SysWoW64\odbcad32.exe
に exe があるのでこれを実行する。自分の場合はランチャ兼ファイラに fenrir を使っているので syswow などと入力するとすぐに探し当てることができた。
Windows のポートを開ける
この辺を参照しながら作業したが、途中で odbcad32.exe を実行してみたりしたのでその影響が何かあったかもしれず、手順を正確に把握できていない。時間を見つけてまた確認してまとめておいたらより価値のある情報になるかもしれない。
たしか odbc のエントリが 2 つ(TCP,UDP)あったので両方ともとりあえず 3306 ポートを設定しておいたような気がする。
サーバー(Debian)のポートを開ける
これはあれですよ、iptables ですね。
こちらの設定をほぼそのまま利用していたので、もう一度確認する。
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT
↑ここに一行足せばいいのだと推測
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT -A INPUT -p tcp --dport 3306 -j ACCEPT
↑こうしておいた
iptables の設定ファイル(自分の場合)
/etc/iptables/rules
iptables の再起動
$ sudo iptables-restore < /etc/iptables/rules
MySQL の接続制限を変更する
MySQL の設定ファイル /etc/mysql/my.cnf の中に下記の記述があるのでこれをコメントアウトする。
bind-address = 127.0.0.1
↑localhost からのアクセスのみに制限されているということ、らしい
# bind-address = 127.0.0.1
↑こうする
MySQL のユーザーを設定する
外から接続する用のユーザーを新規に作成するか、既存のユーザーに然るべき権限を付与する必要がある。
mysql> create user -> 'USERNAME'@'localhost' identified by 'hogehoge';
mysql> grant all on testdb.* to USERNAME@localhost; mysql> flush privileges; <|| この辺を使うと思うが、USERNAME@localhost だと localhost からしか接続できないので @localhost の部分を外から接続する場合のホスト名にするか、@% としてどこからでも接続できるようにする方法がある。 *** MySQL の再起動 >|| $ sudo /etc/init.d/mysql restart
これで基本的には OK のはず。
だが、MySQL の再起動に失敗した。
$ sudo /etc/init.d/mysql restart Stopping MySQL database server: mysqld. Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
こちらを参照して以下の手順をとった。
- /etc/mysql/debian.cnf を編集して debian-sys-maint のパスワードを設定
- MySQL に root でログインしてユーザー debian-sys-maint のパスワードを設定しなおす
set password for 'debian-sys-maint'@localhost = passowrd('設定したパスワード');
- ログアウトして MySQL を restart
$ sudo /etc/init.d/mysql restart Stopping MySQL database server: mysqld. Starting MySQL database server: mysqld . . . . . . . . . . .. Checking for tables which need an upgrade, are corrupt or were not closed cleanly..
↑警告っぽい文言があるけれど一応無事に再起動できているようだった。
Access から ODBC で接続する設定は以下あたりを参照した。MySQL 公式のドキュメントは頼もしくて有り難いのだけれど英語版を用いての解説なので流し読みでは内容が入ってこなくて結局あまり見なかった。ひとえに自身の英語力不足である。
文字化けとの格闘
ありがちな話というか、恐らくそうなる気がしたけれど、やっぱり日本語が化ける。まだ解決していないのでひとまず箇条書きで。
- 文字コードの設定を変更してみる
- 設定ファイルの記述を変更しても既に作成した DB, テーブルはもとの文字コードになっているのでそれらは別途変更が必要
- ODBC ドライバで SET NAMES SJIS を記入すればよい、という記述もある
- ODBC ドライバは 最新の 5.2 では SET NAMES に対応していないらしく、3.51 を使用するとよいらしい
- 3.51 は公式サイトからダウンロード可能
- uso: [util] MySQL×Access文字化け
ひとまず以上です。ふー。