バックアップと復元を使用して 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 マシンの場合:
- コマンドライン ツールを使用した SQL Server (Red Hat Enterprise Linux、SUSE Linux Enterprise Server、または Ubuntu)。
Windows でバックアップを作成する
Windows でデータベースのバックアップ ファイルを作成するには、いくつかの方法があります。 以下の手順では、SQL Server Management Studio (SSMS) を使います。
Windows コンピューターで SQL Server Management Studio を開始します。
接続ダイアログ ボックスで、「localhost」と入力します。
オブジェクト エクスプローラーで、 [データベース] を展開します。
対象のデータベースを右クリックし、[タスク] を選択して、[バックアップ...] を選択します。
[Backup Up Database](データベースのバックアップ) ダイアログで、[バックアップの種類] が [Full](完全) であり、[バックアップ先] が [ディスク] であることを確認します。 ファイルの名前と場所を記録しておきます。 たとえば、SQL Server 2019 (15.x) では、
YourDB
という名前のデータベースの既定のバックアップ パスはC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
になります。[OK] を選んでデータベースをバックアップします。
もう 1 つの方法は、Transact-SQL のクエリを実行してバックアップ ファイルを作成するこです。 次の Transact-SQL コマンドでは、YourDB
という名前のデータベースに対して前の手順と同じ操作が実行されます。
BACKUP DATABASE [YourDB] TO DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL15.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\MSSQL15.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) コマンドを使います。
次の手順では、sqlcmd ツールを使います。 SQL Server ツールをインストールしていない場合は、「Linux に SQL Server コマンドライン ツール sqlcmd および bcp をインストールする」を参照してください。
同じターミナルで、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\MSSQL15.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\MSSQL15.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\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf .............. YourDB_Product Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf .............. YourDB_Customer Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf .............. YourDB_log Z:\Microsoft SQL Server\MSSQL15.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 の他の移行シナリオを調べます。