Ansible: mysql_user rusak di 2.7.1 saat menggunakan /root/.my.cnf

Dibuat pada 29 Okt 2018  ·  29Komentar  ·  Sumber: ansible/ansible



RINGKASAN

Ketika memutakhirkan dari 2.7.0 ke 2.7.1 kami mulai melihat kesalahan ini dari mysql_user modul

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'\")

Tugasnya adalah sebagai berikut:

# 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

Yang terakhir gagal.

Mungkin 2.7.0 berfungsi dengan baik.

JENIS MASALAH
  • Laporan Bug
NAMA KOMPONEN

mysql_user

VERSI ANSIBLE


`` tempel di bawah
mungkin 2.7.1
file config = Tidak Ada
jalur pencarian modul yang dikonfigurasi = ['/Users/esamatti/.ansible/plugins/modules', '/ usr / share / ansible / plugins / modules']
lokasi modul python yang mungkin = /usr/local/lib/python3.7/site-packages/ansible
lokasi yang dapat dieksekusi = / usr / local / bin / ansible
versi python = 3.7.0 (default, 2 Okt 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
OS / LINGKUNGAN

macOS Mojave versi 10.14 (18A391)

Dan server Ubuntu 18.04

LANGKAH UNTUK REPRODUKSI

Lihat RINGKASAN

HASIL YANG DIHARAPKAN

HASIL NYATA


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'\")"}

affects_2.7 bug collection community.general database has_pr module mysql needs_collection_redirect python3 community test

Komentar yang paling membantu

Oke, saya menemukannya. Itu adalah diskusi tentang # ansible-devel pada tanggal 2 Oktober, dan pengguna yang memiliki masalah koneksi (dia pertama kali menduga bahwa penanganan kata sandi string kosong adalah masalahnya) akhirnya menemukan bahwa dia perlu menggunakan login_unix_socket (karena perilaku berbeda yang saya sebutkan di atas), hal itu berhasil untuknya. Sayangnya, dia tidak mempermasalahkan itu.

Bagaimanapun, @epeli @anniemelen @ bchanan03 , dapatkah Anda mencoba opsi login_unix_socket dan melihat apakah itu menyelesaikan masalah Anda?

Semua 29 komentar

Hai @epeli , terima kasih telah mengirimkan masalah ini!

klik di sini untuk bantuan bot

File diidentifikasi dalam deskripsi:

Jika file ini tidak akurat, harap perbarui bagian component name dari deskripsi atau gunakan perintah !component bot.

klik di sini untuk bantuan bot

@epeli Hai, apakah https://github.com/ansible/ansible/pull/47809 memperbaiki ini untuk Anda, bisakah Anda menambahkan komentar di PR

@timorunge Soalnya, menambahkan pengguna mysql yang berbeda dimungkinkan tanpa tambalan ini ...
Ya, masalah saya tidak terkait dengan PR ini, tetapi terkait dengan # 47736, jadi saya terus berbicara di sana. Dan saya tidak bisa memberikan Dockerfile, maaf.

Sudahkah Anda mencoba hal yang sama dalam urutan yang berbeda? Artinya pada dasarnya: Pertama masuk tanpa kata sandi, mengatur kata sandi root dan kemudian menghasilkan .my.cnf?

Konektor DB python mana yang Anda gunakan saat ini? MySQLdb atau PyMySQL?

Halo semua,
Apakah mungkin saya melihat masalah yang sama dengan Ansible 2.7.5? dengan 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]

Berjalan:
`` `- nama: install_gerrit | membuat MySQL DB (jika digunakan)
mysql_db:
nama: "{{item.db}}"
pengkodean: latin1
negara: sekarang
with_items: '{{gerrit_db_info}}'
kapan: item.type ditentukan dan item.type == "mysql"

Error:

gagal: [192.168.202.15] {
"berubah": salah,
"doa": {
"module_args": {
"collation": "",
"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": null,
"nama": "reviewdb",
"quick": benar,
"single_transaction": salah,
"ssl_ca": null,
"ssl_cert": null,
"ssl_key": null,
"state": "present",
"target": null
}
},
"item": {
"db": "reviewdb",
"host": "localhost",
"lulus": "xxxxxx",
"type": "mysql",
"pengguna": "gerrit"
},
"msg": "tidak dapat terhubung ke database, periksa login_user dan login_password sudah benar atau /root/.my.cnf memiliki kredensial. Pesan pengecualian: (1698, u \" Akses ditolak untuk pengguna 'root' @ 'localhost' \ ")"
}
``

Tampaknya masalah yang sama dengan mysql_db - pindah kembali ke v2.7.0 yang memungkinkan menyelesaikan masalah.

Saya tidak tahu di mana itu, tetapi beberapa waktu (minggu? Bulan?) Yang lalu saya melihat masalah yang sama, dan alasannya adalah MySQLdb (yang didasarkan pada libmysql) menggunakan soket Unix untuk terhubung secara default, sementara PyMySQL terhubung melalui TCP ke localhost secara default. Bergantung pada bagaimana akses root ke server MySQL Anda dikonfigurasi, ini mungkin membantu Anda mengatasi masalah ini.

Seperti yang saya katakan, saya tidak begitu ingat di mana saya menulis ini sebelumnya, dan saya tidak terlalu yakin tentang detailnya lagi, tetapi mungkin ini memberi salah satu dari Anda yang mengalami masalah ini petunjuk tentang cara mengatasinya :)

Oke, saya menemukannya. Itu adalah diskusi tentang # ansible-devel pada tanggal 2 Oktober, dan pengguna yang memiliki masalah koneksi (dia pertama kali menduga bahwa penanganan kata sandi string kosong adalah masalahnya) akhirnya menemukan bahwa dia perlu menggunakan login_unix_socket (karena perilaku berbeda yang saya sebutkan di atas), hal itu berhasil untuknya. Sayangnya, dia tidak mempermasalahkan itu.

Bagaimanapun, @epeli @anniemelen @ bchanan03 , dapatkah Anda mencoba opsi login_unix_socket dan melihat apakah itu menyelesaikan masalah Anda?

Halo,
saya mendapat masalah yang sama dengan Centos7, kemungkinan 2.7.6.
menentukan socket=/var/lib/mysql/mysql.sock dalam ~/.my.cnf
atau login_unix_socket: /var/lib/mysql/mysql.sock opsi dalam tugas mysql_db
sedang memperbaiki kesalahan koneksi.

cc @Xyon @bmalynovytch @dagwieers @michaelcoburn @oneiroi @tolland
klik di sini untuk bantuan bot

Maaf sampai saat ini, menurut saya bug ini masih belum teratasi.

@nizarakbarm sudahkah Anda mencoba apa yang saya sarankan dan @efflamlemaillet mencoba dan memverifikasi? Alangkah baiknya jika Anda bisa mencobanya, dan mengkonfirmasi apakah itu berhasil (atau tidak!) Di sini.

Hai @felixfontein , di Ubuntu 18.04, solusi yang diberikan oleh @efflamlemaillet memperbaiki masalah
Saya pikir, berikut ini:
https://stackoverflow.com/questions/41846000/mariadb-password-and-unix-socket-authentication-for-root
juga terkait.

Hai,
seperti yang dikatakan @pouyana , entah bagaimana modul mysql yang memungkinkan yang menggunakan koneksi socket secara default di server lokal sebelumnya sekarang menggunakan tcp.

@felixfontein Berhasil , tetapi saya tidak suka menggunakan ~ / .my.cnf

@nizarakbarm login_unix_socket: /var/lib/mysql/mysql.sock adalah sesuatu untuk ditentukan di Ansible. Sudahkah kamu mencobanya?

@efflamlemaillet lebih tepatnya, ini bukan modul Ansible itu sendiri, tetapi pustaka koneksi Python MySQL yang digunakannya. Pustaka lama, MySQLdb (yang didasarkan pada libmysql), lebih memilih soket Unix, sedangkan pustaka baru, PyMySQL, lebih memilih koneksi TCP. Jika Anda eksplisit dalam buku pedoman / peran Anda dan menentukan cara menghubungkan, itu tidak masalah; tetapi jika tidak, itu bergantung pada pustaka mana yang digunakan modul. Modul mencoba PyMySQL terlebih dahulu, dan kembali ke MySQLdb jika PyMySQL tidak tersedia.

Oke, terima kasih atas tanggapan Anda. @felixfontein Dari jawaban Anda, ini dapat membantu saya untuk memahami alasan masalahnya.

Semuanya untuk mengetahui apakah itu harus dianggap sebagai bug?
Jika demikian, mungkin modul Ansible dapat menggantikan perilaku default PyMySQL untuk memastikan modul terhubung dengan cara yang sama (jika tidak ada opsi koneksi yang ditentukan) ketika driver yang diinstal adalah MySQLdb atau PyMySQL.

cc @ Alexander1996
klik di sini untuk bantuan bot

Dalam kasus saya, solusi ini juga membantu
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  

Terima kasih @felixfontein karena telah menunjukkan hal ini!
Menentukan parameter login_unix_socket: /var/run/mysqld/mysqld.sock memecahkan masalah!

Harus memperbarui setiap tugas modul mysql_{user,db} dalam file tasks/databases.yml , tasks/secure-installation.yml dan tasks/users.yml

saya menjelaskan ini di dokumen https://github.com/ansible/ansible/pull/66848
itu datang dengan 2.10

close_me

Apakah halaman ini membantu?
0 / 5 - 0 peringkat