Ao atualizar de 2.7.0 para 2.7.1, começamos a ver este erro do módulo mysql_user
unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")
A tarefa é a seguinte:
# Write password to root home as readable only by root so future mysql
# operations can function.
- name: Write root login credentials
copy:
dest: /root/.my.cnf
owner: root
group: root
mode: 0600
content: |
# {{ ansible_note }}
[client]
user=root
password={{ db_root_password }}
# By default the root user has no password. Set one.
- name: Set root user password
mysql_user:
host: "{{ item }}"
name: root
password: "{{ db_root_password }}"
# Login without credentials
check_implicit_admin: yes
state: present
with_items:
- localhost
- "{{ ansible_hostname }}"
- 127.0.0.1
- ::1
O último falha.
O Ansible 2.7.0 funciona bem.
mysql_user
`` `cole abaixo
ansible 2.7.1
arquivo de configuração = Nenhum
caminho de pesquisa do módulo configurado = ['/Users/esamatti/.ansible/plugins/modules', '/ usr / share / ansible / plugins / modules']
ansible python module location = /usr/local/lib/python3.7/site-packages/ansible
localização do executável = / usr / local / bin / ansible
versão do python = 3.7.0 (padrão, 2 de outubro de 2018, 09:18:58) [Clang 10.0.0 (clang-1000.11.45.2)]
##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
ANSIBLE_PIPELINING(/Users/epeli/code/playbooks/ansible.cfg) = True
ANSIBLE_SSH_ARGS(/Users/epeli/code/playbooks/ansible.cfg) = -o ForwardAgent=yes
DEFAULT_FORKS(/Users/epeli/code/playbooks/ansible.cfg) = 100
DEFAULT_HOST_LIST(/Users/epeli/code/playbooks/ansible.cfg) = ['/Users/epeli/code/playbooks/tools/dynamic-inventory']
DEFAULT_REMOTE_USER(/Users/epeli/code/playbooks/ansible.cfg) = root
DEFAULT_SUDO_FLAGS(/Users/epeli/code/playbooks/ansible.cfg) = -HE
DEFAULT_VAULT_PASSWORD_FILE(env: ANSIBLE_VAULT_PASSWORD_FILE) = /Users/epeli/.ansible-vault-password
macOS Mojave versão 10.14 (18A391)
E servidor Ubuntu 18.04
Veja RESUMO
paste below
TASK [mariadb : Set root user password] ********************************************************************************************************************************************************************************
failed: [1.2.3.4] (item=localhost) => {"changed": false, "item": "localhost", "msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"}
failed: [1.2.3.4] (item=customer) => {"changed": false, "item": "customer", "msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"}
failed: [1.2.3.4] (item=127.0.0.1) => {"changed": false, "item": "127.0.0.1", "msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"}
failed: [1.2.3.4] (item=::1) => {"changed": false, "item": "::1", "msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"}
Olá @epeli , obrigado por enviar este problema!
Arquivos identificados na descrição:
Se esses arquivos estiverem imprecisos, atualize a seção component name
da descrição ou use o comando !component
bot.
@epeli Olá, https://github.com/ansible/ansible/pull/47809 corrige isso para você, poderia adicionar comentários sobre o PR
@timorunge Veja, adicionar diferentes usuários do mysql era possível sem este patch ...
Sim, meu problema não está relacionado a este PR, mas sim ao # 47736, então continuo falando lá. E não posso fornecer Dockerfile, desculpe.
Você já tentou o mesmo em uma ordem diferente? Significando basicamente: Primeiro logando sem senha, definindo a senha de root e depois gerando o .my.cnf?
Qual conector de banco de dados python você está usando atualmente? MySQLdb ou PyMySQL?
cc @Jmainguy
clique aqui para obter ajuda do bot
Olá a todos,
É possível que eu esteja tendo o mesmo problema com o Ansible 2.7.5? com mysql_db
ansible 2.7.5
config file = None
configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609]
Corrida:
`` `- nome: install_gerrit | criando MySQL DB (se usado)
mysql_db:
nome: "{{item.db}}"
codificação: latin1
estado: presente
with_items: '{{gerrit_db_info}}'
quando: item.type é definido e item.type == "mysql"
Error:
falhou: [192.168.202.15] {
"alterado": falso,
"invocação": {
"module_args": {
"agrupamento": "",
"config_file": "/root/.my.cnf",
"connect_timeout": 30,
"encoding": "latin1",
"ignore_tables": [],
"login_host": "localhost",
"login_password": null,
"login_port": 3306,
"login_unix_socket": null,
"login_user": nulo,
"nome": "reviewdb",
"rápido": verdadeiro,
"single_transaction": falso,
"ssl_ca": null,
"ssl_cert": null,
"ssl_key": null,
"estado": "presente",
"target": null
}
},
"item": {
"db": "reviewdb",
"host": "localhost",
"pass": "xxxxxx",
"tipo": "mysql",
"usuário": "gerrit"
},
"msg": "não foi possível conectar ao banco de dados, verifique se login_user e login_password estão corretos ou /root/.my.cnf tem as credenciais. Mensagem de exceção: (1698, u \" Acesso negado para o usuário 'root' @ 'localhost' \ ")"
}
`` `
Parece o mesmo problema com mysql_db - voltar para o ansible v2.7.0 resolveu o problema.
Eu não sei onde era, mas algum tempo (semanas? Meses?) Atrás eu pesquisei um problema semelhante, e o motivo era que MySQLdb (que é baseado em libmysql) estava usando soquetes Unix para conectar por padrão, enquanto PyMySQL estava se conectando via TCP a localhost
por padrão. Dependendo de como o acesso root ao servidor MySQL está configurado, isso pode ajudá-lo a contornar esse problema.
Como eu disse, eu realmente não me lembro onde escrevi isso antes, e não tenho mais certeza sobre os detalhes, mas talvez isso dê a um de vocês que está tendo este problema uma dica de como resolvê-lo :)
Ok, eu encontrei. Foi uma discussão em # ansible-devel em 2 de outubro, e o usuário que teve um problema de conexão (ele inicialmente suspeitou que o problema era o manuseio de uma senha de string vazia) finalmente descobriu que precisava usar login_unix_socket
(por causa do comportamento diferente que mencionei acima), com isso funcionou para ele. Infelizmente, ele não criou um problema para isso.
De qualquer forma, @epeli @anniemelen @ bchanan03 , pode experimentar a opção login_unix_socket
e ver se isso resolve o problema para você?
Olá,
Eu tenho o mesmo problema com Centos7, ansible 2.7.6.
especificando socket=/var/lib/mysql/mysql.sock
em ~/.my.cnf
ou a opção login_unix_socket: /var/lib/mysql/mysql.sock
na tarefa mysql_db
está corrigindo o erro de conexão.
cc @Xyon @bmalynovytch @dagwieers @michaelcoburn @oneiroi @tolland
clique aqui para obter ajuda do bot
cc @bmildren
clique aqui para obter ajuda do bot
Desculpe até agora, acho que esse bug ainda não foi resolvido.
@nizarakbarm , você tentou o que eu sugeri e @efflamlemaillet tentou e verificou? Seria bom se você pudesse tentar isso e confirmar se funciona (ou não!) Aqui.
Olá @felixfontein , no Ubuntu 18.04 a solução fornecida por
Eu acho o seguinte:
https://stackoverflow.com/questions/41846000/mariadb-password-and-unix-socket-authentication-for-root
também está relacionado.
Oi,
como disse @pouyana , de alguma forma o módulo ansible mysql usando conexão de soquete por padrão no servidor local antes agora está usando tcp.
@felixfontein Funciona, mas não gosto de usar ~ / .my.cnf
@nizarakbarm login_unix_socket: /var/lib/mysql/mysql.sock
é algo a ser especificado no Ansible. Você já tentou isso?
@efflamlemaillet para ser mais preciso, não é o módulo Ansible em si, mas a biblioteca de conexão MySQL do Python que ele usa. A antiga biblioteca, MySQLdb (que é baseada em libmysql), prefere soquetes Unix, enquanto a nova biblioteca, PyMySQL, prefere uma conexão TCP. Se você for explícito em seu manual / função e especificar como se conectar, não importa; mas se você não fizer isso, depende de qual biblioteca o módulo está usando. O módulo tenta o PyMySQL primeiro e retorna ao MySQLdb se o PyMySQL não estiver disponível.
Ok, obrigado pela sua resposta. @felixfontein Com sua resposta, pode me ajudar a entender o motivo do problema.
A questão é saber se deve ser considerado um bug?
Nesse caso, talvez o módulo Ansible possa substituir o comportamento padrão do PyMySQL para garantir que o módulo se conecte da mesma maneira (se não houver uma opção de conexão especificada) quando o driver instalado for MySQLdb ou PyMySQL.
cc @ Alexander198961
clique aqui para obter ajuda do bot
cc @ Andersson007
clique aqui para obter ajuda do bot
cc @kurtdavis
clique aqui para obter ajuda do bot
No meu caso, essa solução alternativa também ajudou
login_unix_socket: /var/run/mysqld/mysqld.sock
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/eldar/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.15+ (default, Nov 27 2018, 23:36:35) [GCC 7.3.0]
- name: Create database
mysql_db:
name: dbname
state: present
login_unix_socket: /var/run/mysqld/mysqld.sock
cc @tomaszkiewicz
clique aqui para obter ajuda do bot
Obrigado @felixfontein por apontar isso!
Especificar o parâmetro login_unix_socket: /var/run/mysqld/mysqld.sock
resolveu o problema!
Tive que atualizar todas as tarefas do módulo mysql_{user,db}
nos arquivos tasks/databases.yml
, tasks/secure-installation.yml
e tasks/users.yml
embora
eu expliquei isso no documento https://github.com/ansible/ansible/pull/66848
está vindo com 2,10
close_me
Comentários muito úteis
Ok, eu encontrei. Foi uma discussão em # ansible-devel em 2 de outubro, e o usuário que teve um problema de conexão (ele inicialmente suspeitou que o problema era o manuseio de uma senha de string vazia) finalmente descobriu que precisava usar
login_unix_socket
(por causa do comportamento diferente que mencionei acima), com isso funcionou para ele. Infelizmente, ele não criou um problema para isso.De qualquer forma, @epeli @anniemelen @ bchanan03 , pode experimentar a opção
login_unix_socket
e ver se isso resolve o problema para você?