Manual:Back up de uma wiki

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

É importante que sejam feitos backups regulares dos dados de sua wiki. Esta página dará uma visão geral de um típico processo de backup para uma wiki da Mediawiki; você provavelmente vai desejar escrever seu próprio script de backup e cronograma mais adequados ao tamanho de sua wiki e a suas necessidades.

Help:Export is a quick and easy way to save all pages on your wiki.

Visão geral

MediaWiki armazena dados importantes em dois lugares:

Banco de dados
Páginas e seus conteúdos, usuários e suas preferências, metadados, índices de pesquisa, etc.
Sistema de arquivos
Arquivos de configuração do software, interfaces personalizadas (skins), extensões, imagens (incluindo as excluídas), etc.

Considere mudar o status da wiki para "apenas leitura" antes de fazer o backup - veja $wgReadOnly . Esta ação garante que todas as partes de seu backup estarão consistentes (no entanto algumas de suas extensões instaladas podem escrever dados).

Transferência de arquivos

Você deverá escolher um método para transferir seus arquivos do servidor que os hospeda:

  • Dados não-privados podem ser publicados no archive.org e/ou em um diretório dumps do seu servidor web.
  • SCP (ou WinSCP), SFTP/FTP ou algum outro protocolo de transferência que você está acostumado ou está disponível.
  • A empresa de hospedagem pode fornecer uma interface com gerenciador de arquivos via navegador web; verifique com seu provedor.

Base de dados

A maior parte dos dados importantes de uma wiki está armazenada no banco de dados, que é tipicamente simples de se fazer backups. Ao usar o backend padrão MySQL, pode ser feito um dump do banco de dados para um arquivo script, que pode ser usado mais tarde para recriar o banco de dados e todo seu conteúdo do zero. If your wiki is currently offline, its database can be backed up by simply copying the database file.

When using the default MySQL or MariaDB backend, the database can be dumped into a script file which can be used later to recreate the database and all the data in it from scratch.

MySQL

Automysqlbackup

See the package on 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.
[...]

Install the package:

# apt install automysqlbackup

All your databases will be saved in /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

Manual backup:

# automysqlbackup

Restore a database:

gunzip < /var/lib/automysqlbackup/weekly/my_wiki/my_wiki_week.18.2016-05-07_15h32m.sql.gz|mysql -uUSER -pPASSWORD my_wiki

For other distributions, see on Sourceforge.

Mysqldump por linha de comando

O modo mais conveniente de criar um arquivo backup do banco de dados é usar a ferramenta padrão do MySQL mysqldump a partir da linha de comando. Tenha certeza de usar os parâmetros corretos ou você poderá ter dificuldades ao restaurar o banco de dados. Dependendo do tamanho do banco de dados, mysqldump pode levar um tempo considerável para executar.

Primeiro insira a seguinte linha no LocalSettings.php

$wgReadOnly = 'Dumping Database, Access will be restored shortly';

isto pode ser removido assim que o backup estiver concluído.

Exemplo do comando para executar no shell Linux/UNIX:

mysqldump -h hostname -u userid -p --default-character-set=charset dbname > backup.sql

Substituindo hostname, userid, whatever, and dbname como apropriado. All four may be found in your LocalSettings.php (LSP) file. hostname may be found under $wgDBserver ; by default it is localhost. userid may be found under $wgDBuser , charset may be found under $wgDBTableOptions , where it is listed after DEFAULT CHARSET=. If charset is not specified mysqldump will likely use the default of utf8, or if using an older version of MySQL, latin1. While dbname may be found under $wgDBname . After running this line from the command line mysqldump will prompt for the server password (which may be found under Manual:$wgDBpassword in LSP).

Para ter toda a lista dos parâmetros do comando veja mysqldump

A saída do mysqldump pode ao invés ser direcionada para gzip, para um arquivo de saída menor, como se segue

mysqldump -h hostname -u userid -p dbname | gzip > backup.sql.gz

Some newer versions of MySQL might show an error about tablespaces and PROCESS privilege. MediaWiki does not use tablespaces. The solution is to add the --no-tablespaces option to the command:

mysqldump --no-tablespaces -h hostname -u userid -p dbname | gzip > backup.sql.gz

Um comando mysqldump pode ser usado para produzir uma saída em formato XML, adicionando o parâmetro --xml

mysqldump -h hostname -u userid -p --xml dbname > backup.xml

e para comprimir o arquivo redirecionando para gzip

mysqldump -h hostname -u userid -p --xml dbname | gzip > backup.xml.gz

Additional options you should consider using with mysqldump for a backup includes the following.

Additional Mysqldump Options
Option Description
--default-character-set Specify default character set
--no-tablespaces Do not write CREATE LOGFILE GROUP or CREATE TABLESPACE statements in output
--single-transaction Issue a BEGIN SQL statement before dumping data from server
--triggers Dump triggers for each dumped table
--routines Dump stored routines (procedures and functions) from dumped databases
--events Dump events from dumped databases
--add-drop-table Add DROP DATABASE statement before each CREATE DATABASE statement
--create-options Include MySQL-specific table options in CREATE TABLE statements
--extended-insert Use multiple-row INSERT syntax

If you do not use --single-transaction, then you should consider using the --lock-tables and --add-locks options.

Due to an unexpected change in MySQL versions 5.7.41 and 8.0.32 in February 2023, the --single-transaction option required the backup user to have RELOAD or FLUSH_TABLES privileges. The issue was fixed in MySQL versions 5.7.42 and 8.0.33. See MySQL Bug 109685 and Ubuntu Bug 2003866 for details.

Lembre-se de também fazer backup dos componentes do sistema de arquivo que podem ser requeridos, como imagens, logo e extensões.

Executando mysqldump com Cron

Cron é o agendador temporal dos sistemas operacionais baseados em Unix. Cron permite aos usuários agendar (comandos or scripts shell) para execução periódica em certos momentos, datas

Um comando de exemplo que você pode executar de crontab vai parecer com algo assim:

nice -n 19 mysqldump -u $USER --password=$PASSWORD $DATABASE -c | nice -n 19 gzip -9 > ~/backup/wiki-$DATABASE-$(date '+%Y%m%d').sql.gz

O código nice -n 19 diminui a prioridade dos processos.

Use valores válidos para $USER, $PASSWORD, e $DATABASE. Isto gravará um arquivo de backup com o dia da semana no nome do arquivo, assim você pode ter um conjunto rotativo de backups. Se quiser salvar também os arquivos e extensões, você pode querer usar este.

  Atenção: Não tente criar um backup do banco de dados MediaWiki usando mysqlhotcopy. O formato de tabela usado pelo MediaWiki não podemo ser copiado com essa ferramenta, e isso causará uma falha silenciosa.

Se você quer adicionar essa tarefa no Cron através do Cpanel então você deve escapar o caractere "%"

/usr/bin/mysqldump -u $USER --password=$PASSWORD $DATABASE -c | /bin/gzip > ~/backup/wiki-$DATABASE-$(date '+\%Y\%m\%d').sql.gz

caso contrário, você obterá um erro:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file

Running mysqldump with Systemd

Systemd unifies service configurations and control. Timers are systemd unit files that control service files or events. Timers can be used as an alternative to cron. An example of systemd unit files and backup script is shown below.

wiki-backup.timer

The following timer runs the wiki-backup service at 5:10 AM every morning.

$ 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

When the wiki-backup timer fires, then the service is invoked. The service runs a script located in /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

Tabelas

Sob exame cuidadoso, percebe-se que algumas tabelas salvas têm vários graus de dados temporários. Então, para economizar espaço em disco (além de apenas compactar), apesar dessas tabelas precisarem estar presentes em um backup apropriado, seus dados não são necessários. Entretanto, sob certas circunstâncias, as desvantagens de ter que reconstruir todos esses dados podem superar a ventagem de economia de espaço (por exemplo, em um wiki muito grande onde a velocidade de restauração é crucial).

See mailing list thread mysql5 binary schema about the topic.

Conversão de Latin-1 para UTF-8

Consulte a seção relevante da página de atualização para ver informações sobre este processo. Veja também a página de conversas para mais informações sobre como lidar com conjuntos de caracteres em geral.

PostgreSQL

Você pode usar a ferramenta pg_dump para copiar o conteúdo de um banco de dados PostgreSQL. Por exemplo:

pg_dump mywiki > mywikidump.sql

vai criar uma cópia do banco mywiki no arquivo mywikidump.sql.

Para restaurar o banco a partir do arquivo de backup:

psql mywiki -f mywikidump.sql

É possível também fazer uma cópia de informações globais, como o banco de dados com os usuários:

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

Coloque seu wiki em modo apenas leitura adicionando $wgReadOnly = 'Site Maintenance'; ao LocalSettings.php.

Find the wiki database in LocalSettings.php. Here is an example of what this looks like in LocalSettings.php:

## Database settings
$wgDBtype           = "mysql";
$wgDBserver         = "localhost";
$wgDBname           = "sashtmax_mw19999";
$wgDBuser           = "sashtmax_mw19999";
$wgDBpassword       = "S7[88p]jJJ";
  1. Open the browser to your phpadmin link, login, choose the wiki database.
  2. Select Export. Make sure all items under Export are highlighted, and make sure Structure is highlighted (it's important to maintain the table structure). Optionally check Add DROP TABLE to delete existing references when importing. Make sure Data is checked.
  3. Select zipped.
  4. Click on GO and save the backup file.[1]
  5. Remova $wgReadOnly = 'Site Maintenance'; do LocalSettings.php

Lembre também de tirar backup dos componentes do sistema de arquivos do wiki que podem ser necessários, por exemplo imagens, logotipo e extensões.

HeidiSQL (alternative to phpMyAdmin)

HeidiSQL is similar to phpMyAdmin, but without any restrictions of phpMyAdmin's free version. HeidiSQL requires a direct database connection, where some hosts may only offer web interfaces (phpMyAdmin) to firewalled databases.

Sistema de arquivos

MediaWiki armazena outros componentes do wiki no sistema de arquivos quando for mais apropriado que inserir no banco de dados, por exemplo arquivos de configuração do site ($1, $2 (finalmente removido na versão 1.23)), arquivos de imagem (incluindo imagens excluídas, miniaturas e imagens matemáticas renderizadas e SVG, se aplicável), personalização de skins, arquivos de extensões, etc.

The most important of these are:

  • LocalSettings.php
  • uploaded files in the images/ directory (including deleted files, thumbnails, and rendered math and SVG images, if applicable).

O melhor método de fazer backup desses arquivos é adicioná-los a um arquivo compactado, tal como um arquivo .tar, que pode então ser compactado se desejado. Em Windows, aplicações como WinZip ou 7-zip podem ser usadas, se preferido.

Em variantes do Linux, assumindo que o wiki está armazenado em /srv/www/htdocs/wiki

tar zcvhf wikidata.tgz /srv/www/htdocs/wiki

Deve ser possível fazer backup de toda a pasta "wiki" em "htdocs" se estiver usando XAMPP.

Configuration files

LocalSettings.php is the most important of these, but a wiki might also have things like .htaccess or other web server configuration files that should be backed up.

Uploaded files

Files uploaded to the wiki are by default put into the images/ directory, separated into subdirectories such as images/8/8f. There are also other directories such as images/archive/ and images/deleted/. These should all be backed up.

The images/thumb/ can be backed up along with everything else, but can optionally be excluded in order to save backup space. This directory stores the derived thumbnails of images and other files; generally multiple thumbnails per wiki file. After restoring from backup, these thumbnails will be recreated as required (although depending on $wgGenerateThumbnailOnParse this may need to be a manual process).

Backup do conteúdo da wiki (dump XML)

Também é uma boa ideia criar um dump XML adicional ao dump do banco de dados. Dumps XML contêm o conteúdo do wiki (páginas wiki com todas as revisões), sem os dados relacionados ao site (eles não contêm contas de usuários, metadados de imagens, logs, etc).[2]

Dumps XML têm menos probabilidade de causar problemas com codificação de caracteres, como meio de transferir grande quantidade de conteúdo rapidamente, e são mais fáceis de ser usados por ferramentas de terceiros, o que faz do dump XML uma boa retaguarda caso seu backup principal de banco de dados se tornar inutilizável.

Para criar um dump XML, use a ferramenta de linha de comando dumpBackup.php , localizada no diretório maintenance da sua instalação do MediaWiki. Consulte maintenance para mais detalhes. See Manual:DumpBackup.php for more details.

Você também pode criar um dump XML para um conjunto específico de páginas a partir da interface online, usando Special:Export, apesar de tentar criar um dump com grande quantidade de páginas através dessa interface normalmente excederá o limite de tempo.

Para importar um dump XML para um wiki, use a ferramenta de linha de comando importDump.php . Para um conjunto pequeno de páginas, você também pode usar a página Special:Import no seu navegador (por padrão, esta opção está restrita ao grupo sysop).

See Manual:Importando despejos de XML for more information.

Sem acesso shell ao servidor

See m:Data dumps about Wikimedia database dumps.

WikiTeam3

If you have no server shell access, use Save the Web Project's WikiTeam3 Python 3 script, (full instructions are at that link).

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

Scripts

With server shell access

  Atenção: Use these at your own risk. Check your wiki's LocalSettings.php for the correct character set to use, as you may need to edit the script to suit.

Shell script - last updated 2012.

  • Another backup script that: dumps DB, files (just pictures by default, option to include all files in installation), and XML; puts the site into read-only mode; timestamps backups; and reads the charset from LocalSettings.

Script does not need to be modified for each site to be backed up. Does not (yet) rotate old backups. Usage: backup.sh -d backup/directory -w installation/directory. Also provides a script to restore a backup restore.sh -a backup/directory/dated_archive.tar.gz -w installation/directory. Shell script - last updated 2013.

Shell script - last updated 2015.

Shell script - last updated 2016.

  • Script to make periodical backups mw_backup. This script will make daily, weekly and monthly backups of your database and images directory when run as a daily cron job.

PHP script - last updated 2017.

  • Another unofficial MediaWiki backup script for Windows by Lanthanis that: exports the pages of specified namespaces as an XML file; dumps specified database tables; and adds further specified folders and files to a ZIP backup file.

Can be used with Windows task scheduler. Last updated 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.

Extensions

Ver também

Referências

  1. Manual talk:Backing up a wiki#Ubuntu 10.10 - Step by Step Instructions
  2. Dumps XML são independentes da estrutura do banco de dados e podem ser importados em versões futuras (e até passadas) do MediaWiki.