SQLServer 2017 Linux版の環境を構築してみた

クラウド環境でSQLserverを動作させるための検証の一環として、SQLServer 2017 Linux版の環境を構築してみた

設定メモ

Ubuntu Serverのインストールイメージをダウンロードする

Ubuntu Server 18.04 LTSではSQLServer 2017 Linux版は動作しないので注意
SQLServer 2017 Linux版の動作するUbuntu Server 16.04 LTSをダウンロードした
ubuntu-16.04.4-server-amd64.iso 2018-03-01 03:36 848M

Ubuntu Serverのインストール用のUSBを作成する

インストール用のUSBの作成はMacOSXで行った

$ diskutil list
/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.6 GB    disk4
   1:             Windows_FAT_32 ESD-USB                 31.6 GB    disk4s1

$ diskutil unmountDisk /dev/disk4

$ sudo dd if=/Users/user/Downloads/ubuntu-16.04.4-server-amd64.iso of=/dev/rdisk4 bs=1m

Ubuntu Serverをインストールする

インストーラに従ってUbuntu Serverをインストールした
今回は

  • インストール言語を「英語」
    画面:インストール言語を「英語」
  • 場所は「日本」
    画面:場所は「日本」
  • ロケールは「United States - en_US.UTF-8」
    画面:インストール言語を「英語」
  • Software selectionで「OpenSSH server」を追加しておく 画面:「OpenSSH server」を追加しておく

とした

Ubuntu Serverのインストールが済んだら

インストールされてるパッケージを更新しておく

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt -y autoremove

必要なものをインストールする

$ sudo apt -y install avahi-daemon

これ以降ssh user@ホスト名.localでアクセスできるようになる

SQLServer 2017 Linux版をインストールする

GPGキーをインポートする

$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

リポジトリを登録する

$ sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"

「add-apt-repository: command not found」というエラーが発生したときは?

$ sudo apt -y install apt-file
$ sudo apt-file update
$ sudo apt -y install software-properties-common

インストールする

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt -y install mssql-server

インストールできたら環境設定を行う

今回はExpressエディションとしてインストールする

$ sudo /opt/mssql/bin/mssql-conf setup
Choose an edition of SQL Server:
  1) Evaluation (free, no production use rights, 180-day limit)
  2) Developer (free, no production use rights)
  3) Express (free)
  4) Web (PAID)
  5) Standard (PAID)
  6) Enterprise (PAID)
  7) Enterprise Core (PAID)
  8) I bought a license through a retail sales channel and have a product key to enter.

Details about editions can be found at
https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x409

Use of PAID editions of this software requires separate licensing through a
Microsoft Volume Licensing program.
By choosing a PAID edition, you are verifying that you have the appropriate
number of licenses in place to install and run this software.

Enter your edition(1-8): 3
The license terms for this product can be found in
/usr/share/doc/mssql-server or downloaded from:
https://go.microsoft.com/fwlink/?LinkId=855862&clcid=0x409

The privacy statement can be viewed at:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x409

Do you accept the license terms? [Yes/No]:Y

Enter the SQL Server system administrator password:
Confirm the SQL Server system administrator password:
Configuring SQL Server...

The licensing PID was successfully processed. The new edition is [Express Edition].
ForceFlush is enabled for this instance.
ForceFlush feature is enabled for log durability.
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /lib/systemd/system/mssql-server.service.
Setup has completed successfully. SQL Server is now starting.

サーバーの照合順序を変更する

Ubuntu Serverのロケールを「United States - en_US.UTF-8」 にしていたので、サーバーの照合順序が「SQL_Latin1_General_CP1_CI_AS」になっていた
画面:サーバーの照合順序が「SQL_Latin1_General_CP1_CI_AS」になっている

これを「Japanese_CI_AS」に変更しておく

$ sudo systemctl stop mssql-server

$ sudo /opt/mssql/bin/mssql-conf set-collation
Enter the collation: Japanese_CI_AS
Configuring SQL Server...

$ sudo systemctl start mssql-server

「Japanese_CI_AS」になった
画面:サーバーの照合順序が「Japanese_CI_AS」になった

フィードバックを送信しない

$ sudo systemctl stop mssql-server

$ sudo /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false

$ sudo systemctl start mssql-server

データベースのバックアップディレクトリを変更する

$ sudo systemctl stop mssql-server

$ sudo mkdir /DBBackup
$ sudo chown mssql /DBBackup
$ sudo chgrp mssql /DBBackup
$ sudo /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /DBBackup

$ sudo systemctl start mssql-server

TCP接続の待受けポートを変更する

$ sudo /opt/mssql/bin/mssql-conf set network.tcpport [待受けするポート]

$ sudo systemctl restart mssql-server

Ubuntu Server側でバックアップできるようにする

とりあえずsqlcmdを使えるようにする

$ wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
$ sudo apt update 
$ sudo apt -y install mssql-tools
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
$ source ~/.bashrc

これで

$ sqlcmd -H localhost -U sa -P password0! -Q "BACKUP DATABASE SQLDB01 TO DISK = N'SQLDB01.bak' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"

を実行することでデータベースのバックアップが

$ sqlcmd -H localhost -U sa -P password0! -Q "BACKUP LOG SQLDB01 TO DISK = N'SQLDB01.log' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"

を実行することでデータベースのトランザクションログがバックアップできる

cronで定期的に実行させる

$ crontab -e
# 営業時間中は1時間ごとにトランザクションログのバックアップを取得する
30 8-18 * * 1-6 /opt/mssql-tools/bin/qlcmd -H localhost -U sa -P password0! -Q "BACKUP LOG SQLDB01 TO DISK = N'SQLDB01.log' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"
# 日曜日にフルバックアップを取得する
30 8 * * 0 /opt/mssql-tools/bin/sqlcmd -H localhost -U sa -P password0! -Q "BACKUP DATABASE SQLDB01 TO DISK = N'SQLDB01.bak' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"