バックアップと復元を使用して SQL Server データベースを Windows から Linux に移行する
適用対象:SQL Server - Linux
SQL Server のバックアップと復元の機能は、Windows の SQL Server から SQL Server on Linux にデータベースを移行する場合に推奨される方法です。 このチュートリアルでは、バックアップと復元の手法を使用してデータベースを Linux に移動するために必要な手順について説明します。
- SSMS を使用して Windows でバックアップ ファイルを作成する
- Windows に Bash シェルをインストールする
- Bash シェルから Linux にバックアップ ファイルを移動する
- Linux で Transact-SQL を使用してバックアップ ファイルを復元する
- クエリを実行して移行を検証する
また、SQL Server Always On 可用性グループを作成して、SQL Server データベースを Windows から Linux に 移行することもできます。 「Windows と Linux に SQL Server Always On 可用性グループを構成する (クロス プラットフォーム)」を参照してください。
前提条件
このチュートリアルを完了するには、次の前提条件を満たす必要があります。
次のものを備えた Windows コンピューター:
- SQL Server がインストールされている。
- SQL Server Management Studio がインストールされている。
- 移行対象のデータベース。
次のものがインストールされた Linux コンピューター:
Windows でバックアップを作成する
Windows でデータベースのバックアップ ファイルを作成するには、いくつかの方法があります。 以下の手順では、SQL Server Management Studio (SSMS) を使います。
Windows コンピューターで SQL Server Management Studio を開始します。
接続ダイアログ ボックスで、「localhost」と入力します。
オブジェクト エクスプローラーで、 [データベース] を展開します。
対象のデータベースを右クリックし、[タスク] を選択して、[バックアップ...] をクリックします。
[Backup Up Database](データベースのバックアップ) ダイアログで、[バックアップの種類] が [Full](完全) であり、[バックアップ先] が [ディスク] であることを確認します。 ファイルの名前と場所を記録しておきます。 たとえば、SQL Server 2016 では、YourDB という名前のデータベースの既定のバックアップ パスは
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak
になります。[OK] を選んでデータベースをバックアップします。
Note
もう 1 つの方法は、Transact-SQL のクエリを実行してバックアップ ファイルを作成するこです。 次の Transact-SQL コマンドでは、YourDB という名前のデータベースに対して前の手順と同じ操作が実行されます。
BACKUP DATABASE [YourDB] TO DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
Windows に Bash シェルをインストールする
データベースを復元するには、最初に Windows コンピューターからターゲットの Linux コンピューターにバックアップ ファイルを転送する必要があります。 このチュートリアルでは、Windows 上で実行されている Bash シェル (ターミナル ウィンドウ) から Linux にファイルを移動します。
scp (セキュア コピー) コマンドと ssh (リモート ログイン) コマンドがサポートされている Bash シェルを、Windows コンピューターにインストールします。 次の 2 つの例があります。
- Windows Subsystem for Linux (Windows 10)
- Git Bash シェル (https://git-scm.com/downloads)
Windows で Bash セッションを開きます。
バックアップ ファイルを Linux にコピーする
Bash セッションで、バックアップ ファイルが格納されているディレクトリに移動します。 次に例を示します。
cd 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
scp コマンドを使って、ターゲットの Linux コンピューターにファイルを転送します。 次の例では、IP アドレスが 192.0.2.9 である Linux サーバー上の user1 のホーム ディレクトリに、YourDB.bak を転送します。
scp YourDB.bak user1@192.0.2.9:./
ヒント
scp を使用したファイル転送の代わりになる方法があります。 1 つは、Samba を使用して、Windows と Linux の間に SMB ネットワーク共有を構成するというものです。 Ubuntu のチュートリアルについては、「Samba を使用してネットワーク共有を作成する方法」を参照してください。 確立された後は、Windows からネットワーク ファイル共有としてアクセスできます (\\machinenameorip\share など)。
復元する前にバックアップ ファイルを移動する
この時点で、バックアップ ファイルは Linux サーバー上のユーザーのホーム ディレクトリにあります。 SQL Server にデータベースを復元する前に、 /var/opt/mssql のサブディレクトリにバックアップを配置する必要があります。これは、mssql
ユーザーと mssql
グループが所有しているためです。 既定のバックアップ場所の変更を検討している場合は、「mssql-conf での構成」の記事を参照してください。
同じ Windows Bash セッションで、ssh を使ってターゲット Linux コンピューターにリモート接続します。 次の例では、ユーザー user1 として Linux コンピューター 192.0.2.9 に接続しています。
ssh user1@192.0.2.9
これで、リモート Linux サーバー上でコマンドが実行されるようになります。
スーパー ユーザー モードに移行します。
sudo su
新しいバックアップ ディレクトリを作成します。 ディレクトリが既に存在する場合は、-p パラメーターを指定しても何も行われません。
mkdir -p /var/opt/mssql/backup
バックアップ ファイルをそのディレクトリに移動します。 次の例では、バックアップ ファイルは user1 のホーム ディレクトリにあります。 実際のバックアップ ファイルの場所とファイル名に合わせて、コマンドを変更してください。
mv /home/user1/YourDB.bak /var/opt/mssql/backup/
スーパー ユーザー モードを終了します。
exit
Linux でデータベースを復元する
データベースのバックアップを復元するには、RESTORE DATABASE Transact-SQL (TQL) コマンドを使います。
Note
次の手順では、sqlcmd ツールを使います。 SQL Server ツールをインストールしていない場合は、Linux への SQL Server コマンドライン ツールのインストールに関する記事を参照してください。
同じターミナルで、sqlcmd を起動します。 次の例では、SA ユーザーを使ってローカル SQL Server インスタンスに接続します。 プロンプトが表示されてからパスワードを入力するか、-P パラメーターを追加してパスワードを指定します。
sqlcmd -S localhost -U SA
>1
プロンプトで、次の RESTORE DATABASE コマンドを入力します。1 行入力するごとに Enter キーを押します (複数行のコマンド全体を一度にコピーして貼り付けることはできません)。 すべてのYourDB
を、実際のデータベースの名前に置き換えます。RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf' GO
データベースが正常に復元されたことを示すメッセージが表示されるはずです。
RESTORE DATABASE
では、次の例のようなエラーが返されることがあります。File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file. Msg 5133, Level 16, State 1, Server servername, Line 1 Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).
この場合、データベースにはセカンダリ ファイルが含まれています。 これらのファイルを
RESTORE DATABASE
のMOVE
句で指定しないと、復元プロシージャでは元のサーバーと同じパスにこれらのファイルの作成が試みられます。バックアップに含まれるすべてのファイルの一覧を表示できます。
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak' GO
次のような一覧が表示されます (最初の 2 列のみを示してあります)。
LogicalName PhysicalName .............. ---------------------------------------------------------------------------------------------------------------------- YourDB Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf .............. YourDB_Product Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf .............. YourDB_Customer Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf .............. YourDB_log Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf ..............
この一覧を使って、追加ファイルの
MOVE
句を作成できます。 この例では、RESTORE DATABASE
は次のようになります。RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf', MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf' GO
サーバー上のすべてのデータベースの一覧を表示して、復元を確認します。 復元されたデータベースが一覧表示される必要があります。
SELECT Name FROM sys.Databases GO
移行されたデータベースに対して他のクエリを実行します。 次のコマンドでは、コンテキストが YourDB データベースに切り替えられて、そのテーブルの 1 つから行が選択されます。
USE YourDB SELECT * FROM YourTable GO
sqlcmd の使用が終わったら、「
exit
」と入力します。リモート ssh セッションでの作業が終わったら、「
exit
」と入力します。
次の手順
このチュートリアルでは、Windows 上でデータベースをバックアップし、SQL Server が実行されている Linux サーバーにそれを移動する方法について学習しました。 以下の方法を学習しました。
- SSMS と Transact-SQL を使用して、Windows でバックアップ ファイルを作成する
- Windows に Bash シェルをインストールする
- scp を使用して、Windows から Linux にバックアップ ファイルを移動する
- ssh を使用して、Linux コンピューターにリモート接続する
- 復元の準備のためにバックアップ ファイルを再配置する
- sqlcmd を使用して Transact-SQL コマンドを実行する
- RESTORE DATABASE コマンドを使用して、データベースのバックアップを復元する
- クエリを実行して移行を検証する
次に、SQL Server on Linux の他の移行シナリオを調べます。