De acuerdo, no pude dejar esto así.
Si bien supongo que es posible que el error que obtuve pueda ser manejado por el script de importación, realmente me parece que es un problema con la estructura de la base de datos de phpBB3 y el hecho de que mi intercalación de base de datos sea UTF8. Obtuve este error al ejecutar el script de importación:
ERROR 1071 (42000) at line 1233035: Specified key was too long; max key length is 1000 bytes
Cuando miré la línea 1233035 de mi archivo phpbb_mysql.sql, estoy usando una copia local del volcado de datos, vi esto:
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`),
ADD KEY `is_dynamic` (`is_dynamic`);
Al observar la columna config_name en la tabla phpbb_config, descubrí que está configurada como VARCHAR(255).
Gracias a esta publicación en Stackoverflow, descubrí que puedo usar un “índice de prefijo” para acortar la longitud de la clave. Lo probé y funciona.
Para mi base de datos phpBB 3.3.8, en realidad se vieron afectadas cuatro tablas:
- phpbb_config
- phpbb_config_text
- phpbb_migrations
- phpbb_oauth_accounts
Si alguien más quiere intentarlo, aquí están los pasos para la tabla phpbb_config, y al final incluiré las consultas para las otras tablas.
Calcula el valor más corto para el índice de prefijo usando esta consulta:
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`;
En mi caso, mostró que el 100% de las filas usaban menos de 50 caracteres, así que edité mi archivo de volcado de datos:
nano /var/discourse/shared/standalone/import/data/phpbb_mysql.sql
y usé la búsqueda Ctrl+W para la siguiente cadena:
ALTER TABLE `phpbb_config`
luego cambié esto:
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`),
ADD KEY `is_dynamic` (`is_dynamic`);
a esto:
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`(50)),
ADD KEY `is_dynamic` (`is_dynamic`);
El (50) que está ahí es la longitud del índice de prefijo.
En mi caso, tuve que repetir el proceso con las otras tres tablas usando estas consultas para obtener la longitud óptima de la clave de prefijo:
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`;
Aquí están las cadenas de búsqueda para las otras tablas para ahorrarte algo de tiempo:
ALTER TABLE `phpbb_config_text`
ALTER TABLE `phpbb_migrations`
ALTER TABLE `phpbb_oauth_accounts`
No diré que estoy fuera de peligro, pero lo anterior resolvió mi error inicial de base de datos y la importación se está ejecutando:
#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]
Actualización:
La importación del script finalizó en 9 horas y 28 minutos. Menos mal que tenía Screen. ¡Este script es increíble!
El post-procesamiento está en curso.
¿Hay algún registro de la salida del script de importación en algún lugar, o debería haberlo redirigido a un archivo?