D’accord, je n’ai pas pu laisser tomber ça.
Bien que je suppose qu’il soit possible que l’erreur que j’ai obtenue puisse être gérée par le script d’importation, il me semble vraiment qu’il s’agit d’un problème avec la structure de la base de données de phpBB3, et le fait que mon collation de base de données soit UTF8. J’ai obtenu cette erreur en exécutant le script d’importation :
ERROR 1071 (42000) at line 1233035: Specified key was too long; max key length is 1000 bytes
Lorsque j’ai regardé la ligne 1233035 de mon fichier phpbb_mysql.sql - j’utilise une copie locale du dump de données - j’ai vu ceci :
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`),
ADD KEY `is_dynamic` (`is_dynamic`);
En regardant la colonne config_name dans la table phpbb_config, j’ai constaté qu’elle était définie sur VARCHAR(255).
Grâce à ce post sur Stackoverflow, j’ai découvert que je peux utiliser un “index de préfixe” pour réduire la longueur de la clé. Je l’ai testé, et ça marche.
Pour ma base de données phpBB 3.3.8, quatre tables ont été affectées :
- phpbb_config
- phpbb_config_text
- phpbb_migrations
- phpbb_oauth_accounts
Si d’autres personnes veulent essayer, voici les étapes pour la table phpbb_config, et j’inclurai les requêtes pour les autres tables à la fin.
Calculez la plus petite valeur pour l’index de préfixe en utilisant cette requête :
SELECT
ROUND(SUM(LENGTH(`config_name`)<10)*100/COUNT(`config_name`),2) AS pct_length_10,
ROUND(SUM(LENGTH(`config_name`)<20)*100/COUNT(`config_name`),2) AS pct_length_20,
ROUND(SUM(LENGTH(`config_name`)<50)*100/COUNT(`config_name`),2) AS pct_length_50,
ROUND(SUM(LENGTH(`config_name`)<100)*100/COUNT(`config_name`),2) AS pct_length_100
FROM `phpbb_config`;
Dans mon cas, il a montré que 100 % des lignes utilisaient moins de 50 caractères, j’ai donc modifié mon fichier de dump de données :
nano /var/discourse/shared/standalone/import/data/phpbb_mysql.sql
et j’ai utilisé la recherche Ctrl+W pour la chaîne suivante :
ALTER TABLE `phpbb_config`
puis j’ai changé ceci :
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`),
ADD KEY `is_dynamic` (`is_dynamic`);
en ceci :
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`(50)),
ADD KEY `is_dynamic` (`is_dynamic`);
Le (50) ici est la longueur de l’index de préfixe.
Dans mon cas, j’ai dû répéter le processus avec les trois autres tables en utilisant ces requêtes pour obtenir la longueur optimale de la clé de préfixe :
SELECT
ROUND(SUM(LENGTH(`config_name`)<10)*100/COUNT(`config_name`),2) AS pct_length_10,
ROUND(SUM(LENGTH(`config_name`)<20)*100/COUNT(`config_name`),2) AS pct_length_20,
ROUND(SUM(LENGTH(`config_name`)<50)*100/COUNT(`config_name`),2) AS pct_length_50,
ROUND(SUM(LENGTH(`config_name`)<100)*100/COUNT(`config_name`),2) AS pct_length_100
FROM `phpbb_config_text`;
SELECT
ROUND(SUM(LENGTH(`migration_name`)<10)*100/COUNT(`migration_name`),2) AS pct_length_10,
ROUND(SUM(LENGTH(`migration_name`)<20)*100/COUNT(`migration_name`),2) AS pct_length_20,
ROUND(SUM(LENGTH(`migration_name`)<50)*100/COUNT(`migration_name`),2) AS pct_length_50,
ROUND(SUM(LENGTH(`migration_name`)<100)*100/COUNT(`migration_name`),2) AS pct_length_100
FROM `phpbb_migrations`;
SELECT
ROUND(SUM(LENGTH(`provider`)<10)*100/COUNT(`provider`),2) AS pct_length_10,
ROUND(SUM(LENGTH(`provider`)<20)*100/COUNT(`provider`),2) AS pct_length_20,
ROUND(SUM(LENGTH(`provider`)<50)*100/COUNT(`provider`),2) AS pct_length_50,
ROUND(SUM(LENGTH(`provider`)<100)*100/COUNT(`provider`),2) AS pct_length_100
FROM `phpbb_oauth_accounts`;
Voici les chaînes de recherche pour les autres tables pour vous faire gagner du temps :
ALTER TABLE `phpbb_config_text`
ALTER TABLE `phpbb_migrations`
ALTER TABLE `phpbb_oauth_accounts`
Je ne dirai pas que je suis sorti d’affaire, mais ce qui précède a résolu mon erreur initiale de base de données, et l’importation est en cours :
#import_phpbb3.sh
The phpBB3 import is starting...
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
importing from phpBB 3.3.8
creating users
722 / 5014 ( 14.4%) [58 items/min]
Mise à jour :
Le script d’importation s’est terminé en 9 heures et 28 minutes. Dieu merci pour Screen. Ce script est génial !
Le post-traitement est maintenant en cours.
Existe-t-il un journal de la sortie du script d’importation quelque part, ou aurais-je dû le rediriger vers un fichier ?