type InnoDb ou MyIsam

Transcription

type InnoDb ou MyIsam
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 1
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Pour faire fonctionner PMB, il faut un « trio » qui contient un serveur web Apache, le langage de script PHP avec les
extensions adéquates (les .dll = dynamic libraries), et un serveur de bases de données Mysql.
Au début, on avait surtout eu recours au « trio historique » : Easyphp (1.8, ensuite 5.2.10). Mais PMB s’enrichit régulièrement
de nouvelles fonctionnalités, et les systèmes d’exploitation évoluent (XP, Vista, Windows 7). Il faut donc employer des
versions plus récentes de serveur, comme EasyPhp 12.1, Wamp 2.d.d ou Xampp 1.7.7.
Php 5.2 – MySQL 5.1 pour les versions de PMB <= 3.5.1
Php 5.3 – MySQL 5.5 pour les versions de PMB >= 3.5.1
Pour la version 3.5.1 de PMB, vous avez donc le choix entre le Php 5.2 et le Php 5.3.
A partir de la version 4.0 de PMB, il faut employer un autre serveur, comme EasyPhp12.1, Wamp 2.2.d ou Xampp 1.7.7. si on veut
« profiter » du portail intégré à PMB. En effet, la création de ce portail requiert du Php 5.3.
PMB et le type de tables : MyIsam ou InnoDb ?
N.B. Ce tutoriel a été mis à jour, il tient compte de l’existence des versions 3.5.1 et 4.0 de PMB
Il y a une différence majeure entre
- les serveurs en Php 5.2 qu’on a employés jusqu’à présent (EasyPhp 5.2.10, Wamp 2.0.h ou Xampp 1.7.1)
- les « nouveaux » serveurs en Php 5.3 (EasyPhp 12.1, Wamp 2.2.d ou Xampp 1.7.7)
Cette différence concerne le type de tables qui seront créées par défaut :
- des tables MyIsam en Php 5.2 – MySQL 5.1
- des tables InnodDb en Php 5.3 – MySQL 5.5.
Cela ne vous dit probablement pas grand-chose. Si vous voulez approfondir quelque peu le sujet, voici un lien utile.
http://www.tux-planet.fr/mysql-les-principales-differences-entre-myisam-et-innodb/
Avec la configuration standard de MySQL 5.5
- vous accédez à des bases InnoDb, MyIsam ou « mixtes »
- vous créez par défaut des tables InnoDb sauf si le fichier bibli.sql précise quel type de table créer
N.B. Bibli.sql est le fichier qui sert à créer la base PMB ; il se trouve dans le dossier pmb/tables.
Vous pouvez avoir des tables InnoDb
- si vous employez un serveur local en Php 5.3 – MySQL 5.5 (ex. EasyPhp 12.1, Wamp 2.2.d ou Xampp 1.7.7)
- si vous installez une base en ligne, et que vous demandez à l’hébergeur d’activer Php 5.3
- si vous installez une base sur l’Intranet avec un serveur en Php 5.3
En effet, dans un cas comme dans l’autre, le Php 5.3 est en général associé au MySQL 5.5, donc par défaut aux tables InnoDb.
Chaque type de table a bien sûr ses avantages et ses inconvénients, le choix dépend donc des fonctionnalités du logiciel.
MyIsam est le seul type de table qui supporte un index fulltext, ceci permet d’accélérer les recherches sur des mots, car
on se base sur un index spécifique.
Dans le cas de PMB, le type MyIsam ne s’impose au stade actuel que pour une seule table : la table explnum (les
documents numériques). Les autres tables peuvent être de type InnoDb ou MyIsam, peu importe.
Quel genre de problème la table explnm pourrait-elle poser ?
Cette table pourrait être de type InnoDb, sans index fulltext sur le champ explnum_index_wew.
Il arrive parfois que certains champs manquent, voire même que la table n’existe pas du tout.
On ne se rend pas nécessairement compte tout de suite de la présence de tables InnoDb. C'était mon cas, j'avais créé une base
en 3.5.0 avec Wamp 2.2.d et restauré une base en 3.5.0 (qui venait de EasyPhp 5.2.10). Vu qu’il s’agissait de la même version
de PMB (la 3.5.0), toutes les tables MyIsam que j’avais restaurées ont remplacé les tables Innodb que Wamp avait créées.
En effet, lorsqu’on fait une sauvegarde, le fichier précise à chaque fois quel « moteur » employer pour chaque table (MyIsam
ou Innodb), et lorsqu’on restaure des tables, on recrée une table du même modèle que celle de départ.
Vous pouvez aussi avoir des bases « mixtes ». Exemple : dans EasyPhp 5.2.10, votre base était en 3.4.16 ; vous installez
Wamp 2.2.d, et vous voulez profiter de la circonstance pour passer à une version supérieure de PMB, la 3.5.1.
Vous créez une base vide, Wamp va générer 230 tables en InnoDb et une en MyIsam (explnum). Vous restaurez ensuite votre
base, mais en 3.4.16, il n’y avait que 209 tables MyIsam. Donc certaines tables seront en InnoDb et d’autres en MyIsam.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 2
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Bien que ce problème éventuel ait été de très brève durée (c’est corrigé depuis la version 3.5.1), j’ai jugé utile
d’expliquer ici comment le détecter et comment y remédier.
Comment savoir si ce problème MyIsam – InnoDb vous concerne pour une base que vous auriez déjà installée ?
Si vous avez créé la base
- avec une version antérieure à la 3.5.0, en théorie aucun souci, vous étiez plus que probablement en Php 5.2 –
MySQL 5.1, donc la table explnum est de type MyIsam et a un index fulltext sur le champ explnum_index_wew
-
-
avec PMB 3.5.0, il faut vérifier si la table explnum existe, si elle est de type MyIsam et si elle a cet index fulltext,
cela dépend de la version de MySQL employée (5.1 ou 5.5) et de la configuration de MySQL.
En effet, le fichier bibli.sql de PMB 3.5.0 ne mentionnait pas le type de table à créer pour explnum.
Mais d’autre part, si vous avez ensuite restauré une ancienne base en MyIsam, le problème a pu disparaître avant
même que vous n’ayez perçu son existence !
avec PMB >= 3.5.1, aucun souci, la table explnum est de type MyIsam et a cet index fulltext, quelle que soit la
version de MySQL employée pour créer la base.
En effet, depuis la version 3.5.1 de PMB, le fichier bibli.sql spécifie que la table explnum doit être de type MyIsam.
En bref : ce type de souci a pu survenir pour une installation en mode local, sur l’Intranet ou en ligne, avec MySQL 5.5
configuré de manière standard, mais uniquement pour PMB 3.5.0. Il ne risque plus de se reproduire.
L’interface de PhpMyAdmin vous montre (dans ce cas-ci) que toutes les tables sont de type MyIsam, explnum y compris.
Vous voyez aussi que la table explnum a un index fulltext sur le champ explnum_index_wew.
La vérification de la présence des index est aussi possible dans PMB (Administration – Outils)
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 3
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Si vous n’avez pas accès à PhpAdmin, faites une sauvegarde de la table explnum et analysez son contenu.
•
•
•
•
•
Administration - Sauvegarde
Créer un groupe de tables appelé « explnum ». Il contiendra une seule table, explnum
Créer un jeu de sauvegarde qui portera le même nom et sauvegarder la table explnum
Se déconnecter de la base
Ouvrir le fichier explnum.sav dans un éditeur comme le bloc-notes ou Notepad++ (pas le traitement de texte !)
PMB 3.5.0 - Contenu partiel du fichier explnum.sav si la table explnum est vide et est de type MyIsam
Je ne reprends ici que la ligne 10, qui est la seule ligne à analyser.
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8) unsigned NOT NULL
DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT NULL DEFAULT '',
`explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data` mediumblob, `explnum_vignette`
mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text, `explnum_statut` int(5) unsigned NOT NULL DEFAULT '0',
`explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew` mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0',
`explnum_path` text NOT NULL, PRIMARY KEY (`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin`
(`explnum_bulletin`), FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
PMB 3.5.0 - Contenu partiel du fichier explnum.sav si la table explnum est vide et est de type InnoDb
Je ne reprends ici que la ligne 10, qui est la seule ligne à analyser.
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8) unsigned NOT NULL
DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT NULL DEFAULT '',
`explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data` mediumblob, `explnum_vignette`
mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text, `explnum_statut` int(5) unsigned NOT NULL DEFAULT '0',
`explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew` mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0',
`explnum_path` text NOT NULL, PRIMARY KEY (`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin`
(`explnum_bulletin`)) ENGINE=INNODB DEFAULT CHARSET=latin1;
Si vous travaillez en mode local, il y a encore une autre manière de vérifier si les tables sont de type InnoDb ou
MyIsam. Vous avez accès au répertoire d’installation de PMB, vous pouvez donc aller voir « en coulisses » .
Ces deux dossiers contiennent les tables de PMB, et en outre, un fichier appelé “db.opt”
- c:\wamp\bin\mysql\mysql5.5.20\data\bibli
- c:\EasyPhp5210\mysql\data\bibli
N.B. Arrêtez le serveur avant de vous “balader” dans ces dossiers !
- c:\EasyPhp121\mysql\data\bibli
N.B. La version 3.5.1 de PMB comprend 231 tables au moment de l’installation – ce nombre peut augmenter par la suite (tout
dépend de ce que vous activez), mais la version 3.5.0 ne comprenait que 230 tables, ce qui explique les variations de chiffres.
Si toutes les tables sont de type MyIsam, vous trouverez dans ce répertoire
-
690 ou 693 fichiers liés aux tables - car chaque table est représentée par 3 fichiers
3 extensions possibles : .frm, .myd (données) et .myi (index)
691 ou 694 fichiers au total car il faut ajouter le fichier db.opt
Si toutes les tables sont de type InnoDb, vous trouverez dans ce répertoire
-
230 ou 231 fichiers liés aux tables - car chaque table est représentée par un seul fichier
une seule extension : .frm
231 fichiers au total car il faut ajouter le fichier db.opt
Si votre base est « mixte », le nombre de fichiers est imprévisible, il se situe entre 231 et 694.
L’instruction FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`) est en soi incompatible avec les tables InnoDb.
La présence de cette instruction peut donc provoquer divers types d’erreurs si on a installé PMB 3.5.0 avec la
configuration par défaut de MySQL 5.5, et si le script bibli.sql ne précise pas le type de table à créer.
•
•
•
Parfois la table explnum ne s’est pas créée. Si vous démarrez une nouvelle base, vous vous en rendrez compte très
vite. En effet, dès que vous essayerez de créer une notice, vous verrez un message d’erreur !
Parfois elle s’est créée mais elle n’a pas les bonnes caractéristiques (type InnoDb, donc sans index fulltext sur le
champ explnum_index_wew). Il se peut aussi que certains champs manquent.
Cela varie d’une configuration à l’autre.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 4
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Si la table explnum ne s’est pas créée
Si la table explnum s’est créée mais qu’elle n’a pas les bonnes caractéristiques (type InnoDb, donc sans index fulltext),
•
•
•
•
Parfois le problème disparaît automatiquement si vous restaurez ensuite une ancienne base en MyIsam, vous
n’avez peut-être même pas réalisé qu’il y avait eu un souci temporaire pendant quelques minutes.
Mais ce problème ne va pas toujours se résoudre de lui-même, miraculeusement, il faut parfois agir.
Même si vous passez de PMB 3.5.0 à PMB 3.5.1, cela ne changera rien aux caractéristiques de la table explnum
Le processus de mise à jour ne crée ni une table ni un champ qui manqueraient depuis le début, il ne change
pas le type de table, et il n’ajoute pas d'index fulltext à un champ si cet index fait défaut dès le départ.
Désormais, ce problème ne risque plus de se reproduire car les versions de PMB >= 3.5.1 spécifient que explnum doit
être une table MyIsam, quelle que soit la version de MySQL employée.
Toutefois, il se peut que certains d’entre vous aient créé une base PMB 3.5.0 avec un serveur en MySQL 5.5 et que la table
explnum pose encore problème, même si vous ne vous rendez pas compte pour le moment. Il faut corriger cela.
La version 4.0 de PMB vient de sortir.
Si vous constatez un problème pour la table explnum d’une de vos bases, faites la correction dans votre base actuelle
(en PMB 3.5.0 ou 3.5.1), avant de faire une (nouvelle) tentative de mise à jour de cette base vers PMB 4.0.x !!
Les modèles que j’ai donnés dans ce tutoriel pour la table explnum correspondent aux versions 3.5.0 et 3.5.1 de PMB.
Evitez de les employer pour corriger la table explnum si vous êtes déjà passé à la version 4.0.x de PMB.
Certes, il n’y a pas de différence pour le moment entre la version 3.5.1 et la version 4.0.1 de la table explnum, le modèle que
j’ai donné pour la 3.5.1 serait en théorie réutilisable tel quel en 4.0.1.
Mais rien ne garantit que ce sera le cas pour les versions ultérieures de PMB 4.0.x, on en est seulement au début, à la 4.0.1 !
La correction peut se faire dans l’interface de PhpMyAdmin, mais j’ai choisi une autre voie. Voici mes raisons.
• Vous n’avez pas nécessairement accès à PhpMyAdmin (tout dépend des droits qu’on vous a accordés)
• Vous ne vous sentez peut-être pas tout à fait à l’aise dans l’interface
J’ai privilégié une solution alternative qui ne fait pas appel à PhpMyAdmin et qui fonctionne en toute circonstance : la
restauration d’une version correcte de la table explnum.
•
•
•
•
Dans le navigateur, saisir ceci : http://monsite/pmb/admin/sauvegarde/emergency/emergency.php afin de lancer le
processus de restauration
Remplacer bien sûr « monsite » par la valeur adéquate
Remplacer éventuellement « pmb » par le nom du répertoire dans lequel PMB a été installé
Cliquer sur « parcourir » et sélectionner la variante correcte du fichier « explnum.sav »
Je rappelle brièvement les problèmes qu’on pourrait rencontrer pour la table explnum
Cette table pourrait être de type InnoDb, sans index fulltext sur le champ explnum_index_wew.
Il arrive parfois que certains champs manquent, voire même que la table n’existe pas du tout.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 5
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Comment obtenir une version correcte de la table explnum ?
1) Si la table explnum est vide ou n’existe pas, il suffit de restaurer dans la base une version correcte de cette table
(une table explnum vide, de type MyIsam).
Rappel : cela dépend de la version de PMB que vous employez pour le moment !
Vous trouverez sur mon site un zip qui contient 2 versions de la table explnum vide : en PMB 3.5.0 et en PMB 3.5.1
http://amcubat.be/docpmb/wp-content/uploads/table-explnum-vide-myisam-350-351.zip
Si vous n’avez pas accès à ce zip, j’ai expliqué dans les pages suivantes comment créer une table explnum vide.
Il est inutile de réindexer la base, puisque la table explnum n’a pas de contenu.
2) Si la table explnum est incorrecte (de type InnoDb, sans index fulltext sur le champ explnum_index_wew) mais
qu’elle a un contenu (car vous avez déjà créé des documents numériques), il faut procéder autrement.
-
Sauvegarder la table explnum
Faire quelques modifications dans le fichier .sav que vous avez obtenu, afin de changer les caractéristiques de la table,
et sauvegarder cette version corrigée
Restaurer la version modifiée de ce fichier
Rappel : cela dépend aussi de la version de PMB que vous employez pour le moment !
Il faut absolument réindexer la base, puisque la table explnum a un contenu qui n’était pas indexé correctement
jusqu’à présent.
Voici comment procéder pour une base en PMB 3.5.0 ou en PMB 3.5.1
Un élément peut toutefois diverger, comparé aux exemples qui suivent.
J’ai installé une base en ISO 8859-1, et il y a partout l’instruction DEFAULT CHARSET=latin1.
Si vous avez choisi un autre type de configuration, DEFAULT CHARSET aura une autre valeur.
Dans ce cas, vous ne pourrez pas réutiliser les exemples tels quels, ni le contenu du zip.
En cas de doute, je vous conseille de faire d’abord une sauvegarde de votre base, de vérifier le contenu du fichier .sav
obtenu, et de remplacer si nécessaire la valeur que j’ai donnée (latin1) par celle que DEFAULT CHARSET a dans votre
configuration.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 6
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Problème : que faire si la table explnum n’a pas été créée ?
Problème : que faire si la table explnum a été créée, mais qu’elle est de type InnoDb et qu’elle est vide ?
Solution valable dans les deux cas : créer une table explnum vide, de type MyIsam, qui aura un index fulltext
•
•
•
•
•
•
•
•
•
Si vous avez téléchargé le zip avec les 2 versions de la table explnum, vous ne devez pas créer la table vide
Si vous n’avez pas accès au zip avec les 2 versions de la table explnum, il faut créer la table vide
•
Ouvrir un simple éditeur comme le bloc-notes ou Notepad++ afin de créer un nouveau document.
•
J’insiste : employer un simple éditeur afin de faire disparaître tous les codes de mise en forme du traitement de texte
•
Copier le contenu ci-dessous, et coller ce contenu dans l’éditeur.
•
Attention ! Copier-coller le tout en un bloc, depuis #Name : explnum jusqu’à DEFAULT CHARSET=latin1 ; (ne pas oublier
d’inclure le point-virgule final dans la zone à copier)
•
Toute la partie entre CREATE TABLE et DEFAULT CHARSET=latin1 ; est en fait une seule ligne, au sens informatique du
terme ! Pas de saut de ligne dans cette zone !
•
Sauvegarder ce fichier texte sous le nom de explnum.sav
Ouvrir la base PMB
Dans le navigateur, saisir ceci : http://monsite/pmb/admin/sauvegarde/emergency/emergency.php afin de lancer le processus de
restauration
Remplacer bien sûr « monsite » par la valeur adéquate
Remplacer éventuellement « pmb » par le nom du répertoire dans lequel PMB a été installé
Cliquer sur « parcourir » et sélectionner soit le fichier du zip (la bonne version !), soit le fichier que vous venez de créer
Confirmer afin de lancer la restauration
Inutile de réindexer la base, puisque la table restaurée est vide
PMB 3.5.0 - Contenu du fichier explnum.sav si la table explnum est vide et est de type MyIsam
#Name : explnum
#Start time : 12:27
#Date : 2012-10-26
#Groups : 2
#Tables : explnum
#Compress : 0
#data-section
#explnum
drop table if exists explnum;
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`), FULLTEXT KEY
`i_f_explnumwew` (`explnum_index_wew`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Les caractéristiques d’une table explnum “correcte” sont
ENGINE=MyISAM
Ceci précise le “moteur” à employer pour créer ou restaurer la table
FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`)
Cet index sur le champ explnum_index_wew permet l’indexation plein texte des documents numériques
Rappel : ce type d’instruction n’est compatible qu’avec les tables MyIsam.
La 1e caractéristique d’une table vide est l’absence de l’instruction AUTO_INCREMENT= …
En effet, cette table explnum est vide, inutile donc de sauvegarder le « compteur » de l’auto-incrémentation.
La 2e caractéristique d’une table vide est l’absence de lignes qui commencent par
Insert into explnum(
Il n’y a en effet pas de contenu à reconstituer pour cette table.
Attention ! Ce « modèle » de table explnum est valable si vous voulez créer la table alors que vous êtes encore en
version 3.5.0 de PMB. Si vous vous rendez compte du problème plus tard, par exemple après la mise à jour vers PMB
Voir exemples pages 8-9.
3.5.1, il faut employer un autre « modèle » pour explnum.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 7
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Problème : que faire si la table explnum a été créée, mais qu’elle est de type InnoDb et qu’elle a un contenu ?
Solution en plusieurs étapes
Principe de base : sauvegarder la table explnum, modifier le fichier .sav et restaurer la version corrigée de ce fichier
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Administration - Sauvegarde
Faire une sauvegarde de l’ensemble de la base avant de commencer – on ne sait jamais …
Créer un groupe de tables appelé « explnum ». Il contiendra une seule table, explnum
Créer un jeu de sauvegarde qui portera le même nom.
Sauvegarder la table explnum
Se déconnecter de la base
Ouvrir le fichier explnum.sav dans un éditeur comme le bloc-notes ou Notepad++ (pas le traitement de texte !)
Modifier ce fichier (voir détails page suivante)
Le sauvegarder de préférence sous un nom différent, ex. « explnum1.sav », afin de conservez l’original intact
Ouvrir la base PMB
Dans le navigateur, saisir ceci : http://monsite/pmb/admin/sauvegarde/emergency/emergency.php afin de lancer le
processus de restauration
Remplacer bien sûr « monsite » par la valeur adéquate
Remplacer éventuellement « pmb » par le nom du répertoire dans lequel PMB a été installé
Cliquer sur « parcourir » et sélectionner le fichier « explnum1.sav »
Confirmer afin de lancer la restauration
Il est indispensable de réindexer la base. En effet, dans la version précédente (InnoDb), il n’y avait pas d’indexation
fulltext, il faut donc réindexer la base et les champs de recherche
PMB 3.5.0 - Exemple de fichier explnum.sav si la table explnum est de type InnoDb et a un contenu
#Name : explnum
#Start time : 12:27
#Date : 2012-10-26
#Groups : 2
#Tables : explnum
#Compress : 0
#data-section
#explnum
drop table if exists explnum;
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`) ) ENGINE=INNODB
AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
Ensuite, une série de lignes qui commencent par
Insert into explnum(
Les caractéristiques d’une table explnum “erronée” sont
ENGINE=INNODB
Ceci précise le “moteur” à employer pour créer ou restaurer la table
L’absence de l’instruction FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`)
Ceci permet l’indexation plein texte des documents numériques
Ce type d’instruction est incompatible avec les tables InnoDb, il est donc normal qu’elle ne figure pas ici.
La 1e caractéristique d’une table remplie est AUTO_INCREMENT=… (5 dans l’exemple ci-dessus)
En effet, cette table explnum a un contenu, il faut donc sauvegarder le « compteur » de l’auto-incrémentation.
Insert into explnum(
La 2e caractéristique d’une table remplie est la série de lignes qui commencent par
Ceci permet de reconstituer le contenu de la table.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 8
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Que faut-il changer dans la sauvegarde d’une table explnum de type InnoDb afin d’en faire une table MyIsam avec un
index fulltext, et afin d’en préserver le contenu ?
Pour modifier le type de table et créer l’index fulltext sur le champ explnum_index_wew
- une seule ligne change, la ligne 10 qui commence par CREATE TABLE, c’est donc la seule que j’ai reprise ici.
Pour récupérer le contenu complet de la table
- préserver la valeur du compteur d’auto-incrémentation !
- ne pas toucher au reste du fichier ! la série de lignes qui commencent par
Insert into explnum(
PMB 3.5.0 - Exemple de fichier explnum.sav si la table explnum est de type InnoDb et a un contenu
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`) ) ENGINE=INNODB
AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
PMB 3.5.0 – Correction à faire dans explnum.sav pour transformer la table InnoDb en MyIsam avec un index fulltext
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`), FULLTEXT KEY
`i_f_explnumwew` (`explnum_index_wew`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
Modifications à faire
•
•
•
Insérer une virgule, un espace et l’instruction FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`) entre les deux
parenthèses fermantes à la fin de l’instruction KEY `explnum_bulletin` (`explnum_bulletin`) )
Remplacer ENGINE=INNODB par ENGINE=MyISAM
Attention ! Ne pas toucher à l’instruction AUTO_INCREMENT=…, puisque la table a un contenu à préserver
Autre solution – sûrement plus simple ! A vous de choisir, de toute façon …
•
•
•
•
•
•
•
•
•
Mémoriser ou noter la valeur du compteur d’auto-incrémentation de votre sauvegarde (par exemple 12)
Dans votre sauvegarde du fichier explnum.sav, supprimer la ligne 10 qui commence par CREATE TABLE `explnum`
Copier dans le presse-papier toute la ligne de la version corrigée (voir cadre ci-dessus), depuis CREATE TABLE jusqu’à DEFAULT
CHARSET=latin1; (ne pas oublier d’inclure le point-virgule final dans la zone à copier)
Rappel : c’est une seule ligne, au sens informatique du terme, donc copier en un bloc, pas de saut de ligne !
Coller cette ligne dans votre sauvegarde du fichier explnum.sav, juste après la ligne 9 drop table if exists explnum;
Ceci remplacera donc l’ancienne version de la ligne 10 (que vous veniez de supprimer)
Dans l’exemple que je vous ai donné ici, AUTO_INCREMENT=5
Cette valeur ne correspond sûrement pas (à moins d’un hasard miraculeux !) à celle que vous aviez dans votre base
Remplacer cette valeur (5) par la valeur du compteur d’incrémentation de votre sauvegarde (par exemple 12)
Sauvegarder cette version modifiée, de préférence sous un nom différent, ex. « explnum1.sav ».
Restaurer la sauvegarde modifiée.
Réindexer la base et les champs de recherche
Attention ! Ce « modèle » de table explnum est valable si vous voulez corriger la table alors que vous êtes encore en
version 3.5.0 de PMB. Si vous vous rendez compte du problème plus tard, par exemple après la mise à jour vers PMB
Voir exemples pages 8-9.
3.5.1, il faut employer un autre « modèle » pour explnum.
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 9
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Que faire si on se rend compte du problème plus tard, après une mise à jour vers PMB 3.5.1 ?
•
•
Les principes généraux que j’ai expliqués aux pages précédentes restent d’application
Mais les « modèles » de table explnum que je vous ai donnés ne conviennent plus, car les caractéristiques de
explnum ont changé entre les versions 3.5.0 et 3.5.1.
Je reprends donc en bref les problèmes et les solutions, en adaptant les données à la version 3.5.1 de PMB
Problème : que faire si la table explnum n’a pas été créée ?
Problème : que faire si la table explnum a été créée, mais qu’elle est de type InnoDb et qu’elle est vide ?
Solution valable dans les deux cas : créer une table explnum vide, de type MyIsam, qui aura un index fulltext
PMB 3.5.1 - Contenu du fichier explnum.sav si la table explnum est vide et est de type MyIsam
#Name : explnum
#Start time : 12:35
#Date : 2012-10-26
#Groups : 12
#Tables : explnum
#Compress : 0
#data-section
#explnum
drop table if exists explnum;
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`), KEY `explnum_repertoire`
(`explnum_repertoire`), FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`) ) ENGINE=MyISAM DEFAULT
CHARSET=latin1;
Explications abrégées
•
•
•
•
•
•
•
Si vous avez téléchargé le zip avec les 2 versions de la table explnum, vous ne devez pas créer la table vide
Si vous n’avez pas accès au zip avec les 2 versions de la table explnum, il faut créer la table vide
o Ouvrir un simple éditeur comme le bloc-notes ou Notepad++ afin de créer un nouveau document.
o J’insiste : employer un simple éditeur afin de faire disparaître tous les codes de mise en forme du traitement
de texte
o Copier le contenu ci-dessous, et coller ce contenu dans l’éditeur.
o Sauvegarder ce fichier texte sous le nom de explnum.sav
Ouvrir la base PMB
Dans le navigateur, saisir ceci : http://monsite/pmb/admin/sauvegarde/emergency/emergency.php afin de lancer le
processus de restauration
Cliquer sur « parcourir » et sélectionner soit le fichier du zip (la bonne version !), soit le fichier que vous venez de
créer
Confirmer afin de lancer la restauration
Inutile de réindexer la base, puisque la table restaurée est vide
A.-M. Cubat
Correction éventuelle pour PMB 3.5.0 : tables InnoDb ou MyIsam
Page 10
Source : http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
Problème : que faire si la table explnum a été créée, mais qu’elle est de type InnoDb et qu’elle a un contenu ?
Principe de base : sauvegarder la table explnum, modifier le fichier .sav et restaurer la version corrigée de ce fichier
Que faut-il changer dans la sauvegarde d’une table explnum de type InnoDb afin d’en faire une table MyIsam avec un
index fulltext, et afin d’en préserver le contenu ?
Pour modifier le type de table et créer l’index fulltext sur le champ explnum_index_wew
- une seule ligne change, la ligne 10 qui commence par CREATE TABLE, c’est donc la seule que j’ai reprise ici.
Pour récupérer le contenu complet de la table
- ne pas toucher au reste du fichier !
- préserver la valeur du compteur d’auto-incrémentation !
PMB 3.5.1 - Exemple de fichier explnum.sav si la table explnum est de type InnoDb et a un contenu
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`), KEY `explnum_repertoire`
(`explnum_repertoire`)) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
PMB 3.5.1 – Correction à faire dans explnum.sav pour transformer la table InnoDb en MyIsam avec un index fulltext
CREATE TABLE `explnum` ( `explnum_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `explnum_notice` mediumint(8)
unsigned NOT NULL DEFAULT '0', `explnum_bulletin` int(8) unsigned NOT NULL DEFAULT '0', `explnum_nom` varchar(255) NOT
NULL DEFAULT '', `explnum_mimetype` varchar(255) NOT NULL DEFAULT '', `explnum_url` text NOT NULL, `explnum_data`
mediumblob, `explnum_vignette` mediumblob, `explnum_extfichier` varchar(20) DEFAULT '', `explnum_nomfichier` text,
`explnum_statut` int(5) unsigned NOT NULL DEFAULT '0', `explnum_index_sew` mediumtext NOT NULL, `explnum_index_wew`
mediumtext NOT NULL, `explnum_repertoire` int(8) NOT NULL DEFAULT '0', `explnum_path` text NOT NULL, PRIMARY KEY
(`explnum_id`), KEY `explnum_notice` (`explnum_notice`), KEY `explnum_bulletin` (`explnum_bulletin`), KEY `explnum_repertoire`
(`explnum_repertoire`), FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`) ) ENGINE=MyISAM AUTO_INCREMENT=5
DEFAULT CHARSET=latin1;
Modifications à faire – Attention ! Différence entre PMB 3.5.0 et PMB 3.5.1
•
•
•
•
Insérer une virgule, un espace et l’instruction FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`) entre les deux
parenthèses fermantes à la fin de l’instruction KEY `explnum_repertoire` (`explnum_repertoire`) )
C’est à cet endroit-là, entre les deux parenthèses fermantes de la dernière instruction de la liste qu’il faut désormais insérer
FULLTEXT KEY `i_f_explnumwew` (`explnum_index_wew`)
Remplacer ENGINE=INNODB par ENGINE=MyISAM
Attention ! Ne pas toucher à l’instruction AUTO_INCREMENT=…, puisque la table a un contenu à préserver
Autre solution – sûrement plus simple ! A vous de choisir, de toute façon …
•
•
•
•
•
•
•
•
•
Mémoriser ou noter la valeur du compteur d’auto-incrémentation de votre sauvegarde (par exemple 12)
Dans votre sauvegarde du fichier explnum.sav, supprimer la ligne 10 qui commence par CREATE TABLE `explnum`
Copier dans le presse-papier toute la ligne de la version corrigée (voir cadre ci-dessus), depuis CREATE TABLE jusqu’à DEFAULT
CHARSET=latin1; (ne pas oublier d’inclure le point-virgule final dans la zone à copier)
Rappel : c’est une seule ligne, au sens informatique du terme, donc copier en un bloc, pas de saut de ligne !
Coller cette ligne dans votre sauvegarde du fichier explnum.sav, juste après la ligne 9 drop table if exists explnum;
Ceci remplacera donc l’ancienne version de la ligne 10 (que vous veniez de supprimer)
Dans l’exemple que je vous ai donné ici, AUTO_INCREMENT=5
Cette valeur ne correspond sûrement pas (à moins d’un hasard miraculeux !) à celle que vous aviez dans votre base
Remplacer cette valeur (5) par la valeur du compteur d’incrémentation de votre sauvegarde (par exemple 12)
Sauvegarder cette version modifiée, de préférence sous un nom différent, ex. « explnum1.sav ».
Restaurer la sauvegarde modifiée.
Important ! Réindexer la base et les champs de recherche !
Sources :
http://amcubat.be/docpmb/installation-reinstallation
http://amcubat.be/docpmb/wp-content/uploads/pmb-350-correction-eventuelle-tables-innodb-myisam.pdf
http://amcubat.be/docpmb/wp-content/uploads/table-explnum-vide-myisam-350-351.zip

Documents pareils

A.-M. Cubat Installation de PMB sous Windows avec Wamp 2.2.d et

A.-M. Cubat Installation de PMB sous Windows avec Wamp 2.2.d et Source : http://amcubat.be/docpmb/pmb-installation-windows-wamp-22d Merci à Eric Robert et à Florent Tétart, qui m’ont fourni de précieuses infos sur la configuration des tables MyIsam – InnoDB dan...

Plus en détail