História ( a pergunta é em 2020 abaixo )
2018 . Após a nova instalação do 18.04, há dois anos, eu queria usar minha /etc/mysql/my.cnf
configuração do 16.04 para fazer as coisas voltarem ao que eram. Mas a instalação do MySQL define dois links simbólicos
/etc/mysql/my.cnf -> /etc/alternatives/my.cnf
/etc/alternatives/my.cnf -> /etc/mysql/mysql.cnf
assim, substituí o novo /etc/mysql/mysql.cnf
pelo meu antigo 16.04 /etc/mysql/my.cnf
.
As coisas correram bem até outra atualização do MySQL, que, por alguns motivos, foi mysql.cnf
substituída pela nova. Incomodar? Eu aceitei a substituição? Acho que não, mas, bem, isso é sempre possível.
Então o que eu fiz na época foi contornar o sistema de alternativas, ou seja, substituir o /etc/mysql/my.cnf
link pelo meu my.cnf
arquivo, e zerar mysql.cnf
. Já que my.cnf
tem precedência sobre mysql.cnf
isso funcionou (acho que tentei fazer um link simbólico mysql.cnf
para o meu my.cnf
arquivo e houve outros problemas, não me lembro).
( Para ser honesto, não gostei muito da implementação de alternativas que encontrei, complicada e contra-intuitiva )
2020 . Fiz um upgrade de 18.04 para 20.04. E, naturalmente, o MySQL recriou um ambiente limpo com os links alternativos. Bom.
No entanto, para concluir a atualização, desta vez gostaria de manter as coisas limpas e, tanto quanto possível,
- continue usando o sistema de alternativas ou não (dependendo do seu conselho)
- garantir que uma atualização adicional do MySQL (a menos que seja v. 9) não substitua minha configuração (ou pergunte)
Qual é a maneira recomendada de manter uma instalação limpa do MySQL?
Tendo trabalhado com o MySQL desde os dias de 3. algo , descobri que o melhor lugar para definir as variáveis de ambiente é em um
.cnf
arquivo separado. Com versões modernas do banco de dados (tudo do 5.3 para cima), eles podem ser gravados no/etc/mysql/mysql.conf.d/
diretório. Isso me permite ter uma estrutura de diretórios como:Os arquivos de configuração são lidos em ordem alfabética, o que explica o
z-
prefixo feio, e o propósito dos arquivos é bastante autoexplicativo:application.cnf
innodb.cnf
replication.cnf
Isso me permite ter vários
.cnf
arquivos de modelo com o básico pré-preenchido e pronto para ser usado/personalizado para uma nova instalação do MySQL.Um pouco de fundo sobre o raciocínio por trás dessa prática ...
O MySQL lê os arquivos de configuração em uma ordem muito particular, dependendo da plataforma em que está instalado. Você pode pedir ao MySQL o nome e a ordem dos arquivos de configuração com:
Isso vai cuspir (para mim) mais de 3.000 linhas, mas, perto do topo, você verá isso:
Para mim, não há
/etc/my.cnf
arquivo. Há, no entanto, um/etc/mysql/my.cnf
arquivo. Nesse arquivo há apenas duas linhas que importam:Com isso, o MySQL irá procurar todos os
.cnf
arquivos em/etc/mysql/conf.d/
, depois todos os arquivos em/etc/mysql/mysql.conf.d/
, lendo-os no motor em ordem alfabética. Prefiro ter minhas variáveis carregadas depois que todos os arquivos padrão do MySQL são lidos porque reduz a chance de ter meus valores substituídos por um padrão. Então, porque/etc/mysql/mysql.conf.d/
vem depois/etc/mysql/conf.d/
, meus arquivos vão para lá.Eles nunca foram substituídos ou modificados durante uma atualização.
Espero que isso lhe dê algo para explorar.
O sistema de alternativas não é específico do MySQL; é um sistema geral que é usado no Debian e no Ubuntu em uma ampla variedade de pacotes. Sugiro que você aprenda como funciona e como se integrar a ele. Ele foi projetado para dar aos usuários controle total - para que eles possam substituir completamente a embalagem, se desejarem, ou integrar-se a ela, se desejarem os benefícios que a embalagem oferece.
Consulte a página de manual update-alternatives(1) para obter detalhes.
Se você tiver um específico
my.cnf
que deseja usar, não importa o quê, poderá adicioná-lo em algum lugar e usáupdate-alternatives
-lo para selecioná-lo com uma prioridade mais alta do que qualquer coisa fornecida pela embalagem. Então ele se integrará e nunca será substituído.No entanto, se você fizer isso, entenda que
my.cnf
é provável que você falhe ao atualizar o Ubuntu no futuro, pois as diretivas de configuração disponíveis mudam com as principais versões do MySQL. Você precisará manter seu própriomy.cnf
atualizado à medida que o MySQL muda.Se, em vez disso, você quiser que o empacotamento ajude, faça o que @Matigo sugere em sua resposta e adicione apenas substituições usando os
.d
diretórios. Sempre que possível, providenciamos o empacotamento para adaptar automaticamente a configuração para evitar a quebra do MySQL durante as atualizações de lançamento. No entanto, geralmente fazemos isso apenas para pacotes de arquivos enviados, não para arquivos que você mesmo adicionou.Em última análise, embora seja perfeitamente razoável diferir dos padrões de configuração de empacotamento, é necessário esperar ter que ajustar a configuração quando você atualiza entre versões do Ubuntu, já que as expectativas do MySQL sobre a configuração mudam entre as principais versões do MySQL.