やりたいこと
- SqlServerのバックアップ(特定フォルダにあるバックアップファイル)
- NASの特定フォルダにバックアップファイルを移動
- 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」オプションにしてコピー先のファイルを消さない設定にしておいた方が良さそうです。