2014年11月11日火曜日

CentOSからコマンドラインで Azure SQL Database につなぐ

Azureで不便に思うことがある。
SQL Database をさくっとコマンドでなんとかしたい場合だ。
いろいろBingると、もちろんFreeTDS+UnixODBCを使ったサンプルが山ほどある。

しかし、yumでさくっとできないとかイヤじゃん。
ということでやってみた。

1. EPELリポジトリを有効にする
あなたのCentOSは、以下のコマンドでおそらくEPEL拡張パッケージが使えるようになるはず。
# yum install epel-release

くわしくはこちらを参考に。
https://fedoraproject.org/wiki/EPEL

2. FreeTDSをインストールする
以下のコマンドでインストールするだけ。
# yum install freetds

3. freetds.conf の設定
インストールすると、tsqlというコマンドが使える。
まずは設定ファイルの場所を確認する。
# tsql -C

たぶん良い子な皆さんは、/etc の下にあるはずだ。
こいつを環境に合わせて編集する。
# vi /etc/freetds.conf
[mymssql]
host = mssql1.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8

この場合、[mymssql]が tsqlコマンド実行時に "-S" で指定する文字列。
接続する前に、もうひとつ。

4. SQL Database 側で接続許可
管理ポータルで、接続するホストのグローバルIPを許可する。
今回、同じリージョンからやってみたけど、なぜか繋がらないのでわざわざ許可。

5. 名前解決ができないので dig で接続したい SQL Database のIPアドレスを確認
なぜ出来なかったのかわからないが、先にIPアドレスを確認して指定したら接続できた。
謎が多すぎてここで挫ける人もいるかもしれない。

6. tsqlコマンドで接続
さて、やっと接続できる。
ユーザーが「user@mssql1」、パスワードが「password」、SQL Database のIPアドレスが「12.34.56.78」、データベース名が「mydatabase」の場合、こうなる。
# tsql -S mymssql -U user@mssql1 -P password -H 12.34.56.78 -p 1433 -D mydatabase

locale is "en_US.UTF-8"

locale charset is "UTF-8"
using default charset "UTF-8"
Default database being set to mydatabase
1> 

こうなったらあとはコマンドで好きなように。
ただひとつ、useコマンドが使えないのでご注意を。

わかったことは、「UnixODBCいらない」ってことか。勉強になった。
たぶんPHPだと、ここに php-mssql 入れたら繋がるんじゃないかな。
ODBC経由しかないと思ってたけど、思い込みは良くない。反省。

なお、PHPでmssql関数を使えば、FreeTDS(dblib)だけでイケるんですが、
SQL Server の場合はOKでも、SQL Databaseの場合はuseが使えなくて詰んでしまう。
(要調査)








0 件のコメント: