a2 Tech blog

試したこと・調べたこと・感じたことを発信するITエンジニアの日記です。仕事とは直接関係ないけど興味あることを模索していきます。

Linuxにsqlcmdを入れてSQL Server on Linuxにアクセス

f:id:ninna2:20170506013457j:plain:w360

SQL Server on Linux、皆さん触ってますか?

Linux上では、sqlcmdすら実行できない状態なのでmssql-toolsを導入して、Redhat Enteprise Linuxから、SQL Serverに接続できるようにセットアップする方法を試してみたいと思います。途中までやってみて気が付いたのですが、SQL Server on LinuxをAzure Virtual Machineに構築した場合、ちゃんとパッケージインストールされていてやる必要がなかったみたいです。気が付くの遅すぎ…でも、方法はわかったので内容は残しておきます。

外部からつながっているので、ローカルから接続できるようにする必要性はあまり感じないかもしれないですが、ネットワークを介さずにいろいろやりたいパターンは出てくるはず(例えば、性能測定とか、大量データの挿入とか)なので必要に応じて各環境で実施しておくとよいと思います。何度も言いますが、Azureで構築した場合、親切にパッケージインストールされているはずなので、PATH通すぐらいしかやらなくてOKです。

基本的に、Microsoftがさまざまなプラットフォームでの導入方法を記載してくれているので、それをなぞっていきます。一応、わかりやすいように補足は入れていくつもりですが、内容的にはあまり変わりませんので、あしからず。

docs.microsoft.com

それでは、やってみましょう。

準備

まず、LinuxSQL Server on Linuxがないと始まりませんので、構築してくださいね。Azure Virtual Machineに構築する方法は、過去記事に書いていますので、参考にしてください。また、Azure Virtual MachineにSSHでアクセスできる必要がありますので、SSHクライアントの準備もお願いします。私の端末はWindowsで、Visual Studio Code + Git for Windowsを使っています。VSCodeのTerminalをbashにしてそこからアクセスするようにしています。

ninna2.hatenablog.com

Azure Virtual MachineにSSHでアクセスできるようになれば、さっそくはじめていきましょう。

yumリポジトリの情報の更新

まずは、SSHLinuxに接続しましょう。

ssh -l <ユーザ名> <パブリックIPアドレス>

yumリポジトリ設定を行います。Azure Virtual Machineで構築したRedhat Enterprise Linuxなので、一応最新になっていました。

superuser modeにします。suですね。

$ sudo su

一応、yumリポジトリ設定を確認しておきましょうか。

# cat /etc/yum.repos.d/msprod.repo

[packages-microsoft-com-prod]
name=packages-microsoft-com-prod
baseurl=https://packages.microsoft.com/rhel/7/prod/
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc

このような内容だったら、問題なく設定されています。設定されていない場合は、下記を実行しておくと、URL先の情報をコピー(リダイレクト)して書き出しておける。実行後、catで上記の内容になっているか確認しておくとよいと思います。

# curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo

superuser modeを抜けます。

# exit

mssql-toolsパッケージの更新

古いunixODBCが存在している場合には、削除しておいた方がよいらしいです。unixODBC-utf16,unixODBC-utf16-develが削除対象ですね。パッケージがインストールされているかどうか、確認して入っていたら削除しましょう。

確認方法。unixODBC-utf16の場合。

$ sudo yum list installed | grep unixODBC-utf16

削除方法はこんな感じ。

$ sudo yum update
$ sudo yum remove unixODBC-utf16 unixODBC-utf16-devel

それでは、パッケージのインストールします。その前にyum updateで古いものをアップデートしておきます。Azureで構築したRedhat Enterprise Linuxだと、Updateが結構出たので、全部更新ってやりました。そのあとに、目的のmssql-tools”をインストールしましょう。

$ sudo yum update
$ sudo yum install mssql-tools unixODBC-devel

ここで、あら、すでにインストール済みやんって気が付きました。気づくの遅すぎ。先に入っているか確認しておくべきでしたね。

$ sudo yum list installed | grep mssql-tools

さて、紆余曲折ありましたが、とりあえず入っていることは確認できました。

PATH設定

このままでも使うことはできますが、/opt/mssql-tools/bin指定して実行しないといけないので、PATHに登録しておきましょう。

$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
$ source .bash_profile

これで、sqlcmdが実行しやすくなりました。

SQL Server on Linuxへ接続

さて、それではLinuxでsqlcmdを実行するぞ。不思議な感覚ですね。

$ sqlcmd -S localhost -U sa -P <PassWord>
1> SELECT Name from sys.Databases;
2> GO
Name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
TutorialDB
TestDB
GraphSample
graphdemo

(8 rows affected)
1>

無事つながりました。これで、Linux上からいろいろ実行したくなった場合でも、SQLが叩けるようになりました。Linuxで実行するバッチプログラムなんかからsqlcmdでDBアクセスもできるわけですね。