やりたい事は、
やりたい事ポイント
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自体が死んでしまった時にバックアップデータも同じマシンにあったとすれば復活できなくなってしまいますよね。
それで、
ココがポイント
バックアップデータは、環境の違うサーバーへ転送して二重化
にした訳です。
めでたし、めでたし・・・。