Backup MediaWiki in Windows
From MediaWiki.org
Contents |
[edit] Backup in Windows
Following the example given by the script User:Flominator/Backup MW, I decided to write a new command line script (after doing it, it becomes in two scripts) in order to create backups in Windows, from now on it'll be named Wiki-WinBackup. Wiki-WinBackup creates backups from:
- Database. Where is located most of the critical information. It worths mentioning that MySQL 5.0.x is used as backend. Therefore, the script will use the MySQL Dump command line tool.
- Files. As you will see, the files to be included can be configured easily. By default:
- LocalSettings.php.
- AdminSettings.php.
- images directory.
- extensions directory.
On top of that, this script will create full XML backups as well.
[edit] Requirements
The following scripts require to have installed:
- 7-zip in order to create a zip file to ease the maintenance of the backup files.
- PHP in order to run Manual:DumpBackup.php.
Tested in Windows XP, Windows 2003 Server R2, Windows 2000 Advanced Server.
[edit] Architecture
The Wiki-Backup architecture is based on the following files:
- A #Text file] that contains the files and directories to be added in the zip file.
- #Helper script, which is responsible of:
- Creating the MySQL Dump file and create a zip file containing the previous dump file and the given list of files/directorios included in the #Text file to add.
- Deleting the obsolete backup files.
- #Main script, which is responsible to create the XML Dump and invoke the #Helper script.
[edit] Text file
The text file will contain the complete path to the files/directories to be added in the backup zip file. One file/directory per line, following the 7-zip file list format. For example,
"MediaWiki-Folder\LocalSettings.php" "MediaWiki-Folder\AdminSettings.php" "MediaWiki-Folder\images\" "MediaWiki-Folder\extensions\"
Where MediaWiki-Folder is your Mediawiki installation folder. Remember the path must be quoted whenever it contains spaces.
[edit] Helper script
As a result of executing this script (let's name it zip-backup), a numbered zip file is created. Therefore, zip-backup will perform the following tasks:
- Create the MySQL dump file
- Create the zip file with the given contents and the MySQL dump file
- Delete the obsolete files. It is understood by an obsolete file the one which sequence number exceeds the maximum to keep.
Let's see how to use it:
zip-backup output-preffix output-path list-files string-conn [max-allowed]
Where,
| output-preffix | Preffix of the zip filename. It's recommended not use spaces, if not, it must be quoted. Eg.: mybackup |
| output-path | Path where to save the zip file. It must be quoted, whenever contains spaces. Eg.: "C:\Program Files\" |
| list-files | Complete path to the filename that contains the files/directories to include in the zip file. This file must followed the 7-zip file list format |
| string-conn | String connection with the following format 'schema@user:pass' |
| max-allowed | (Optional) Maximum number of backups to keep. |
Example:
zip-backup "C:\My Backups\" "MyBackup" "C:\Program Files\ListMyBackup.txt" 10
This will create C:\My Backups\MyBackup-1.zip file containing the files/directories given at C:\Program Files\ListMyBackup.txt. And only the last 10 created zip files will be kept. Now, let's see the source code. Just copy it in a text file and rename it to zip-backup.cmd.
:: Creates a zip file from the list file given and from the MySQL dump file. :: The created zip file will be named with the given preffix and :: a sequence number. Eg.: :: <backup>-<sequence_number>.zip :: :: This script will also delete those obsolete zip files, that is :: those which sequence number exceeds the maximum allowed. :: :: Copyright (C) 2009 Dario Borreguero :: :: This program is free software: you can redistribute it and/or modify :: it under the terms of the GNU General Public License as published by :: the Free Software Foundation, either version 3 of the License, or :: (at your option) any later version. :: :: This program is distributed in the hope that it will be useful, :: but WITHOUT ANY WARRANTY; without even the implied warranty of :: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the :: GNU General Public License for more details. :: :: You should have received a copy of the GNU General Public License :: along with this program. If not, see <http://www.gnu.org/licenses/>. @echo off cls echo zip-backup Copyright (C) 2009 Dario Borreguero echo This program comes with ABSOLUTELY NO WARRANTY; This is free software, echo and you are welcome to redistribute it under certain conditions; echo See http://www.gnu.org/licenses/. echo. echo Starting zip-backup %date% - %time:~0,8% :: Output preffix if "%~1"=="" goto :ERR_USE :: Output path if "%~2"=="" goto :ERR_USE :: File list if "%~3"=="" goto :ERR_USE :: Database string connection if "%~4"=="" goto :ERR_USE :: Maximum allowed if "%~5"=="" ( set /A old=0 ) else ( set /A old=%5 ) setlocal enabledelayedexpansion :: 7-zip exists set z7="C:\Program Files\7-Zip\7z.exe" if not exist %z7% ( ECHO 7-zip can't be located at %z7% goto :END ) :: mysqldump exists set mysqldump="C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" if not exist %mysqldump% ( ECHO mysqldump can't be located at %mysqldump% goto :END ) echo [%time:~0,8%] Creating dump file... :: Retrieves user/pass and schema. for /F "tokens=1,2 delims=@" %%F in ("%4") do ( set schema=%%F for /F "tokens=1,2 delims=:" %%H in ("%%G") do set usr=-u %%H -p%%I ) set options=--verbose --quick --opt -C -e :: MysQL backup %mysqldump% %options% %usr% --databases %schema% > "%~2\%1.sql" if %errorlevel% neq 0 goto :end echo [%time:~0,8%] Dump file done :: Last sequence number. set /A k=0 for /F "tokens=2 delims=-." %%A IN ('dir /B "%~2\%1-*.zip"') do if %%A gtr !k! set /A k=%%A set /A k=%k%+1 :: Compressing echo [%time:~0,8%] Creating zip file... call %z7% a -tzip "%~2\%1-%k%.zip" @%3 "%~2\%1.sql" if %errorlevel% neq 0 if %errorlevel% neq 1 goto :END del /Q /F "%~2\%1.sql" echo [%time:~0,8%] Zip file done :: Delete obsolete zip files if %old% gtr 0 ( echo [%time:~0,8%] Deleting obsolete files... set /A max=%k%-%old% for /L %%B in (!max!,-1,1) do ( if exist "%~2\%1-%%B.zip" ( echo Deleting %~2\%1-%%B.zip del /Q /F "%~2\%1-%%B.zip" ) ) echo [%time:~0,8%] Deletion done ) goto :END :ERR_USE echo Usage: echo zip-backup output-preffix output-path list-files string-conn [max-allowed] echo output-preffix Preffix of the zip filename. It's recommended not use spaces, echo if not, it must be quoted. Eg.: mybackup echo output-path Path where to save the zip file. It must be quoted, whenever echo contains spaces. Eg.: "C:\Program Files\" echo list-files Complete path to the filename that contains the echo files/directories to include in the zip file. This file must echo followed the 7-zip file list format echo string-conn String connection with the following format 'schema@user:pass' echo max-allowed (Optional) Maximum number of backups to keep. echo. echo Example: echo zip-backup "C:\My Backups\" "MyBackup" "C:\Program Files\ListMyBackup.txt" 10 echo. echo This will create 'C:\My Backups\MyBackup-1.zip' file containing the echo files/directories given at 'C:\Program Files\ListMyBackup.txt'. And only the echo last 10 created zip files will be kept. pause goto :END :END echo End zip-backup %date% - %time:~0,8%
[edit] Main script
The main script (let's name it wiki-backup) uses #Helper script to create and maintain the backup files. This script is just responsible to create the XML Backup and invoke the previous script. Let's see how to use it:
wiki-backup output-preffix output-path list-files string-conn [max-allowed]
Obviously, the needed parameters are exactly the same than the ones for #Helper script. Said that, let's see the code. As well as for the #Helper script just copy the source code in a text file and rename it as wiki-backup.cmd.
:: Creates a full Mediawiki backup in a zip file. :: The backup contains: :: - Files and directories listed in the given file. :: - XML Dump. :: - MySQL Dump. :: This script requires zip-backup.cmd (in the same directory) to create :: the zip backup file and to deleted the obsoleted backups. :: :: Copyright (C) 2009 Dario Borreguero :: :: This program is free software: you can redistribute it and/or modify :: it under the terms of the GNU General Public License as published by :: the Free Software Foundation, either version 3 of the License, or :: (at your option) any later version. :: :: This program is distributed in the hope that it will be useful, :: but WITHOUT ANY WARRANTY; without even the implied warranty of :: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the :: GNU General Public License for more details. :: :: You should have received a copy of the GNU General Public License :: along with this program. If not, see <http://www.gnu.org/licenses/>. @echo off cls echo wiki-backup Copyright (C) 2009 Dario Borreguero echo This program comes with ABSOLUTELY NO WARRANTY; This is free software, echo and you are welcome to redistribute it under certain conditions; echo See http://www.gnu.org/licenses/. echo. echo Starting wiki-backup %date% - %time:~0,8% :: Output preffix if "%~1"=="" goto :ERR_USE :: Output path if "%~2"=="" goto :ERR_USE :: File list if "%~3"=="" goto :ERR_USE :: Database string connection if "%~4"=="" goto :ERR_USE :: Maximum allowed if "%~5"=="" ( set /A old=0 ) else ( set /A old=%5 ) :: PHP exists set php="C:\PHP\php.exe" if not exist %php% ( ECHO PHP can't be located at %php% goto :END ) :: DumpBackup exists set wikiroot="MediaWiki-Folder" set dump=%wikiroot%\maintenance\dumpBackup.php if not exist %dump% ( ECHO %dump% file does not exist goto :END ) :: AdminSettings.php exists :: http://www.mediawiki.org/wiki/Manual:DumpBackup.php if not exist %wikiroot%\AdminSettings.php ( ECHO AdminSettings.php can't be located at %wikiroot% goto :END ) echo [%time:~0,8%] Creating XML Dump file... %php% -d error_reporting=E_ERROR %dump% --full > "%~2\%1.xml" if %errorlevel% neq 0 goto :END echo [%time:~0,8%] XML Dump file done! :: Creates the file list complete set filelist="%~dp0zip-backup-complete_wiki.txt" for /F %%a in (%3) do echo %%a >> %filelist% echo "%~2\%1.xml" >> %filelist% call zip-backup.cmd %1 %2 %filelist% %4 %old% del /Q /F %filelist% del /Q /F "%~2\%1.xml" goto :END :ERR_USE echo Usage: echo wiki-backup output-preffix output-path list-files string-conn [max-allowed] echo output-preffix Preffix of the zip filename. It's recommended not use spaces, echo if not, it must be quoted. Eg.: mybackup echo output-path Path where to save the zip file. It must be quoted, whenever echo contains spaces. Eg.: "C:\Program Files\" echo list-files Complete path to the filename that contains the echo files/directories to include in the zip file. This file must echo followed the 7-zip file list format echo string-conn String connection with the following format 'schema@user:pass' echo max-allowed (Optional) Maximum number of backups to keep. echo. echo Example: echo wiki-backup "C:\My Backups\" "MyBackup" "C:\Program Files\ListMyBackup.txt" 10 echo. echo This will create 'C:\My Backups\MyBackup-1.zip' file containing the echo files/directories given at 'C:\Program Files\ListMyBackup.txt'. And only the echo last 10 created zip files will be kept. pause :END echo End wiki-backup %date% - %time:~0,8%
Warning: Please, notice you must set the environment variable wikiroot to the real MediaWiki installation folder before executing it.
[edit] Automating the backups
Finally, it's very important to automate the execution of Wiki-WinBackup. This can be accomplished by creating a Windows scheduled task (Start Menu -> Control Panel -> Scheduled tasks).
[edit] Recovery
Not yet implemented.
If true then where is the value of this back process?