Linuxにsqlcmdを入れてSQL Server on Linuxにアクセス
SQL Server on Linux、皆さん触ってますか?
Linux上では、sqlcmdすら実行できない状態なのでmssql-toolsを導入して、Redhat Enteprise Linuxから、SQL Serverに接続できるようにセットアップする方法を試してみたいと思います。途中までやってみて気が付いたのですが、SQL Server on LinuxをAzure Virtual Machineに構築した場合、ちゃんとパッケージインストールされていてやる必要がなかったみたいです。気が付くの遅すぎ…でも、方法はわかったので内容は残しておきます。
外部からつながっているので、ローカルから接続できるようにする必要性はあまり感じないかもしれないですが、ネットワークを介さずにいろいろやりたいパターンは出てくるはず(例えば、性能測定とか、大量データの挿入とか)なので必要に応じて各環境で実施しておくとよいと思います。何度も言いますが、Azureで構築した場合、親切にパッケージインストールされているはずなので、PATH通すぐらいしかやらなくてOKです。
基本的に、Microsoftがさまざまなプラットフォームでの導入方法を記載してくれているので、それをなぞっていきます。一応、わかりやすいように補足は入れていくつもりですが、内容的にはあまり変わりませんので、あしからず。
それでは、やってみましょう。
準備
まず、LinuxとSQL Server on Linuxがないと始まりませんので、構築してくださいね。Azure Virtual Machineに構築する方法は、過去記事に書いていますので、参考にしてください。また、Azure Virtual MachineにSSHでアクセスできる必要がありますので、SSHクライアントの準備もお願いします。私の端末はWindowsで、Visual Studio Code + Git for Windowsを使っています。VSCodeのTerminalをbashにしてそこからアクセスするようにしています。
Azure Virtual MachineにSSHでアクセスできるようになれば、さっそくはじめていきましょう。
yumリポジトリの情報の更新
ssh -l <ユーザ名> <パブリックIPアドレス>
yumのリポジトリ設定を行います。Azure Virtual Machineで構築したRedhat Enterprise Linuxなので、一応最新になっていました。
superuser modeにします。suですね。
$ sudo su
# 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アクセスもできるわけですね。