パソコン情報

WindowsServerからSqlServerバックアップをFTPで自動転送する

やりたい事は、

 

やりたい事ポイント

WindowsServerにインストールしたSqlServerExpressのバックアップを外部のサーバーに自動で定期的にFTP転送したい

 

という事です。

流れとしては、バッチファイルで、SqlServerのバックアップをとり、FTPクライアントに、FFFTPを使ってバッチファイルで転送できたら、タスクスケジュールで定期的に動かすという事になります。

 

 

 

SqlServerのバックアップバッチファイル作成

 

以前にやったことがあるので、下記のプログラムで実行してみましたが、なぜかエラーが出てできませんでした。

echo off
rem SQL Serverのバックアップ
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 XXXXXXXXXX TO DISK = N'C:\TKH\sqlbackup\%TODAY%_DATABASE.bak' WITH INIT" [/php]

 

※ XXXXXXXXXXの部分に、データベース名を入れます。

これで問題なく行っているし、現在もちゃんと動いているのですが、今回のサーバーではエラーになります。

文字コードがおかしくなったのかな!?とか、なにか不足しているソフトがあるのかな!?とか色々とやりましたが訳が分かりません。

そして、結局下記の内容にしたらエラーなくバックアップを取るころができました。

rem 日付の取得
set TODAY=%date:~-10,4%%date:~-5,2%%date:~-2,2%
sqlcmd -S localhost\SQLEXPRESS -Q "BACKUP DATABASE [XXXXXXXXXX] TO DISK = N'C:\backup\%TODAY%_DATABASE.bak' WITH INIT"C:\backup\backup.log

 

ちょっと私のスキルでは、何がダメだったのかはわかりませんが、時間がないので良しとしました。

 

 

FFFTPで自動FTP転送のバッチファイル作成


過去にもやったことがあるので何のためらいもなく、「FFFTP」をインストールして、バッチファイルを作成して実行してみました。



https://pctips.jp/server/windows-ffftp-winscp-upload201909/

 



しかし、エラーが出て転送ができません。

手動で接続してみたら、

ココに注意

保護されていません。


っていうポップアップが出て先に進めない状態です。

 



その後諦めて、WinSCPにFTPクライアントを交換してやってみましたが、FTPサーバーの方が、SFTPに対応してない為なのか、接続できません。WinSCPも手動のFTP接続はできるのですが、バッチファイルからの自動転送は、SFTPしか見つかりませんでした。

 

困りました。その後、

WindowsオリジナルのFTPなどでバッチファイルを組んで実行してみましたが、まともにファイル転送できなくて時間だけが過ぎていくような状態でした。

 

注意ポイント

結局、数日悩んで、FTPサーバーの方を違う場所にしてFFFTPで接続したら問題なく接続できました。



今回のようなエラーが出る時は、FTPサーバー(レンタルサーバー屋さんを変更)の方を変えた方が良いってことですかね。

 

ちなみに、バッチファイルは下記のようになります。

rem --set : 接続するホストの設定名を指定する 
rem --mirrordown : 接続後ミラーリングダウンロードを行う 
rem --force : ミラーリング開始の確認をしない 
rem --quit : ミラーリング終了後、FFFTPを閉じる 
rem 開始時刻を記録する 
echo start log.txt date /t log.txt time /t >> log.txt 
rem バックアップを行う 
"C:\Program Files\ffftp\FFFTP.exe" --set "XXXXXXXXXX" --mirror --force --quit 
rem 終了時刻を記録する 
echo end  log.txt date /t log.txt time /t log.txt

 

※ XXXXXXXXXXの部分は、FFFTPに手動で設定したホスト名を入れます。


このバッチプログラムを動かすと、外部のFTPサーバーに指定したフォルダ内のデータをミラー転送してくれます。




タスクスケジューラで定期実行



タスクスケジューラに、作成したSqlServerのバックアップするバッチプログラムと、そのバックアップデータを外部に転送するバッチプログラムをセットしました。

※セットの仕方は、この回では省かせていただきます。



タスクスケジューラには、

参考

23時55分になると、SqlServerのバックアップが実行されます。

23時59分になると、そのバックアップファイルが外部のFTPサーバーに転送されます。




なんで、こんな設定をしたかと言えば、SqlServer自体が死んでしまった時にバックアップデータも同じマシンにあったとすれば復活できなくなってしまいますよね。

それで、

ココがポイント

バックアップデータは、環境の違うサーバーへ転送して二重化



にした訳です。

めでたし、めでたし・・・。