Scripts de maintenance et scripts SQL pour Mediawiki

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Accueil du FTP - Le privatebin : Accueil du privatebin
Le Redmine : Accueil du Redmine

Sommaire

Scripts de maintenance et scripts SQL pour Mediawiki

Utiliser les scripts présents dans le dossier de maintenance

Présentation du dossier de maintenance

Le dossier de maintenance de MediaWiki propose de nombreux scripts de maintenance essentiellement ou exclusivement à utiliser depuis une console.
Les utilisateurs d'un hébergement dédié pourront maintenir plus facilement Mediawiki.
En cas d'utilisation directement en front-end, un message d'erreur sera très souvent affiché.
Les utilisateurs d'un hébergement mutualisé pourront utiliser des extensions complémentaires pouvant être utilisées comme alternatives aux scripts de maintenance.
Exemples des scripts de maintenances les plus utilisés : https://fr.wikibooks.org/wiki/MediaWiki_pour_d%C3%A9butants/Mises_%C3%A0_jour_et_maintenance#Les_scripts_de_maintenance_les_plus_usit%C3%A9s
Exemples des scripts de maintenances les plus utilisés : https://m.mediawiki.org/wiki/Manual:Maintenance_scripts/fr
Documentation sur l'ensemble des scripts de maintenance de Mediawiki : https://doc.wikimedia.org/mediawiki-core/master/php/group__Maintenance.html

Utiliser le script de maintenance update

Utiliser ce script avec précaution ! Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/update.php
Exécuter la commande de maintenance depuis Apache2 sous GNU/Linux Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/update.php

Utiliser le script de maintenance changePassword

Utiliser ce script avec précaution ! Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
Use the changePassword.php maintenance script (https://www.mediawiki.org/wiki/Manual:ChangePassword.php et https://www.mediawiki.org/wiki/Manual:Maintenance_scripts)
Allows system administrators to change the password for an account. For complete instructions see changePassword.php. If you are already familiar with maintenance scripts, run the following command:
# set the password for username 'example' to 'newpassword'
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : root@debian-8:/# /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/changePassword.php --user=example --password=newpassword
Caution: System administrators should not know the unencrypted password for user accounts. A user may use the same password over many different sites. If one of their accounts that uses the same password is compromised, then suspicion can be thrown on the administrator. It is better to use "Email new password" to force the user to reset the password for their own account.

Utiliser le script de maintenance deleteArchivedRevisions

Utiliser ce script avec précaution ! Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
Manuel Mediawiki : https://www.mediawiki.org/wiki/Manual:DeleteArchivedRevisions.php
Cette commande ne supprime pas l'historique totalement.
Le fichier deleteArchivedRevisions.php est un script de maintenance pour supprimer toutes les révisions archivées (cachées de la vue publique) en effaçant l'archive de la table des révisions.
Ces révisions ne pourront plus être rétablies. Les pages supprimées et les révisions archivées d'une page donnée sont définitivement supprimées, mais, l'historique complet des pages existantes restera.
Comment supprimer alors l'historique complet qui reste présent ?
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/deleteArchivedRevisions.php --delete
Exécuter la commande de maintenance depuis Apache2 sous GNU/Linux Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/deleteArchivedRevisions.php --delete

Utiliser le script de maintenance deleteAutoPatrolLogs

Ce script m'a également permis de gagner un peu d'espace sur la base. Il semble nettoyer des logs d'après son nom :
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/deleteAutoPatrolLogs.php
Exécuter la commande de maintenance depuis Apache2 sous GNU/Linux Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/deleteAutoPatrolLogs.php

Utiliser le script de maintenance deleteRevision

Utiliser ce script avec précaution ! Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
Supprimer une seule révision.
To find the ID of the revision to delete, look at the URL for each date on the history page. It will look something like https://www.visionduweb.eu/wiki/index.php?title=Ecrire_avec_MediaWiki&oldid=13211.
The revision ID is the oldid, 1234 in this example. This revision can be deleted like so: maintenance/deleteRevision.php 13211
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/maintenance/deleteRevision.php 13211
Manuel Mediawiki : https://www.mediawiki.org/wiki/Manual:DeleteRevision.php

Utiliser le script de maintenance deleteOldRevision

Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
Pour supprimer tous les historiques proprement, c'est ce script qu'il faut utiliser !
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/deleteOldRevisions.php --delete
Exécuter la commande de maintenance depuis Apache2 sous GNU/Linux Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/deleteOldRevisions.php --delete

Utiliser le script de maintenance rebuildrecentchanges

Rebuild permet d'effacer le lien qui pointe vers d'éventuelles modifications depuis la page Modifications récentes.
A utiliser en complément du script deleteOldRevision. (Sans l'option --delete !)
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/rebuildrecentchanges.php --delete
Exécuter la commande de maintenance depuis Apache2 sous GNU/Linux Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/rebuildrecentchanges.php

Utiliser le script de maintenance rebuildall

Le fichier rebuildall.php est un script de maintenance qui permet de reconstruire les liens et les index utilisés pour la recherche dans Mediawiki.
Exécuter ce script après avoir importé des données dans le wiki. Il va remplir les tables categorylink, pagelinks et imagelinks et actualiser l'index de recherche.
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/rebuildall.php
Exécuter la commande de maintenance depuis Apache2 sous GNU/Linux Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/rebuildall.php

Importer des images avec importImages.php et rebuildImages.php

# Sauvegarder la base de données pour pouvoir la réimporter en cas d'échec lors de l'importation.
# Les images ne seront pas importées même si elles sont dans le répertoire de téléchargement et que des articles ont des balises qui les utilisent.
# Il faut utiliser les scripts rebuildImages.php ou importImages.php pour importer les images.
# Vérifier les valeurs suivantes dans le fichier LocalSettings.php :
# Autoriser le chargement d'images :
$wgEnableUploads = true;
# Interdire l'utilisation de ImageMagick ce qui provoque une erreur sur l'affichage des miniatures.
# À suivre pour voir si il est possible de mieux configurer le serveur pour utiliser ImageMagick.
$wgUseImageMagick = false;
# Vérifier le chemin des versements de fichiers
$wgUploadDirectory ="{$IP}/images";
# Vérifier la valeur pour wgTmpDirectory pour renseigner l'emplacement du dossier temporaire pour permettre la génération des miniatures.
# Créer le dossier temp dans images/ si il n'existe pas déjà :
images/temp
#  #  # Note :
#  #  # Cette partie n'a pas été testée et fait référence à la source citée.
#  #  # Source : https://blog.skyplabs.net/2012/10/13/mediawiki-impossible-de-creer-la-miniature-dun-fichier-image/
#  #  # 
#  #  # Comme vous pouvez le voir, la directive $wgTmpDirectory n’est pas utilisée.
#  #  # La fonction recherche le répertoire temporaire par défaut du système au moyen des variables d’environnement.
#  #  # La solution est simple à mettre en œuvre depuis LocalSettings.php :
#  #  # <?php
#  #  # putenv("TMP={$wgUploadDirectory}/temp");
#  #  # ?>
# Copier le dossier "images" contenant les images sources de l'ancien Mediawiki en "images-bak".
# Créer un dossier images si il n'existe pas.
# Lui appliquer les droits 777 temporairement ainsi que le propriétaire et groupe de apache2 : "www-data:www-data".
cd /var/www/wiki/
sudo chown -R www-data. images-bak/
sudo chown -R www-data. images/
sudo chmod 777 -R  images-bak/
sudo chmod 777 -R  images/
# Éventuellement, désactiver le fichier ".htaccess"
sudo mv .htaccess ko.htaccess
# Lancer l'import avec importImages.php.
# Le format zip et pdf est ajouté pour importer tous les médias.
sudo php importImages.php /var/www/domaine/images-bak/ --search-recursively --extensions=svg,png,jpg,jpeg,gif,bmp,SVG,PNG,JPG,JPEG,GIF,BMP,zip,pdf
# L'étape précédente m'a permis d'importer les images dans le wiki.
# Le RebuildImages ne semble pas nécessaire, ou, ne pas fonctionner, lors d'un tel import, en tout cas, à partir de Mediawiki 1.34.2.
/usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/rebuildImages.php
...
91.53% done on image; ETA 2020-09-04 14:44:12 [2800/3059] 12577.61/sec <0.00% updated>
94.80% done on image; ETA 2020-09-04 14:44:12 [2900/3059] 12685.75/sec <0.00% updated>
98.07% done on image; ETA 2020-09-04 14:44:12 [3000/3059] 12783.81/sec <0.00% updated>
Finished image... 0 of 3059 rows updated.
# Vérifier si des doublons existent et les supprimer  :
# Afficher les fichiers en doubles ou plus qu'en double depuis la page spéciale : https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:ListDuplicatedFiles
# Faire une recherche dans la base de données, dans la table wiki_image, pour identifier la ligne correspondante à chaque doublon, puis, l'effacer.
# Faire une recherche dans le dossier images depuis le serveur, avec la commande locate, sur ce même nom d'image pour effacer les images existantes en double.
# Penser à mettre à jour la base locate avec la commande "sudo updatedb".
# Retirer du serveur l'ancien dossier "images-bak" qui a servi à importer les images vers le dossier "images". 

Politique de sécurité pour le dossier images de Mediawiki

# Redonner le chmod 755 au dossier images.
sudo chmod -R 755 images/
# Retirer le droit d'exécution dans le dossier images :
sudo chmod -x+X images/ -R
# Rétablir le fichier .htaccess si il existe :
sudo mv ko.htaccess .htaccess
# Ajouter la commande suivante dans le VirtualHost pour empêcher le listing du contenu du répertoire images si aucun fichier index n'est présent.
<Directory /var/www/wiki/images>
Options -Indexes
</Directory>
Sécurité pour le chargement des fichiers : https://www.mediawiki.org/wiki/Manual:Configuring_file_uploads#Check_directory_security

Utiliser le script de maintenance deleteBatch pour supprimer les pages orphelines

Utiliser ce script avec précaution ! Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
Une page orpheline est une page qui n'a pas été liée depuis une autre page.
Afficher les pages orphelines pour les lier ou les supprimer depuis la page spéciale : Spécial:Pages_orphelines.
Si vous en avez plus de 500, modifiez le paramètre "limit" dans l'URL pour gonfler ce chiffre jusqu'à 5000 par exemple.
Copier coller la liste, uniquement les titres des pages, dans un fichier texte sur votre serveur que vous appellerez par exemple list.txt.
Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : root@debian-8:/# /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/deleteBatch.php  --conf ./LocalSettings.php -r "spam" list.txt
Cette commande n'a pas été testée, il reste à vérifier que la syntaxe soit la bonne.
Manuel Mediawiki : https://www.mediawiki.org/wiki/Manual:DeleteBatch.php

Utiliser le script de maintenance RemoveUnusedAccounts pour supprimer les utilisateurs inactifs

# Utiliser ce script avec précaution ! Faire une sauvegarde de la base de données avant de lancer un script de maintenance.
# Le fichier RemoveUnusedAccounts.php est un script de maintenance qui permet de supprimer les comptes inutilisés qui n'ont pas de modifications, pas de modifications supprimées, pas d'entrées de journal et aucun téléchargement ancien ou en cours.
# Vous pouvez utiliser deleteArchivedRevisions.php pour supprimer les révisions supprimées, par exemple après une attaque massive de vandalisme / spam, et exécuter removeUnusedAccounts.php par la suite.
# Exécuter la commande de maintenance depuis Xampp sous GNU/Linux Debian : root@debian-8:/# /opt/lampp/bin/php /opt/lampp/htdocs/wiki/maintenance/removeUnusedAccounts.php
# Pour un environnement Apache2 Mysql PHP depuis Debian : /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/removeUnusedAccounts.php
Manuel Mediawiki : https://www.mediawiki.org/wiki/Manual:RemoveUnusedAccounts.php

Maintenance de la Base de données

Schéma de la base de données de Mediawiki 1.19

https://bio.mox.polimi.it/wp-content/uploads/2014/09/db1.png

Exemples de requêtes SQL pour Mediawiki

Changer le mail d'un utilisateur depuis la base de données

UPDATE mewi_vdw_user SET user_email='LeNouveauMail@EXT.org' WHERE user_id=22

Trouver un utilisateur avec son mail

# Vérifier si cette requête est toujours valable car je ne vois aucune table _user :
SELECT user_name FROM mw_user WHERE user_email = 'user@example.com';

Supprimer un utilisateur

# Vérifier si cette requête est toujours valable car je ne vois aucune table _user :
DELETE FROM mw_user WHERE user_id=2

Changer le mot de passe d'un utilisateur

UPDATE mw_user SET user_password = MD5( CONCAT( user_id, '-', MD5( 'ENTREZ VOTRE MDP ICI' ) ) ) WHERE user_id =22
Si votre installation MediaWiki utilise un cache mémoire, tel que APC, memcached ou Redis, l'objet utilisateur est mis en cache.
Après avoir effectué des modifications SQL, il faut alors vider le cache avant qu'un utilisateur ne puisse se connecter avec le nouveau mot de passe.
Choisir la méthode appropriée en fonction de la valeur de $wgPasswordDefault dans LocalSettings.php.
Le format de mot de passe: ": Pbkdf2: sha256: 10000: 128:", 'une autre chaîne', 'une autre clé' n'est pas toujours correcte !
Les nombres peuvent changer et aucune idée, ce que "une autre-chaîne" et "une autre clé" sont réellement.
MySQL pbkdf2
UPDATE `mw_user` SET user_password = CONCAT(':pbkdf2:sha256:10000:128:', 'another-string', 'another-key') WHERE user_name = 'someuser';
MySQL salted (Vérifier que la clé salée est bien celle utilisée pour cette instance de Mediawiki.)
UPDATE `user` SET user_password = CONCAT(':B:somesalt:', MD5(CONCAT('somesalt-', MD5('somepass')))) WHERE user_name = 'someuser';
Autre solution, copier un mot de passe existant
Copier par exemple le mot de passe connu pour un compte, vers un autre.
SELECT user_id, user_name, user_password FROM user;
user_id user_name user_password
1 User1 :B:1d8f41af:1ba8866d9c43d30b7bc037db03a067de
2 User2 :B:ee53710f:4291b056175513a5602d48eaeb79705c
UPDATE user SET user_password = ':B:ee53710f:4291b056175513a5602d48eaeb79705c' WHERE user_id = 1;

Réduire l'augmentation significative de la base de données

# Les trois tables qui me prennent le plus d'espace ont pu être réduites de deux tiers :
ALTER TABLE prefixe_text ROW_FORMAT=COMPRESSED;
ALTER TABLE prefixe_externallinks ROW_FORMAT=COMPRESSED;
ALTER TABLE prefixe_searchindex ROW_FORMAT=COMPRESSED;
Source : https://lxadm.com/MySQL:_changing_ROW_FORMAT_to_DYNAMIC_or_COMPRESSED
# Malgré tout, il s'agira uniquement d'un gain au niveau de MariaDB, mais, une fois la base téléchargée, elle atteint actuellement un volume de 500 Mo.
# Étonnant, puisque la sauvegarde du contenu brut, en XML, semble peser moins de 10 Mo, malgré les nombreux articles partagés.
# Différentes issues sont ouvertes :
https://www.mediawiki.org/wiki/Topic:Vo3botxgubpfnea7
https://www.mediawiki.org/wiki/Manual_talk:Text_table
https://phabricator.wikimedia.org/T239104

Gestion du cache de la base de données de mediawiki

Table l10n_cache

Son contenu peut être supprimé et exclu des sauvegardes car il sera régénéré en cas de besoin.
Source : https://www.mediawiki.org/wiki/Manual:L10n_cache_table
sudo mysql -u UTILISATEUR_BDD -p
PASSWORD_UTILISATEUR_BDD
USE LE_NOM_DE_LA_BASEDEDONNEES
SHOW TABLES FROM LE_NOM_DE_LA_BASEDEDONNEES;
# Connaître le poids de la table l10n_cache.
SELECT 
CONCAT(ROUND(((DATA_LENGTH + INDEX_LENGTH - DATA_FREE) / 1024 / 1024), 2), 'Mo') AS TailleMo 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'LE_NOM_DE_LA_BASEDEDONNEES'
AND   TABLE_NAME = 'PREFIXE-DE-LA-BASE-MEDIAWIKI_l10n_cache';
# Vider la table avec une requête SQL :
TRUNCATE `PREFIXE-DE-LA-BASE-MEDIAWIKI_l10n_cache`;

Table prefixe_externallinks

J'ai vidé le contenu sans rencontrer de difficultés avec Mediawiki.
L'extension semble toujours active depuis les pages spéciales mais ne retourne plus rien :
https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:Recherche_de_lien
Le contenu semble se recréer de lui même.
Pour autant, j'ai préféré réimporter la table sauvegardée, qui fait 10 Mo et ne comprend que des liens externes.

Table objectcache

Son contenu peut être supprimé et exclu des sauvegardes car il sera régénéré en cas de besoin.
Source : https://www.mediawiki.org/wiki/Manual:Objectcache_table
sudo mysql -u UTILISATEUR_BDD -p
M3diaUser : PASSWORD_UTILISATEUR_BDD
USE LE_NOM_DE_LA_BASEDEDONNEES
SHOW TABLES FROM LE_NOM_DE_LA_BASEDEDONNEES;
# Connaître le poids de la table objectcache.
SELECT 
CONCAT(ROUND(((DATA_LENGTH + INDEX_LENGTH - DATA_FREE) / 1024 / 1024), 2), 'Mo') AS TailleMo 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'LE_NOM_DE_LA_BASEDEDONNEES'
AND   TABLE_NAME = 'PREFIXE-DE-LA-BASE-MEDIAWIKI_objectcache';
# Vider la table avec une requête SQL :
TRUNCATE `PREFIXE-DE-LA-BASE-MEDIAWIKI_objectcache`;

Optimiser toutes les tables

optimize table PREFIXE_actor;
optimize table PREFIXE_archive;
optimize table PREFIXE_bot_passwords;
optimize table PREFIXE_category;
optimize table PREFIXE_categorylinks;
optimize table PREFIXE_change_tag;
optimize table PREFIXE_change_tag_def;
optimize table PREFIXE_comment;
optimize table PREFIXE_content;
optimize table PREFIXE_content_models;
optimize table PREFIXE_externallinks;
optimize table PREFIXE_filearchive;
optimize table PREFIXE_image;
optimize table PREFIXE_imagelinks;
optimize table PREFIXE_interwiki;
optimize table PREFIXE_ip_changes;
optimize table PREFIXE_ipblocks;
optimize table PREFIXE_ipblocks_restrictions;
optimize table PREFIXE_iwlinks;
optimize table PREFIXE_job;
optimize table PREFIXE_l10n_cache;
optimize table PREFIXE_langlinks;
optimize table PREFIXE_log_search;
optimize table PREFIXE_logging;
optimize table PREFIXE_module_deps;
optimize table PREFIXE_objectcache;
optimize table PREFIXE_oldimage;
optimize table PREFIXE_page;
optimize table PREFIXE_page_props;
optimize table PREFIXE_page_restrictions;
optimize table PREFIXE_pagelinks;
optimize table PREFIXE_protected_titles;
optimize table PREFIXE_querycache;
optimize table PREFIXE_querycache_info;
optimize table PREFIXE_querycachetwo;
optimize table PREFIXE_recentchanges;
optimize table PREFIXE_redirect;
optimize table PREFIXE_revision;
optimize table PREFIXE_revision_actor_temp;
optimize table PREFIXE_revision_comment_temp;
optimize table PREFIXE_searchindex;
optimize table PREFIXE_site_identifiers;
optimize table PREFIXE_site_stats;
optimize table PREFIXE_sites;
optimize table PREFIXE_slot_roles;
optimize table PREFIXE_slots;
optimize table PREFIXE_tag_summary;
optimize table PREFIXE_templatelinks;
optimize table PREFIXE_text;
optimize table PREFIXE_updatelog;
optimize table PREFIXE_uploadstash;
optimize table PREFIXE_user;
optimize table PREFIXE_user_former_groups;
optimize table PREFIXE_user_groups;
optimize table PREFIXE_user_newtalk;
optimize table PREFIXE_user_properties;
optimize table PREFIXE_valid_tag;
optimize table PREFIXE_watchlist;

Supprimer les données spam depuis la base de données avec SQL

Attention ! Manipulations critiques. Il est nécessaire de faire une veille approfondie.
Source 2011 : Permanently deleting MediaWiki pages and revisions : http://www.bigsoft.co.uk/blog/2011/08/03/permanently-deleting-mediawiki-pages-and-revisions

Torpiller les pages de son Mediawiki

Attention ! Manipulations critiques. Il est nécessaire de faire une veille approfondie.
Ko.png How to blank all page content in MediaWiki : https://www.richardcarterconsultancy.com/blog/how-to-blank-all-page-content-in-mediawiki/
https://superuser.com/questions/930920/how-to-properly-delete-all-page-content-in-mediawiki

Sauvegarder la base de données de MediaWiki

Sauvegarde MediaWiki avec Mysqldump

# Passer le wiki en lecture seule : 
sudo nano LocalSettings.php
$wgReadOnly = 'Sauvegarde de la base de données. Le site sera accessible dans quelques minutes.';
# Sauvegarder la base de données :
mysqldump -h hostname -u userid -p --default-character-set=utf8 dbname > backup.sql
# Sauvegarder la base de données en abaissant la priorité :
nice -n 19 mysqldump -h hostname -u userid -p --default-character-set=utf8 dbname > backup.sql
# Le résultat de mysqldump peut être gzippé pour obtenir un fichier de plus petite taille :
mysqldump -h hostname -u userid -p dbname | gzip > backup.sql.gz
# Le résultat de mysqldump peut être enregistré dans un fichier XML en incluant le paramètre --xml :
mysqldump -h hostname -u userid -p --xml dbname > backup.xml
# Compresser le fichier sous la forme gzip avec un pipe '|'
mysqldump -h hostname -u userid -p --xml dbname | gzip > backup.xml.gz

Tâche cron pour sauvegarder MediaWiki avec Mysqldump

nice -n 19 mysqldump -u $USER --password=$PASSWORD $DATABASE -c | nice -n 19 gzip -9 > ~/backup/wiki-$DATABASE-$(date '+%Y%m%d').sql.gz
# Pour ajouter cette tâche dans le Cron via Cpanel, protéger le caractère « % » en l'échappant :
/usr/bin/mysqldump -u $USER --password=$PASSWORD $DATABASE -c | /bin/gzip > ~/backup/wiki-$DATABASE-$(date '+\%Y\%m\%d').sql.gz

Sauvegarde XML

Les sauvegardes XML contiennent les pages du wiki avec toutes leurs révisions, sans les données relatives au site (Comptes utilisateurs, méta-données des images, les journaux...).
Les vidages XML sont moins sensés causer de problèmes avec l'encodage des caractères, que de pouvoir transférer de grandes quantités de contenu rapidement, et peuvent facilement être utilisés par des outils tiers, qui font que les vidages XML sont une bonne solution de repli si la sauvegarde principale de votre base de données venait à devenir inutilisable.

Exporter et Importer depuis les pages spéciales

# Cette option présente par défaut dans les pages spéciales de Mediawiki fonctionne très bien pour sauvegarder le contenu des pages.
Depuis "Pages spéciales" : https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:Pages_sp%C3%A9ciales
Outils pour les pages
    Exporter des pages
    Importer des pages
# "Exporter des pages" permet de sauvegarder des pages avec ou sans historique : https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:Exporter
# Les discussions, les images, les catégories, les comptes utilisateurs, les modèles, les transclusions, les pages de configurations CSS, ne seront pas exportées.
# "Importer des pages" depuis : https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:Importer
# Lors de l'import des pages sauvegardées, les pages déjà existantes dans le nouveau wiki ne seront pas importées, par exemple, la page d'accueil.
# Ajouter un préfixe interwiki pour l'import, si vous ne savez pas quoi utiliser, mettez une valeur de votre choix, par exemple, "fr".
# Importer les pages vers l'espace de nom principale.
Importer-des-pages-dans-mediawiki.png
# Pour le wiki.visionduweb.fr :
- Rétablir la page d'accueil et réimporter la discussion de la page d'accueil.
- Catégories à récupérer ?
- Recréer le compte Joomla et Anonymous.
- Récupérer les transclusions de l'entête, du pied de page et scam.
- Récupérer les modèles des transclusions et le Modèle:Faucet.
- Les deux CSS personnalisées pour le thème.

- Réimporter les images avec mportImages.php et rebuildImages.php.

- La page Discussion de Visionduweb doit être recréée.
- Les groupes qui pouvaient exister doivent être recréés, notamment en cas de configurations particulières pour la gestion de droits ACL pour restreindre l'accès à certaines pages.

En ligne de commande

Pour faire une sauvegarde XML, utiliser l'outil en ligne de commande dumpBackup.php, situé dans le répertoire maintenance de l'installation de MediaWiki :
Source : https://www.mediawiki.org/wiki/Manual:DumpBackup.php
Exemple : sudo /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/dumpBackup.php --full > dump.xml
Créer un vidage XML pour un ensemble particulier de pages en ligne avec Special:Export, bien qu'essayer de vider de grandes quantités de pages via cet interface risque de se terminer par un dépassement du temps limite autorisé pour l'opération.
Pour importer un vidage XML dans un wiki, utilisez l'outil de commande en ligne importDump.php.
Pour un petit nombre de pages, vous pouvez aussi utiliser la page Special:Import via votre navigateur. Par défaut, ceci est restreint au groupe sysop.
https://www.mediawiki.org/wiki/Manual:ImportDump.php
sudo /usr/bin/php /var/www/wiki.visionduweb.fr/maintenance/importDump.php < dump.xml

MWDumper

Comme alternative à dumpBackup.php et importDump.php, vous pouvez utiliser MWDumper, qui est plus rapide, mais nécessite l'environnement Java Runtime.
https://www.mediawiki.org/wiki/Manual:MWDumper
Voir Manuel:Importer des sauvegardes XML pour plus d'informations.
https://www.mediawiki.org/wiki/Manual:Importing_XML_dumps

Sauvegarde XML sans accès au shell du serveur

Utiliser le script Python dumpgenerator.py de WikiTeam en mode ligne de commande pour DOS, Unix ou Linux.
Nécessite Python v2 car v3 ne fonctionne pas encore.
https://github.com/WikiTeam/wikiteam/blob/master/dumpgenerator.py

python py.py https://wiki.visionduweb.fr --xml --images
Please install the kitchen module.
Please install or update the Requests module.

# Vérifier si les deux modules suivants sont nécessaires.
sudo apt-get install python-pip
sudo pip install pygame

# Installer les éléments requis : https://github.com/WikiTeam/wikiteam
pip install --user --upgrade -r requirements.txt
sudo pip install setuptools

# Le scann débute. (Il manque encore 2 modules.)
python py.py https://wiki.visionduweb.fr --xml --images
# Le Mediawiki est totalement chargé au format XML, ainsi que les images.
Pour obtenir un ficher XML, avec l'historique des modifications, le vidage ainsi qu'un vidage de toutes les images avec leur description, sans extensions ni configurations LocalSettings.php :
python dumpgenerator.py --api=http://www.sdiy.info/w/api.php --xml --images
Les instructions complètes se trouvent dans le tutoriel de WikiTeam.
https://github.com/WikiTeam/wikiteam/wiki/Tutorial#I_have_no_shell_access_to_server
Voir aussi Meta:Data dumps :
https://meta.wikimedia.org/wiki/Data_dumps
Source : https://github.com/WikiTeam/wikiteam
# Comment réimporter les données sauvegardées dans un nouveau Mediawiki ?
Utiliser le script https://github.com/WikiTeam/wikiteam/blob/master/uploader.py
# A suivre !

Scripts de sauvegarde pour Mediawiki

Pour Windows : https://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki/Lanthanis_backup_CMD
Script de sauvegarde des fichiers et de la base de données :
https://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki/Duesentrieb%27s_backup_script
https://www.mediawiki.org/wiki/User:Flominator/Backup_MW
https://www.mediawiki.org/wiki/Mw_tools
https://github.com/nischayn22/mw_backup
https://github.com/samwilson/MediaWiki_Backup
restore.sh -a backup/directory/dated_archive.tar.gz -w installation/directory

Ne pas utiliser mysqlhotcopy

Ne pas tenter de sauvegarder la base de données Mediawiki avec mysqlhotcopy.
Le format des tables utilisé par Mediawiki ne peut pas être sauvegardé avec cet outil.
L'échec serait silencieux !

Sauvegarde SQL dégradée lors du chargement par FTP

La sauvegarde de mediawiki dans une archive .sql affiche que le fichier n'est pas en utf8 valide lors de son ouverture.
Il semblerait que le même problème soit rencontré avec l'archive stockée via Dropbox.
L'archive semble fonctionnelle si je la charge par https.
Il est possible de contrôler le checksum pour vérifier l'intégrité du fichier, mais, cela ne règle pas le problème du fichier qui est corrompu.
Vérifier si après la réinstallation de Mediawiki et l'import des pages en XML, le problème perdure ou non.

Bibliographie

Ok-ko.png Manuel:Scripts de maintenance : https://www.mediawiki.org/wiki/Manual:Maintenance_scripts/fr
Ok.png Sauvegarder un Mediawiki : https://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki/fr

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Visionduweb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.