パソコン情報

SqlServerのバックアップをNASに行い、NASのバックアップをクラウドにミラーリングし二重化

やりたいこと

  1. SqlServerのバックアップ(特定フォルダにあるバックアップファイル)
  2. NASの特定フォルダにバックアップファイルを移動
  3. NASの特定フォルダとVPNで接続されたクラウドファイルサーバーの同期

つまり、SqlServerのバックアップを、NASとクラウドファイルサーバーの2ヶ所に行い2重化させておきたいのです。

 

SqlServerのバックアップを直接NASへNG

DISK = N'C:\temp\%TODAY%_DATABASE.bak

SqlServerのバックアップファイルを、「\\192.168.1.×××\Cloud_Backup」に出力しようとしましたが、エラーになりました。

調べて見るとセキュリティの問題から

ココに注意

SqlServerのバックアップファイルの出力先をNASにはできない

という事でした。

そこで、一旦、C:\tempへ出力してから、moveコマンドでファイルを移動させることにしました。

 

echo off
rem
rem SQL Serverのバックアップ
rem

rem 日付の取得
set TODAY=%date:~-10,4%%date:~-5,2%%date:~-2,2%
rem echo %TODAY%

rem SQLServerの再起動
echo SQLServerを再起動します.....
net stop localhost$SQLEXPRESS
net start localhost$SQLEXPRESS

rem バックアップの実行
echo バックアップしています.....
sqlcmd -S localhost\SQLEXPRESS -Q "BACKUP DATABASE データベース TO DISK = N'C:\temp\%TODAY%_DATABASE.bak' WITH INIT"

rem ファイルNAS移動
move C:\temp\*.* \\192.168.1.×××\Cloud_Backup\SqlBackup

 

NASからクラウドファイルサーバーへ

クラウドファイルサーバーと言っても、ネットワーク内では、普通の共有フォルダになります。

フォルダ丸ごと、クラウドファイルサーバーに同期させたいので下記のようにしました。

rem 日付の取得
set TODAY=%date:~-10,4%%date:~-5,2%%date:~-2,2%
rem 開始時刻を記録する
echo start > mirror.log
date /t >> mirror.log
time /t >> mirror.log
echo ■□■ FTP実行中 ■□■

robocopy \\192.168.1.×××\Cloud_backup \\192.168.100.×××\Cloud_backup /MIR

echo end >> mirror.log
date /t >> mirror.log
time /t >> mirror.log

robocopyというWindows搭載のミラーリングコマンドを使ってVPNで接続されたクラウドのファイルサーバーへ同期をさせました。

 

robocopyでミラーリング

robocopy <コピー元フォルダ> <コピー先フォルダ> /MIR /DCOPY:DAT

 

上記のコマンドにて、「/MIR」を付ける事で、コピー元と、コピー先が完全一致になります。「/DCOPY:DAT」は日付もコピー元と同じになる。

「/MIR」から「/E」にすると、コピー元で削除したファイルでも、コピー先では削除されない蓄積型になるようですね。

 

●ファイルを指定して同期も可能

robocopy C:\temp D:\test *.txt *.doc /MIR /DCOPY:DAT

この場合、拡張子がtxtとdocだけ同期できる。

 

もっと詳しくは下記のリンクを見るといいでしょう。

 

完全一致のミラーリングの場合、コピー元のデータを消してから、しまった!?ってなっても復元できなくなる危険性がありますね。そのようなうっかりミスをしそうな場合は、「/E」オプションにしてコピー先のファイルを消さない設定にしておいた方が良さそうです。