Ok, então eu não consegui deixar isso de lado.
Embora eu suponha que seja possível que o erro que recebi possa ser tratado pelo script de importação, parece-me que é um problema com a estrutura do banco de dados do phpBB3, e o fato de que a colação do meu banco de dados é UTF8. Recebi este erro executando o script de importação:
ERROR 1071 (42000) at line 1233035: Specified key was too long; max key length is 1000 bytes
Quando olhei para a linha 1233035 do meu arquivo phpbb_mysql.sql - estou usando uma cópia local do dump de dados - vi isto:
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`),
ADD KEY `is_dynamic` (`is_dynamic`);
Olhando para a coluna config_name na tabela phpbb_config, descobri que ela está definida como VARCHAR(255).
Graças a esta postagem no Stackoverflow, descobri que posso usar um “índice de prefixo” para encurtar o comprimento da chave. Eu testei e funcionou.
Para o meu banco de dados phpBB 3.3.8, na verdade quatro tabelas foram afetadas:
- phpbb_config
- phpbb_config_text
- phpbb_migrations
- phpbb_oauth_accounts
Se mais alguém quiser tentar, aqui estão os passos para a tabela phpbb_config, e incluirei as consultas para as outras tabelas no final.
Calcule o menor valor para o índice de prefixo 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`;
No meu caso, mostrou que 100% das linhas usavam menos de 50 caracteres, então editei meu arquivo de dump de dados:
nano /var/discourse/shared/standalone/import/data/phpbb_mysql.sql
e usei a busca Ctrl+W para a seguinte string:
ALTER TABLE `phpbb_config`
então mudei isto:
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`),
ADD KEY `is_dynamic` (`is_dynamic`);
para isto:
ALTER TABLE `phpbb_config`
ADD PRIMARY KEY (`config_name`(50)),
ADD KEY `is_dynamic` (`is_dynamic`);
O (50) aí é o comprimento do índice de prefixo.
No meu caso, tive que repetir o processo com as outras três tabelas usando estas consultas para obter o comprimento ideal da chave de prefixo:
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`;
Aqui estão as strings de busca para as outras tabelas para economizar seu tempo:
ALTER TABLE `phpbb_config_text`
ALTER TABLE `phpbb_migrations`
ALTER TABLE `phpbb_oauth_accounts`
Não vou dizer que estou livre de problemas, mas o acima resolveu meu erro inicial de banco de dados, e a importação está em andamento:
#import_phpbb3.sh
O início da importação do phpBB3...
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
importando de phpBB 3.3.8
criando usuários
722 / 5014 ( 14.4%) [58 itens/min]
Atualização:
A importação do script terminou em 9 horas e 28 minutos. Graças ao Screen. Este script é incrível!
O pós-processamento está em andamento.
Existe um log da saída do script de importação em algum lugar, ou eu deveria ter redirecionado para um arquivo?