Tentei restaurar um antigo backup bruto de bancos de dados (datadir inteiro) no MariaDB 10.11.5, mas ele não inicializou. Depois disso, encontrei as seguintes linhas no log:
[ERROR] InnoDB: File ./ib_logfile0 was not found
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[Note] InnoDB: Starting shutdown...
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[Note] Plugin 'FEEDBACK' is disabled.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
Por mais de uma década, tenho excluído arquivos de log em servidores MySQL e MariaDB para ajustar innodb-log-file-size
ou fazer backups brutos e economizar espaço. Na próxima vez que o servidor foi reiniciado, eles foram recriados automaticamente. Mas de repente, não desta vez. E tudo porque a partir da versão MariaDB 10.8.1, a presença de um ib_logfile0
tornou-se obrigatória devido a múltiplas alterações ( MDEV-27199 ) e ( MDEV-14425 ). Não é mais criado automaticamente, mas estritamente necessário.
Tentei criar um arquivo de log vazio, mas aparentemente não funcionou e resultou em um erro:
[ERROR] InnoDB: ib_logfile0 is empty, and LSN is unknown.
[ERROR] InnoDB: Plugin initialization aborted with error Data structure corruption
Depois de estudar as tarefas do jira, tive a forte sensação de que não havia como "regenerar" o arquivo de log como antes. Então, minha pergunta principal é: existe alguma outra saída além de restaurar backups em uma versão mais antiga do MariaDB e fazer backup deles corretamente para versões mais recentes?
E quanto à criação desses backups "brutos" nas versões mais recentes? Eu li que em vez de excluir o log, agora você deve reduzir o tamanho do log para economizar espaço em disco. Provavelmente, agora é a única maneira?
PS É importante notar que a partir da versão 10.8.1 o tamanho do arquivo de log muda automaticamente quando você o altera na configuração. E a partir da versão 10.9.0 - mesmo em tempo de execução ( MDEV-27812 ).
TLDR; Você pode ter perdido dados ao excluir arquivos
ib_logofile*
. Não os exclua sem que apareçam na documentação oficial da versão que está sendo usada e siga isso ao pé da letra.A razão pela qual
ib_logfile*
os arquivos existem não é porque o MariaDB queria desperdiçar seu espaço, mas porque eles eram necessários para manter seus dados. É por isso que começar com oib_logfile0
foi tornado obrigatório, para capturar usuários realizando práticas perigosas.Sem esse redo log, os dados gravados, mas não liberados, seriam perdidos e, potencialmente, seus backups perderiam dados alterados recentemente por causa disso. Essa liberação é o que
mariadb-backup --prepare
(também obrigatório) faz para garantir que os dados possam ser restaurados (não tenho certeza se isso pode ser usado na cópia bruta, mas isso exigiria seus arquivos excluídos).Suas opções agora começam potencialmente sem dados são:
podman run -v /place/of/datadir:/var/lib/mysql:Z mariadb:10.7
).Dependendo da versão do MariaDB de onde veio o seu backup, há limites para a versão anterior do MariaDB que pode começar com esses dados. Veja as notas da página KB sobre downgrade .