Windows Server: skript pro automatickou zálohu MySQL databáze a obsahu adresářů na FTP
MyEgo.cz
Windows Server: skript pro automatickou zálohu MySQL databáze a obsahu adresářů na FTP
Ideální hosting pro větší projekty, které nepotřebují vlastní dedikovaný server, je dle mého VPS s Windows. Snadno se administruje, nabízí vysoký výkon (v případě cloudu téměř neomezený), a spustíte na něm vše - od IIS, přes Apache, MySQL po SQL Server 2014.
Za pomoci jen integrovaných Windows nástrojů (Command line a ftp.exe) a 7Zipu je na takovémto serveru snadné napsat zálohování na externí FTP.
Osobně používám skript, který v pravidelném intervalu (X hodin) udělá kompletní dump MySQL databáze, nahraje jej zašifrovaný na FTP server, a jak lokálně tak na FTP serveru smaže staré zálohy, aby tam bylo místo pro nové. Podobně pracuji s adresáři, zazipují se, zašifrují, a nahrají na FTP server, se smazáním těch nejstarších.
Slouží mi pro to pár jednoduchých BAT souborů. Zálohu MySQL jsem převzal a upravil z Redolive.com.
Budu rád, pokud tyto zálohovací skripty použijete, když mi dáte vědět.
Skripty počítají s formátem data "xx dd. mm. yyyy" (česká instalace Windows Server 2012 R2), pokud máte na serveru jinak nastavené národní prostředí, skripty pracující s datumem upravte. Samozřejmě je potřeba nastavit [hodnoty v hranatých závorkách]. Na FTP skript předpokládá existenci adresářů /db a /media.
[config.bat] Konfigurační soubor
@echo off SET FTPUSER=[ftp_uzivatel] SET FTPPASSWORD=[ftp_heslo] SET FTPPORT=[ip_adresa_a_port_ve_tvaru_10,0,0,1,5,25] SET FTPHOST=[ftp_host] IF %1 NEQ "" SET FTPDIR=%1 SET DaysToKeep=7 :: ------------------------------------ :: DATUM ocekavano jako "xx dd. mm. yyyy" :: ------------------------------------ set year=%DATE:~11,4% set day=%DATE:~3,2% set mnt=%DATE:~7,2% set hr=%TIME:~0,2% set min=%TIME:~3,2% IF %day% LSS 10 SET day=0%day:~1,1% IF %mnt% LSS 10 SET mnt=0%mnt:~1,1% IF %hr% LSS 10 SET hr=0%hr:~1,1% IF %min% LSS 10 SET min=0%min:~1,1%
[mysqlbackup.bat] Záloha MySQL databáze
:: Auto MySQL Backup For Windows Servers By Matt Moeller v.1.5 :: RED OLIVE INC. - www.redolive.com @echo off setlocal enabledelayedexpansion enableextensions call config.bat db set backuptime=%year%-%day%-%mnt%-%hr%-%min% echo %backuptime% :: SETTINGS AND PATHS set dbuser=[db_user] set dbpass=[db_password] set errorLogPath="dumperrors.txt" set mysqldumpexe="[path_to]mysqldump.exe" set backupfldr="[backup_to_folder]" set datafldr="[mysql_data_folder]" set zipper="[path_to]7za.exe" set retaindays=3 :: GO FORTH AND BACKUP EVERYTHING! pushd %datafldr% echo "Pass each name to mysqldump.exe and output an individual .sql file for each" FOR /D %%F IN (*) DO ( IF NOT [%%F]==[performance_schema] ( SET %%F=!%%F:@002d=-! %mysqldumpexe% --user=%dbuser% --password=%dbpass% --databases --routines --log-error=%errorLogPath% %%F > "%backupfldr%%%F.%backuptime%.sql" ) ) echo "Zipping all files ending in .sql in the folder" %zipper% a -p%dbpass% -tzip "%backupfldr%FullBackup-%backuptime%.zip" "%backupfldr%*.sql" echo "Deleting all the files ending in .sql only" del "%backupfldr%*.sql" echo "Deleting zip files older than X days now" Forfiles -p %backupfldr% -s -m *.* -d -%retaindays% -c "cmd /c del /q @path" :: UPLOAD na FTP echo user %FTPUSERDISALLOWED (ftpup.dat echo %FTPPASSWORD)>ftpup.dat IF defined FTPDIR echo cd %FTPDIRDISALLOWED (>ftpup.dat echo binary>>ftpup.dat echo put FullBackup-%backuptime%.zip>>ftpup.dat echo quit>>ftpup.dat ftp -n -s:ftpup.dat %FTPHOST% del ftpup.dat echo "done" ::return to the main script dir on end popd :: FTP delete staré soubory call ftpdelete.bat db 7 endlocal
[mediabackup.bat] Záloha obsahu adresářů
@echo off setlocal enabledelayedexpansion enableextensions call config.bat media set backuptime=%year%-%day%-%mnt%-%hr%-%min% echo %backuptime% :: SETTINGS AND PATHS set backupsource=[dir_what_to_backup] set backupdest=[dir_where_to_backup] set zipper="]path_to]7za.exe" set retaindays=3 set archivepass=[zip_password] :: GO FORTH AND BACKUP EVERYTHING! echo "Zipping all media files" %zipper% a -p%archivepass% -r -tzip "%backupdest%FullBackup-%backuptime%.zip" "%backupsource%" > NUL echo "Deleting zip files older than X days now" Forfiles -p %backupfldr% -s -m *.* -d -%retaindays% -c "cmd /c del /q @path" :: UPLOAD na FTP echo user %FTPUSER)ftpup.dat echo %FTPPASSWORDDISALLOWED (>ftpup.dat IF defined FTPDIR echo cd %FTPDIR)>ftpup.dat echo binary>>ftpup.dat echo put FullBackup-%backuptime%.zip>>ftpup.dat echo quit>>ftpup.dat ftp -n -s:ftpup.dat %FTPHOST% del ftpup.dat echo "done" :: FTP delete staré soubory call ftpdelete.bat media 3 endlocal
[ftpdelete.bat] Automatické smazání starých souborů na FTP
@echo off setlocal enabledelayedexpansion enableextensions IF NOT defined FTPUSER call config.bat %1 IF %1 NEQ "" SET FTPDIR=%1 IF %2 NEQ "" SET DaysToKeep=%2 echo FTPDELETE %FTPDIR% %DaysToKeep% :: ------------------------------------ :: Dnesni datum :: ------------------------------------ echo System date: %date% SET dd=!day! SET mm=!mnt! SET yyyy=!year! SET origyyyy=!year! SET origmonth=!mnt! echo Current date: !dd!.!mm!.!yyyy! call :days SET /A today=!days! :: ------------------------------------ :: Listing FTP adresare :: ------------------------------------ echo user %FTPUSERDISALLOWED (ftpdir.dat echo %FTPPASSWORD)>ftpdir.dat IF defined FTPDIR echo cd %FTPDIRDISALLOWED (>ftpdir.dat IF defined FTPPORT echo literal port %FTPPORT)>ftpdir.dat echo dir *.zip ftplist.txt >>ftpdir.dat echo quit>>ftpdir.dat ftp -n -s:ftpdir.dat %FTPHOST% del ftpdir.dat :: ------------------------------------ :: Smazani starsich souboru nez X dnu :: ------------------------------------ echo user %FTPUSERDISALLOWED (ftpdel.dat echo %FTPPASSWORD)>ftpdel.dat IF defined FTPDIR echo cd %FTPDIRDISALLOWED (>ftpdel.dat :: for /f "tokens=6,7,8,*" %%a in )
Nepřemýšlel jste o využití PowerShell? Přece jen větší možnosti, 64bit běh a integrace s Windows.
Jediný přínos vidím ve skriptu pro zálohování MySQL. Zbytek je naprosto zbytečný, když existuje Cobian Backup, který je zadarmo a umí snad vše, co si dokáže člověk představit.
[2] existují zjevně lidé, co nechtějí instalovat, aktualizovat a konfigurovat freewarové utilitky s potencionálními bugy, když to jde řešit v rámci Windows..
[3] Myslím, že ve Windowsech těch bugů bude víc. Ale taky jsem programátor a rád si občas napíšu něco, co už udělali jiní. Konec konců, proč nevymýšlet vymyšlené, může to být lepší :-)
používám sqlcmd.exe -S server/data -U sa -P password -Q "backup database mojeneco to disk="c:\zaloha_%date%.bak" with name =N"zaloha_neco""
Naplánuji v plánovači úloh. Tak proč to dělat složitě... :-)