Руководство:Резервное копирование вики

This page is a translated version of the page Manual:Backing up a wiki and the translation is 99% complete.
Outdated translations are marked like this.

Важно регулярно делать резервные копии данных в вашей Вики. В этом разделе описывается обзор процесса резервного копирования для типичной Вики на движке 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 для резервного копирования, включают следующее.

Дополнительные опции 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. Будет создан файл ежедневной копии базы данных. Если вы сохраняете файлы и расширения таким образом то вы можете использовать метод предложенный на другой странице.

  Внимание: Не используйте для резервного копирования mysqlhotcopy. Табличный формат, используемый MediaWiki не может быть скопирован этой программой, поэтому она сломает резервную копию!

Если Вы хотите добавить задание сохранения базы в планировщик 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";
  1. Откройте браузер по вашей ссылке phpmyadmin, авторизуйтесь, выберите базу данных вики.
  2. Выберите Экспорт. Убедитесь, что все элементы в разделе «Экспорт» выделены, а также убедитесь, что выделена структура (важно сохранить структуру таблицы). При необходимости установите флажок Добавить DROP TABLE, чтобы удалить существующие ссылки при импорте. Убедитесь, что данные проверены.
  3. Выберите архивный файл.
  4. Затем нажмите Вперёд и сохраните файл резервной копии.[1]
  5. Удалите $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, (запускается из командной строки в терминале).

Windows: When using --images, because NTFS does not allow characters such as :*?"<>| 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

  Внимание: Используйте их на свой страх и риск. Проверьте, какой набор символов используется в вашей Вики - LocalSettings.php , возможно, вам придется отредактировать скрипт в соответствии с этим.
  • неофициальный скрипт резервного копирования 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 и дампы файлов/изображений

См. также

Примечания