Algumas vezes já me ocorreu do serviço do MySql no Xampp deixar de iniciar com sucesso e retornar um erro "MySQL shutdown unexpectedly".
Depois de muito pesquisar e testar diferentes abordagens para corrigir o problema, e depois de trocar figurinhas com diferentes profissionais da área, eu cheguei à conclusão de que esse problema não tem solução. Mas calma, que existem formas de corrigir a situação, porém não o problema.
Confuso né? Vou explicar melhor sobre...
A tela deste erro no qual descrevo é a seguinte:
Essa infelicidade já me ocorreu mais de uma vez, e perdi umas boas horas de pesquisas e testes de resolução, porém, como já comentei anteriormente, sem solução.
Depois de muito investigar, e muito conversar com outros profissionais (inclusive discutir em grupos na web a respeito), me ocorreu a necessidade de fazer a fusão de duas unidades lógicas de disco rígido para retornar ao estado inicial do HD, tendo uma única unidade de disco lógica. Eu havia feito uma partição adicional do meu HD principal, para obter duas unidades de disco, e eu precisava retornar para uma unidade só.
Se estou soando um pouco grego, pesquise sobre particionamento de unidades de disco, que talvez dê uma clareada. Esse processo consiste em criar uma unidade de disco nova, a partir de um HD físico existe, escolhendo qual tamanho essa partição terá. Isso é útil quando você precisa de um HD secundário para guardar BKPs, porém não tem dois HDs físicos na máquina.
Eu precisava encontrar um bom sistema para fazer a fusão lógica das duas unidades de disco sem precisar formatar a máquina, pois eu não tinha tempo hábil para reinstalar o Sistema Operacional e reconstruir meus ambientes de desenvolvimento.
Eis que quando finalmente eu consigo encontrar um bom sistema e fazer funcionar, quando o Windows iniciou novamente após a fusão das unidades de disco, ao iniciar o Xampp eu "obtive" a tela de erro que apresentei logo acima.
A diferença dessa vez que esse mesmo erro me assolou o ambiente de desenvolvimento, é que eu me lembrei de uma conversa que tive com um amigo, também desenvolvedor FullStack de longa data.
Basicamente, o que esse amigo dizia era que o MySql era um sistema de banco de dados muito seguro, pois ele tinha uma feature, (se não me falha a memória, algo do InnoDB) que vincula fortemente o conteúdo do banco de dados à estrutura física da unidade de disco na qual ele está instalado, de forma que ele fique intimamente amarrado, prevenindo por exemplo, que alguém consiga acesso aos dados do banco e execute-o em outro ambiente sem que tenha um BKP devidamente obtido.
E nesta hora eu tive um momento Eureca! Explico...
Quando efetuei a fusão das duas unidades lógicas da minha unidade de disco para voltar ao estado original, a estrutura lógica do disco rígido teoricamente mudou, e o MySql, por motivos de segurança, estava se negando a executar o banco, pois o banco não estava mais sendo executado no "ambiente físico/lógico" original.
Basicamente o feitiço virou contra o feiticeiro.
Isso deixou claro a razão da qual nada que eu encontrei de informação nos fóruns, me ajudou a corrigir a instância do meu MySql. Nada ia corrigir mesmo, porque o sistema estava "achando" que aquele era um banco roubado.
Por isso eu disse no início deste artigo que existiam formas de corrigir a situação, porém não o problema.
Para corrigir a situação, basta esquecer esse ambiente, e reinstalar um novo ambiente. Para isso basta fazer um BKP de todo o conteúdo da pasta do Xampp do sistema operacional, e reinstalar o próprio Xampp.
No meu Sistema Operacional (Windows), eu instalei o Xampp na raiz do C: ("C:\xampp").
Uma vez o Xampp reinstalado, precisamos substituir a pasta "data" atual do MySql ("C:\xampp\mysql\data" no meu Sistema Operacional), pela mesma pasta do BKP do Xampp de antes da reinstalação.
Antes de fazer essa substituição da pasta "data", só por segurança, faça um BKP dessa pasta, para que caso tudo dê errado, você consiga retornar com a pasta original da instalação e ter seu ambiente MySql ainda funcionando corretamente.
Uma vez tudo feito, reinicie a máquina para ter certeza que tudo será devidamente resetado. Inicie o Xampp novamente, dando start no módulo do MySql.
Voilá! Agora o banco está funcionando, com as mesmas bases do banco anterior!
Este mesmo procedimento pode ser feito par restaurar um BKP já existente te uma instância antiga do MySql. Isso é útil principalmente quando não se tem um dump da base para fazer a importação no novo MySql.
Se você está passando pelo mesmo problema, talvez este artigo te ajude a entender sobre uma possível causa para seu problema, e também obter uma solução razoavelmente prática.