Variáveis MySQL “my.cnf” não atualizadas após a execução do Ansible

1

Estou criando uma cartilha Ansible simples para o meu projeto onde estou instalando o MySQL em uma VM Ubuntu.

Como parte dessa configuração, estou criando um arquivo my.cnf personalizado em /etc/my.cnf e é assim depois que o modelo jinja2 é analisado.

[client]
port   = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket           = /var/run/mysqld/mysqld.sock
log_error        = /var/log/mysql/mysql_error.log
pid-file         = /var/run/mysqld/mysqld.pid
general_log      = on
general_log_file = /var/log/mysql/mysql.log

[mysqld]
bind-address     = 127.0.0.1
datadir          = /var/lib/mysql
pid-file         = /var/run/mysqld/mysqld.pid
log_error        = /var/log/mysql/mysql_error.log
general_log      = on
general_log_file = /var/log/mysql/mysql.log
socket           = /var/run/mysqld/mysqld.sock
user             = root
port             = 3306

# Disabling Symlinks is recommended for security purposes #
symbolic-links=0

Em seguida, desde que eu estou executando o Ubuntu eu chamo

service: name=mysql state=started enabled=yes

E tudo parece correto, mas quando eu verifico minhas variáveis usando

mysqld --verbose --help i descobre que as variáveis estão erradas, por exemplo, diz general-log é falso e symbolic-links é VERDADEIRO mesmo que eu o configure como 0 neste arquivo cnf, mesmo se eu executar mysql show variables

Então, verifiquei se o arquivo existe e está em etc/my.cnf e se está carregado como mysql --verbose --help reports

Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

Pode ser um problema de permissões de usuário? Eu acredito que este arquivo my.cnf pertence ao usuário root , isso pode ser a causa do problema.

O que eu realmente preciso é de alguma ajuda para depurar o que pode estar errado, já que sou relativamente novo nesse tipo de configuração de baixo nível do MySQL.

Obrigado antecipadamente

    
por JonnySerra 28.12.2017 / 17:40

2 respostas

0

Você está no Ubuntu, que inicia automaticamente os serviços após a instalação. Assim, no momento em que você solicita que ele seja ativado e iniciado, ele já foi ativado e iniciado. E, claro, se você executar o playbook novamente enquanto estiver em execução, ele já será iniciado ...

O que você precisa fazer é configurar um gerenciador que irá reiniciar o serviço. Por exemplo:

$ cat roles/mysql/handlers/main.yml
---
- name: restart mysql
  service: name=mysql state=restarted

Em seguida, certifique-se de notify: restart mysql em qualquer tarefa que altere a configuração.

    
por 28.12.2017 / 18:45
0

Eu consegui fazer funcionar, aparentemente, pode estar relacionado com a ordem em que esses arquivos são executados.

Eu estava assumindo que

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

Isso significa que /etc/my.cnf tem prioridade sobre os outros, quando, na verdade, parece ser o contrário, neste caso, parece que ~/.my.cnf teria a maior prioridade caso existisse.

Faz sentido, considerando que etc/my.cnf é o arquivo mais geral e menos específico.

Então, o que eu fiz foi substituir o arquivo my.cnf do estoque em /etc/mysql/my.cnf pela minha própria versão. Eu não aconselho os outros a fazer o mesmo que eu acredito que você deve manter o padrão e simplesmente adicionar seu my.cnf ao /usr/etc/my.cnf , no meu caso é só para uma VM do Vagrant e é por isso que eu não me preocupo com isso muito

Eu acredito que este pode ser o problema se você acredita que eu estou errado, por favor corrija-me.

Um grande obrigado a @Michael Hampton por sua ajuda

EDITAR

Eu posso realmente estar errado, eu tentei o método /usr/etc/my.cnf e ele não funcionou, o que é um pouco estranho, eu não entendi a lógica por trás das my.cnf prioridades ou como você está supostamente para substituí-lo sem tocar o estoque que vem com a sua instalação.

Em um piscar de olhos eu posso apenas reescrever a ação que eu acho, e você poderia forçar mysqld a usar um arquivo my.cnf específico através do argumento --defaults-file , mas eu ainda gostaria de entender o que é acontecendo, por isso, se alguém souber por favor, adicione seus pensamentos.

Obrigado

    
por 28.12.2017 / 18:54

Tags