Руководство:Резервное копирование вики
Важно регулярно делать резервные копии данных в вашей Вики. В этом разделе описывается обзор процесса резервного копирования для типичной Вики на движке MediaWiki. Возможно, вы захотите разработать свой собственный скрипт резервного копирования или график резервного копирования в зависимости от размеров вашей Вики и ваших индивидуальных потребностей.
Обзор
MediaWiki хранит важные данные в двух местах:
- База данных
- страницы и их содержимое, пользователи и их настройки, метаданные, индекс поиска и другое
- Файловая система
- файлы конфигурации, файлы тем, расширения, изображения (включая удаленные изображения) и другое
Необходимо перевести MediaWiki в режим read-only прежде, чем создавать резервную копию — смотри раздел $wgReadOnly . Это будет гарантией того, что все части вашей резервной копии непротиворечивы (некоторые из установленных дополнений могут записывать данные в базу).
Передача файлов
Вам нужно выбрать способ для передачи файлов с сервера, где они находятся:
- Неконфиденциальные данные вы можете просто опубликовать на archive.org или в каталог
dumps/
вашего веб-сервера. - SCP (или WinSCP), SFTP/FTP или любой другой протокол передачи, который вы привыкли использовать.
- Хостинг компания может предоставлять интерфейс файлового менеджера при помощи веб-браузера; свяжитесь с вашим провайдером.
База данных
Большинство критических данных Вики хранятся в базе данных. Если ваша вики в настоящее время отключена, можно сделать резервную копию её базы данных, просто скопировав файл базы данных.
При использовании по умолчанию серверной части MySQL или MariaDB базу данных можно выгрузить в файл скрипта, который можно использовать позже для воссоздания базы данных и всех данных в ней с нуля.
MySQL
Automysqlbackup
Смотри пакет в Debian:
$ apt show automysqlbackup
[...]
Description: automysqlbackup creates backup every day, week and month for all of your MySQL database, to a configured folder. There's nothing to do but to install this package, and you'll rest assured that you have a way to go back in the history of your database.
[...]
Установка пакета:
# apt install automysqlbackup
Все ваши базы данных будут сохранены в /var/lib/automysqlbackup/
$ find /var/lib/automysqlbackup/
/var/lib/automysqlbackup/
/var/lib/automysqlbackup/weekly
/var/lib/automysqlbackup/weekly/my_wiki
/var/lib/automysqlbackup/weekly/my_wiki/my_wiki_week.18.2016-05-07_15h32m.sql.gz
/var/lib/automysqlbackup/monthly
/var/lib/automysqlbackup/daily
/var/lib/automysqlbackup/daily/my_wiki
Резервное копирование вручную:
# automysqlbackup
Восстановление базы данных:
gunzip < /var/lib/automysqlbackup/weekly/my_wiki/my_wiki_week.18.2016-05-07_15h32m.sql.gz|mysql -uUSER -pPASSWORD my_wiki
Другие версии смотри на SourceForge.
Получение Mysqldump из командной строки
Наиболее удобный способ для создания файла дампа базы данных — это использовать стандартный инструмент mysqldump. Оно является приложением командной строки. Убедитесь, что используете правильные параметры, в противном случае могут возникнуть трудности при восстановлении базы данных. В зависимости от размера базы данных, создание дампа может занять значительное количество времени.
Сначала вставьте следующую строку в LocalSettings.php
$wgReadOnly = 'Dumping Database, Access will be restored shortly';
это можно удалить после того, как только создание дампа будет завершено.
Пример команды для запуска на Linux/Unix оболочке:
mysqldump -h hostname -u userid -p --default-character-set=charset dbname > backup.sql
Изменяйте hostname
, userid
, charset
, и dbname
по мере необходимости.
Все четыре можно найти в файле LocalSettings.php (LSP).
hostname
может находится под $wgDBserver ; по умолчанию — localhost.
userid
может находится под $wgDBuser , charset
может находится под $wgDBTableOptions , где он указан после DEFAULT CHARSET=
.
Если charset
не указан, то mysqldump скорее всего, будет по умолчанию использовать utf8, или, если используется более старая версия MySQL, — latin1.
Тогда как dbname
может находится после $wgDBname .
После запуска этой строки из командной строки mysqldump запросит пароль сервера (который можно найти после Manual:$wgDBpassword в LSP).
Смотри страницу mysqldump для того, чтобы узнать все параметры командной строки.
На выходе можно сразу создать архив Wikipedia:ru:gzip, чтобы уменьшить размер
mysqldump -h hostname -u userid -p dbname | gzip > backup.sql.gz
Некоторые новые версии MySQL могут выдавать ошибку, связанную с табличными пространствами и привилегией PROCESS.
MediaWiki не использует табличные пространства.
Решение состоит в том, чтобы добавить в команду опцию --no-tablespaces
:
mysqldump --no-tablespaces -h hostname -u userid -p dbname | gzip > backup.sql.gz
Похожая команда может быть использована для создания XML файла, если добавить параметр --xml
.
mysqldump -h hostname -u userid -p --xml dbname > backup.xml
и сжать файл используя gzip
mysqldump -h hostname -u userid -p --xml dbname | gzip > backup.xml.gz
Дополнительные опции, которые следует рассмотреть при использовании mysqldump для резервного копирования, включают следующее.
Опция | Описание |
---|---|
--default-character-set | Укажите набор символов по умолчанию |
--no-tablespaces | Не записывать в вывод операторов CREATE LOGFILE GROUP или CREATE TABLESPACE |
--single-transaction | Выдача оператора BEGIN SQL перед сбросом данных с сервера |
--triggers | Триггеры выгрузки для каждой выгружаемой таблицы |
--routines | Выгрузка хранимых подпрограмм (процедур и функций) из выгруженных баз данных |
--events | Выгрузка событий из выгружаемых баз данных |
--add-drop-table | Добавление оператора DROP DATABASE перед каждым оператором CREATE DATABASE |
--create-options | Включение специфических параметров MySQL-таблиц в операторе CREATE TABLE |
--extended-insert | Используйте мнострочный синтаксис INSERT |
Если вы не используете --single-транзакцию, то следует рассмотреть возможность использования опций --lock-таблиц и --add-блокировок.
В связи с неожиданным изменением в версиях MySQL 5.7.41 и 8.0.32 в феврале 2023 года опция --single-транзакции требовала для резервного копирования привилегий RELOAD или FLUSH_TABLES от пользователя. Проблема была исправлена в MySQL версий 5.7.42 и 8.0.33. Подробности см. в MySQL Bug 109685 и Ubuntu Bug 2003866.
Не забудьте создать резервные копии дополнительных компонентов файловой системы, используемых Вики, которые могут потребоваться при восстановлении, например, изображений, логотипов, скинов и расширений.
Запуск mysqldump при помощи Cron
Cron — классический демон выполнения заданий в unix-подобных ОС. Cron позволяет пользователям создавать задания (на выполнение команд или скриптов), которые нужно выполнять в определённое время или даты.
Пример команды которую вы можете запустить через crontab выглядит так:
nice -n 19 mysqldump -u $USER --password=$PASSWORD $DATABASE -c | nice -n 19 gzip -9 > ~/backup/wiki-$DATABASE-$(date '+%Y%m%d').sql.gz
nice -n 19
понижает приоритет процесса.
Установите правильные значения для переменных $USER
, $PASSWORD
, $DATABASE
. Будет создан файл ежедневной копии базы данных. Если вы сохраняете файлы и расширения таким образом то вы можете использовать метод предложенный на другой странице.
Если Вы хотите добавить задание сохранения базы в планировщик Cron через Cpanel, то вы должны экранировать символ «%»
/usr/bin/mysqldump -u $USER --password=$PASSWORD $DATABASE -c | /bin/gzip > ~/backup/wiki-$DATABASE-$(date '+\%Y\%m\%d').sql.gz
В противном случае, Вы получите ошибку:
/bin/sh: -c: line 0: unexpected EOF while looking for matching `'' /bin/sh: -c: line 1: syntax error: unexpected end of file
Запуск mysqldump с помощью Systemd
Systemd унифицирует конфигурации и управление сервисами. Таймеры - это файлы модулей systemd, которые управляют служебными файлами или событиями. Таймеры могут использоваться в качестве альтернативы cron. Пример файлов блока systemd и сценария резервного копирования приведен ниже.
wiki-backup.timer
Следующий таймер запускает службу wiki-backup каждое утро в 5:10 утра.
$ cat /etc/systemd/system/wiki-backup.timer [Unit] Description=Run the backup service once a day Documentation=... [Timer] OnCalendar=*-*-* 05:10:00 RandomizedDelaySec=600 Persistent=true [Install] WantedBy=timers.target
wiki-backup.service
Когда срабатывает таймер wiki-backup, вызывается служба.
Сервис запускает скрипт, расположенный в каталоге /sbin
.
$ cat /etc/systemd/system/wiki-backup.service [Unit] Description=Run the backup service once a day Documentation=... [Service] Type=oneshot User=root ExecStart=/sbin/wiki-backup
wiki-backup script
$ cat /sbin/wiki-backup #!/usr/bin/env bash # Systemd adds random paths at times. Take full control of PATH. PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH # Read the backup password from conf or ini Failed wiki_password=... # Fix the wiki tables just in case. This step produces a lot of noise, # so send stdout to /dev/null. if MYSQL_PWD="${wiki_password}" \ mysqlcheck my_wiki --auto-repair --user=mwuser 1>/dev/null; then echo "Repair wiki database ok" else echo "Failed to repair wiki database" echo "Continuing anyways" fi # Disable the connection from Apache to MySQL for the dump if ! systemctl stop apache2.service ; then echo "Failed to stop Apache service" echo "Continuing anyways" fi # Lock option choice due to MySQL change at versions 5.7.41 and 8.0.32 in # February 2023. See https://bugs.mysql.com/bug.php?id=109685 and # https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/2003866. if mysql --version 2>&1 | grep -q -E 'mysql[[:space:]]+Ver 8\.0\.32'; then echo "Using MySQL --lock-tables --add-locks options" mysql_lock_opt="--lock-tables --add-locks" else echo "Using MySQL --single-transaction option" mysql_lock_opt="--single-transaction" fi if MYSQL_PWD="${wiki_password}" \ mysqldump --no-tablespaces \ ${mysql_lock_opt} \ --events --triggers --routines \ --add-drop-table --create-options \ --extended-insert \ --default-character-set=utf8 \ -u mwuser -h localhost my_wiki | gzip -q -v9 > /backup/wiki-backup.sql.gz ; then echo "Dump wiki database ok" else echo "Failed to dump wiki database" echo "Continuing anyways" fi # Re-enable connection from Apache to MySQL for the dump if ! systemctl start apache2.service ; then echo "Failed to start Apache service" echo "Continuing anyways" fi exit 0
Таблицы
Некоторые выгружаемые таблицы имеют разную степень временности. Таким образом, для экономии места на диске (помимо сжатия gzip), можно не копировать данные из временных таблиц, хотя сами таблицы должны быть в дампе. Однако, при определенных обстоятельствах, необходимость перестраивать все эти данные может перевесить желание сэкономить дисковое пространство (например, на большой вики, где скорость восстановления имеет первостепенное значение).
Обратитесь в список рассылки — раздел «mysql5 binary schema» по данному вопросу.
Преобразование кодировки Latin-1 в UTF-8
Смотри раздел страницы обновления для того, чтобы узнать, как это делается. Также смотри страницу обсуждения для того, чтобы узнать, как работать с кодировками в целом.
PostgreSQL
Вы можете использовать утилиту pg_dump
для резервного копирования MediaWiki на PostgreSQL. Например:
pg_dump mywiki > mywikidump.sql
скопирует базу mywiki
в файл mywikdump.sql.
Чтобы восстановиться из копии:
psql mywiki -f mywikidump.sql
Вы можете также скопировать глобальную информацию, например, пользователей базы:
pg_dumpall --globals > postgres_globals.sql
SQLite
If your wiki is currently offline, its database can be backed up by simply copying the database file.
Otherwise, you should use a maintenance script: php maintenance/SqliteMaintenance.php --backup-to <backup file name>
, which will make sure that operation is atomic and there are no inconsistencies.
If your database is not really huge and server is not under heavy load, users editing the wiki will notice nothing but a short lag.
Users who are just reading will not notice anything in any case.
phpMyAdmin
Переведите свою вики в режим только для чтения, добавив $wgReadOnly = 'Site Maintenance';
в LocalSettings.php.
Найдите базу данных вики в LocalSettings.php. Вот пример того, как это выглядит в LocalSettings.php:
## Database settings
$wgDBtype = "mysql";
$wgDBserver = "localhost";
$wgDBname = "sashtmax_mw19999";
$wgDBuser = "sashtmax_mw19999";
$wgDBpassword = "S7[88p]jJJ";
- Откройте браузер по вашей ссылке phpmyadmin, авторизуйтесь, выберите базу данных вики.
- Выберите Экспорт. Убедитесь, что все элементы в разделе «Экспорт» выделены, а также убедитесь, что выделена структура (важно сохранить структуру таблицы). При необходимости установите флажок Добавить DROP TABLE, чтобы удалить существующие ссылки при импорте. Убедитесь, что данные проверены.
- Выберите архивный файл.
- Затем нажмите Вперёд и сохраните файл резервной копии.[1]
- Удалите
$wgReadOnly = 'Site Maintenance';
из LocalSettings.php
Необходимо помнить, что некоторые системные компоненты в виде файлов необходимы всегда, например, изображения, лого и расширения.
Внешние ссылки
HeidiSQL (alternative to phpMyAdmin)
HeidiSQL — похожая на phpMyAdmin, но менее строгая версия бесплатного phpMyAdmin. HeidiSQL требует прямого подключения к базе данных, в то время как некоторые хосты могут предлагать только веб-интерфейсы (phpMyAdmin) к базам данных, находящимся под защитой.
Файловая система
MediaWiki хранит другие компоненты Вики в файловой системе.
Наиболее важными из них являются:
- LocalSettings.php
- загруженные файлы в директории
images/
(включая удаленные файлы, миниатюры и отрендеренные математические и SVG-изображения, если применимо).
Лучшим методом хранения таких файлов — архивы типа tar
, которые могут быть сжаты. Для Windows можно использовать такие утилиты, как WinZip или 7-Zip.
Варианты для Linux, если вики хранится в директории /srv/www/htdocs/wiki
tar zcvhf wikidata.tgz /srv/www/htdocs/wiki
Должна быть резервная копия всей папки wiki в директории htdocs, если используется XAMPP.
Конфигурационные файлы
LocalSettings.php - самый важный из них, но в вики могут быть также такие файлы, как .htaccess
или другие конфигурационные файлы веб-сервера, которые необходимо резервировать.
Загруженные файлы
Файлы, загружаемые в вики, по умолчанию помещаются в каталог images/
, разделенный на подкаталоги, например, images/8/8f
.
Существуют и другие каталоги, например, images/archive/
и images/deleted/
.
Все они должны быть резервированы.
Резервное копирование images/thumb/
может выполняться вместе со всем остальным, но по желанию может быть исключено для экономии места в резервной копии.
В этом каталоге хранятся созданные миниатюры изображений и других файлов; обычно на один вики-файл приходится несколько миниатюр.
После восстановления из резервной копии эти миниатюры будут воссозданы по мере необходимости (хотя в зависимости от $wgGenerateThumbnailOnParse это может потребоваться сделать вручную).
Резервная копия содержимого вики (XML dump)
Для дополнения дампа базы данных рекомендуется выполнять XML дапм. В XML дамп входит содержимое wiki-страниц и всех их ревизий (информация о логинаx пользователей, журналы, метаданные изображений в xml дампе не хранятся).
XML-дампы реже вызывают проблемы с character encoding, являются средством быстрой передачи больших объемов содержимого и могут легко использоваться сторонними инструментами, что делает XML-дампы хорошим запасным вариантом на случай, если основной дамп базы данных окажется непригодным.
Чтобы создать дамп XML, используйте инструмент командной строки dumpBackup.php
, расположенный в каталоге maintenance
вашей установки MediaWiki.
См. Manual:dumpBackup.php для более детальной информации.
Вы также можете создать дамп XML для определенного набора страниц в Интернете, используя Special:Export, хотя попытка выгрузить большое количество страниц через этот интерфейс обычно приводит к тайм-ауту.
Для импорта XML-дампа в wiki используйте инструмент коммандной строки importDump.php
.
для небольшого набора данных вы можете использовать Special:Import через браузер (по умолчанию эта функция доступна только sysop группе).
См. Manual:Importing XML dumps для более детальной информации.
Без доступа к серверу через командную строку (shell)
See m:Data dumps about Wikimedia database dumps.
WikiTeam3
Если у вас нет доступа к командной строке (shell), воспользуйтесь скриптом WikiTeam3 на Python 3 от проекта Save the Web, (запускается из командной строки в терминале).
:*?"<>|
in filenames, some files may not be downloaded, please check the errors.log file.Example usage
- --curonly dumps only the latest revision of pages
- --xml exports an XML dump, uses Special:Export by default when no other xmldump method is specified.
- --xmlrevisions uses API:Allrevisions (MediaWiki 1.27+) xmldump method. Recommended as it's quicker and puts almost no pressure on the MediaWiki backend compared to Special:Export.
- --images generates an image dump
- --force generates a dump even if there is one already at Internet Archive
- Public wikis
wikiteam3dumpgenerator <WIKI_URL> --xml --xmlrevisions
- Private wikis
- To dump a private wiki you will have to use a login that has at least read permission on the wiki.
wikiteam3dumpgenerator <WIKI_URL> --xml --xmlrevisions --force --user <USER> --pass <PASSWORD>
- If that doesn't work. Login with a web browser, save the site cookies in Netscape format to cookies.txt, and add option
--cookies cookies.txt
Скрипты
With server shell access
- неофициальный скрипт резервного копирования Flominator: User:Flominator/Backup MW; создает резервную копию всех файлов и базы данных с возможной ротацией резервных копий. Shell script - last updated 2012.
- Еще один скрипт backup script, который: делает дамп БД, файлов (по умолчанию только картинок, при установке можно включить все файлы) и XML; переводит сайт в режим "только чтение"; проставляет временные метки; считывает charset из LocalSettings. Сценарий не нужно модифицировать для каждого резервируемого сайта. Не производит (пока) ротацию старых резервных копий. Использование:
backup.sh -d backup/directory -w installation/directory
. Также предоставляется скрипт для восстановления резервной копииrestore.sh -a backup/directory/dated_archive.tar.gz -w installation/directory
. Скрипт оболочки, последнее обновление 2013 г. - User:Darizotas/MediaWiki Backup Script for Windows - скрипт для резервного копирования установки MediaWiki под Windows. Примечание: Не имеет функции восстановления. Скрипт оболочки, последнее обновление 2015 г.
- неофициальный скрипт резервного копирования User:Duesentrieb: Неофициальный скрипт резервного копирования Скрипт оболочки, последнее обновление 2016 года.
- Скрипт для периодического создания резервных копий mw_backup. Этот скрипт будет создавать ежедневные, еженедельные и ежемесячные резервные копии базы данных и каталога изображений при ежедневном запуске в качестве задания cron. PHP-скрипт, последнее обновление 2017 года.
- Еще один неофициальный MediaWiki backup script for Windows на Lanthanis, который: экспортирует страницы указанных пространств имен в XML-файл; делает дамп указанных таблиц базы данных; и добавляет дополнительные указанные папки и файлы в ZIP-файл резервной копии. Может использоваться с планировщиком задач Windows. Последнее обновление 2019 года.
Without server shell access
For example your wiki is in a wikifarm , using the MediaWiki API .
- WikiTeam's dumpgenerator Python 2 script can generate an XML dump and an image dump - last updated 2023.
- Mediawiki Client Tools' MediaWiki Dump Generator dumpgenerator Python 3 script can generate an XML dump and an image dump - last updated 2023.
- See above: Save the Web Project's WikiTeam3 wikiteam3dumpgenerator Python 3 script can generate an XML dump and an image dump - actively maintained in 2024.
Расширения
- Extension:DumpsOnDemand – Позволяет пользователям генерировать и загружать дампы баз данных
- Extension:DataDump – Позволяет пользователям генерировать и загружать XML и дампы файлов/изображений
См. также
- Справка:Экспорт - это быстрый и простой способ сохранить все страницы в вашей вики.
- Руководство: Восстановление вики-страницы из резервной копии
- Руководство:Перенос вики-сайта
- Руководство:Обновление
- Руководство:Восстановление кода вики из кэшированного HTML — если у вас нет успешного резервного копирования
- Exporting all the files of a wiki