NOTA: Meu problema foi devido a um erro de sintaxe no my.cnf
arquivo, não tem nada a ver com erros na conversão para utf8mb4
. Eu ainda não tenho nenhuma idéia de como você faz isso. Eu postei uma resposta explicando qual era o problema.
Fundo
Eu estava escrevendo algum código para acessar o INFORMATION_SCHEMA. Eu queria fazer uma fonte de dados MySql para que eu pudesse criar um conjunto de dados a partir dele e gerar o select/fill/etc. funcionalidade de um DataSet tipado.
Quando me conectei ao banco de dados sem um banco de dados funcionou bem, apenas atualizamos tudo para uft8mb4 do novo padrão utf8mb3, porque .NET não suporta esse conjunto de caracteres. Quando tentei me conectar ao INFORMATION_SCHEMA, tudo parecia bem, exceto quando tentei abrir as tabelas, recebi o erro .NET não suporta utfmb3.
Alterando character_set_system
Fui olhar as variáveis do servidor no Workbench e notei que tudo foi atualizado para utf8mb4, exceto o character_set_system. Eu tinha lido que você tem que ter cuidado ao atualizar isso, mas bem, eu adicionei e reiniciei character_set_system utfmb4
de my.cnf
uma só vez, e apenas um segundo depois percebi o que tinha feito.
Nesse ponto, recebo uma mensagem de erro me dizendo para executar systemctl status mysqld.service
e journalctl -xe
. Eu cortei o que parecia ser as partes relevantes desses logs (os nomes de domínio foram alterados para proteger os culpados):
journalctl -xe
Jun 06 10:19:21 servername.tld polkitd[640]: Registered Authentication Agent for unix-process:32382:26043948 (system bus name :1.186 [/usr/bin/pkttyagent --notify-fd 5 --fallback]
Jun 06 10:19:21 servername.tld systemd[1]: Starting MySQL Server...
-- Subject: Unit mysqld.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysqld.service has begun starting up.
Jun 06 10:19:31 servername.tld systemd[1]: mysqld.service: main process exited, code=exited, status=1/FAILURE
Jun 06 10:19:31 servername.tld systemd[1]: Failed to start MySQL Server.
-- Subject: Unit mysqld.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysqld.service has failed.
--
-- The result is failed.
Jun 06 10:19:31 servername.tld systemd[1]: Unit mysqld.service entered failed state.
Jun 06 10:19:31 servername.tld systemd[1]: mysqld.service failed.
Jun 06 10:19:31 servername.tld polkitd[640]: Unregistered Authentication Agent for unix-process:32382:26043948 (system bus name :1.186, object path /org/freedesktop/PolicyKit1/Aut
systemctl status mysqld.service
Jun 06 10:19:31 ● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2022-06-06 10:19:31 EDT; 7min ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 32415 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 32388 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 32415 (code=exited, status=1/FAILURE)
Status: "Server startup in progress"
Jun 06 10:19:21 servername.tld systemd[1]: Starting MySQL Server...
Jun 06 10:19:31 servername.tld systemd[1]: mysqld.service: main process exited, code=exited, status=1/FAILURE
Jun 06 10:19:31 servername.tld systemd[1]: Failed to start MySQL Server.
Jun 06 10:19:31 servername.tld systemd[1]: Unit mysqld.service entered failed state.
Jun 06 10:19:31 servername.tld systemd[1]: mysqld.service failed. systemd[1]: mysqld.service failed.
Nesse ponto eu percebi que realmente quebrei as coisas, porque eu tinha visto pessoas alertando para não mudar essas coisas sem saber o que você estava fazendo. O que, claramente, eu não fiz.
Voltei para my.cnf e mudei a configuração para character_set_system utf8mb3
eu diria 'mudou de volta', mas não o fiz, já que não era assim para começar. Acabei de adicionar a configuração.
Ao reiniciar, recebi a mesma mensagem sobre verificar os erros, os erros são praticamente idênticos, então tentar configurá-lo para mb3 não fez diferença.
De qualquer forma, eu pesquisei dba/serverfault/stackoverflow/google para saber como consertar isso, e vi muitas pessoas alertando para não fazer isso, mas, pelo menos, não consegui encontrar alguém que realmente tenha sido imprudente o suficiente para faça isso.
Talvez possamos fazer backup dos dados em algum lugar e depois restaurar um backup da semana passada e, em seguida, colocar os dados de volta, na pior das hipóteses? Só não estou familiarizado o suficiente com o back-end para saber que horrores fiz aos dados.
Isso foi apenas eu sendo descuidado com a formatação. Eu tinha um espaço em vez de um igual na
character_set_system
atribuição de variável. Então, felizmente, eu nunca toquei no banco de dados do sistema, e tirar a linha corrigiu o erro de sintaxe, então funciona novamente.Eu ainda estaria interessado em saber se há uma maneira de obter mais informações desses erros. Os erros basicamente diziam que as coisas falhavam; se eu tivesse visto que era um erro ao analisar my.cnf ou similar, eu provavelmente o teria percebido imediatamente. Mas, se mais alguém se encontrar nesta circunstância, certifique-se de que todas as alterações feitas são realmente sintaticamente válidas,
TL;DR: já que você não está recebendo erros detalhados, verifique qualquer coisa que você alterou com muito cuidado para erros de sintaxe (ou descubra como obter os detalhes, o que eu provavelmente teria tentado fazer se não fosse um servidor de produção); e, obviamente, a solução real é não tentar alterar as configurações do sistema se você não tiver certeza do que está fazendo.
Não faça alterações nos bancos de dados
mysql
ouinformation_schema
.Em seus bancos de dados, quais sintomas você tem? Havia mais alguma coisa de interesse nos arquivos de log? Como você fez a conversão - foi
ALTER...CONVERT TO...
ou algum outro método? Onde há colunas não utf8 que foram convertidas acidentalmente?Modificar não
character_set_system
é como você altera o charset.(Parece que você fez mais do que alterar essa configuração?)