Ansible: كسر mysql_user في 2.7.1 عند استخدام /root/.my.cnf

تم إنشاؤها على ٢٩ أكتوبر ٢٠١٨  ·  29تعليقات  ·  مصدر: ansible/ansible



ملخص

عند الترقية من 2.7.0 إلى 2.7.1 بدأنا نرى هذا الخطأ من الوحدة النمطية 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'\")

المهمة هي التالية:

# 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

هذا الأخير فشل.

Ansible 2.7.0 يعمل بشكل جيد.

نوع القضية
  • تقرير الشوائب
اسم المكون

mysql_user

نسخة غير مرغوب فيها


لصق أدناه
ansible 2.7.1
ملف التكوين = لا شيء
مسار بحث الوحدة النمطية الذي تم تكوينه = ['/ المستخدمون/esamatti/.ansible/plugins/modules'، '/ usr / share / ansible / plugins / modules']
موقع وحدة الثعبان غير القابل للكسر = /usr/local/lib/python3.7/site-packages/ansible
الموقع القابل للتنفيذ = / usr / local / bin / ansible
إصدار python = 3.7.0 (افتراضي ، 2 أكتوبر 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 الإصدار 10.14 (18A391)

وخادم Ubuntu 18.04

خطوات التكاثر

انظر الملخص

نتائج متوقعة

النتائج الفعلية


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

التعليق الأكثر فائدة

حسنًا ، لقد وجدتها. لقد كانت مناقشة على # ansible-devel في الثاني من أكتوبر ، واكتشف المستخدم الذي واجه مشكلة في الاتصال (كان يشتبه في البداية في أن التعامل مع كلمة مرور سلسلة فارغة هو المشكلة) أخيرًا أنه يحتاج إلى استخدام login_unix_socket (بسبب اختلاف السلوك الذي ذكرته أعلاه) ، فقد نجح معه. لسوء الحظ ، لم يخلق مشكلة لذلك.

على أي حال،epelianniemelen @ bchanan03، يمكنك محاولة الخروج من login_unix_socket الخيار ومعرفة ما إذا كان حل المشكلة بالنسبة لك؟

ال 29 كومينتر

مرحبًا epeli ، شكرًا لك على إرسال هذه المشكلة!

انقر هنا للحصول على مساعدة الروبوت

الملفات المحددة في الوصف:

إذا كانت هذه الملفات غير دقيقة ، يرجى تحديث قسم component name للوصف أو استخدام الأمر !component bot.

انقر هنا للحصول على مساعدة الروبوت

epeli مرحبًا ، هل https://github.com/ansible/ansible/pull/47809 يصلح هذا لك ، هل يمكنك إضافة تعليقات على العلاقات العامة

timorunge كما ترى ، كان من الممكن إضافة مستخدمي mysql مختلفين بدون هذا التصحيح ...
نعم ، مشكلتي لا تتعلق بهذا العلاقات العامة ، لكنها تتعلق بالرقم 47736 ، لذلك ما زلت أتحدث هناك. ولا يمكنني تقديم Dockerfile ، آسف.

هل جربت الشيء نفسه بالفعل بترتيب مختلف؟ المعنى بشكل أساسي: تسجيل الدخول أولاً بدون أي كلمة مرور ، وتعيين كلمة مرور الجذر ، ثم إنشاء ملف my.cnf؟

ما هو موصل Python DB الذي تستخدمه هذه الأيام؟ MySQLdb أو PyMySQL؟

تحية للجميع،
هل من الممكن أن أرى نفس المشكلة مع Ansible 2.7.5؟ مع 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]

ادارة:
"" - الاسم: install_gerrit | إنشاء قاعدة بيانات MySQL DB (إذا تم استخدامها)
mysql_db:
الاسم: "{{item.db}}"
الترميز: latin1
الدولة: الحاضر
with_items: "{{gerrit_db_info}}"
عندما: يتم تعريف item.type و item.type == "mysql"

Error:

فشل: [192.168.202.15] {
"تغيرت": خطأ ،
"استدعاء": {
"module_args": {
"التجميع": ""،
"config_file": "/root/.my.cnf" ،
"connect_timeout": 30 ،
"encoding": "latin1"،
"ignore_tables": [] ،
"login_host": "localhost"،
"login_password": فارغ ،
"login_port": 3306 ،
"login_unix_socket": فارغ ،
"login_user": فارغ ،
"الاسم": "reviewdb"،
"سريع": صحيح ،
"single_transaction": خطأ ،
"ssl_ca": فارغ ،
"ssl_cert": فارغ ،
"ssl_key": فارغ ،
"الحالة": "الحاضر" ،
"الهدف": فارغ
}
} ،
"بند": {
"db": "reviewdb"،
"host": "localhost"،
"تمرير": "xxxxxx" ،
"type": "mysql" ،
"المستخدم": "gerrit"
} ،
"msg": "غير قادر على الاتصال بقاعدة البيانات ، تحقق من login_user و login_password صحيحين أو أن /root/.my.cnf لديه بيانات الاعتماد. رسالة الاستثناء: (1698 ، u \" تم رفض الوصول للمستخدم 'root' @ 'localhost' \ ")"
}
""

يبدو أن نفس المشكلة مع mysql_db - أدى العودة إلى الإصدار v2.7.0 إلى حل المشكلة.

لا أعرف أين كان ذلك ، ولكن منذ بعض الوقت (أسابيع؟ شهور؟) بحثت في مشكلة مماثلة ، والسبب هو أن MySQLdb (الذي يعتمد على libmysql) كان يستخدم مقابس Unix للاتصال افتراضيًا ، بينما PyMySQL تم الاتصال عبر TCP بـ localhost افتراضيًا. اعتمادًا على كيفية تكوين الوصول إلى الجذر لخادم MySQL ، قد يساعدك ذلك في حل هذه المشكلة.

كما قلت ، لا أتذكر حقًا المكان الذي كتبت فيه هذا من قبل ، ولست متأكدًا حقًا من التفاصيل بعد الآن ، ولكن ربما يعطي هذا أحدكم الذي يعاني من هذه المشكلة تلميحًا حول كيفية حلها :)

حسنًا ، لقد وجدتها. لقد كانت مناقشة على # ansible-devel في الثاني من أكتوبر ، واكتشف المستخدم الذي واجه مشكلة في الاتصال (كان يشتبه في البداية في أن التعامل مع كلمة مرور سلسلة فارغة هو المشكلة) أخيرًا أنه يحتاج إلى استخدام login_unix_socket (بسبب اختلاف السلوك الذي ذكرته أعلاه) ، فقد نجح معه. لسوء الحظ ، لم يخلق مشكلة لذلك.

على أي حال،epelianniemelen @ bchanan03، يمكنك محاولة الخروج من login_unix_socket الخيار ومعرفة ما إذا كان حل المشكلة بالنسبة لك؟

مرحبا،
حصلت على نفس المشكلة مع Centos7 ، 2.7.6.
تحديد socket=/var/lib/mysql/mysql.sock في ~/.my.cnf
أو الخيار login_unix_socket: /var/lib/mysql/mysql.sock في مهمة mysql_db
يقوم بإصلاح خطأ الاتصال.

سم مكعبXyonbmalynovytchdagwieersmichaelcoburnoneiroitolland
انقر هنا للحصول على مساعدة الروبوت

آسف حتى الآن ، أعتقد أن هذا الخطأ لم يتم حله بعد.

nizarakbarm هل جربت ما اقترحته وحاولت efflamlemaillet وتحققت؟ سيكون من الجيد أن تجرب ذلك ، وتأكد ما إذا كان يعمل (أم لا!) هنا.

مرحبًا felixfontein ، على Ubuntu 18.04 ، efflamlemaillet يعمل على حل المشكلة
أعتقد أن ما يلي:
https://stackoverflow.com/questions/41846000/mariadb-password-and-unix-socket-authentication-for-root
مرتبط أيضًا.

مرحبا،
كما قال pouyana ، بطريقة ما تستخدم وحدة mysql غير الصالحة التي تستخدم اتصال المقبس افتراضيًا على الخادم المحلي من قبل الآن tcp.

felixfontein إنه يعمل ، لكني لا أحب استخدام ~ / .my.cnf

nizarakbarm login_unix_socket: /var/lib/mysql/mysql.sock شيء يجب تحديده في Ansible. هل جربت ذلك؟

efflamlemaillet لنكون أكثر دقة ، إنها ليست وحدة Ansible نفسها ، بل مكتبة اتصال Python MySQL التي تستخدمها. تفضل المكتبة القديمة MySQLdb (القائمة على libmysql) مآخذ Unix ، بينما تفضل المكتبة الجديدة PyMySQL اتصال TCP. إذا كنت صريحًا في كتاب اللعب / الدور الخاص بك وقمت بتحديد كيفية الاتصال ، فهذا لا يهم ؛ ولكن إذا لم تقم بذلك ، فهذا يعتمد على المكتبة التي تستخدمها الوحدة. تحاول الوحدة استخدام PyMySQL أولاً ، ثم تعود إلى MySQLdb إذا لم يكن PyMySQL متاحًا.

أوك ، شكرا لاستجابتك. felixfontein من إجابتك ، يمكن أن تساعدني في فهم سبب المشكلة.

كل شيء هو معرفة ما إذا كان ينبغي اعتباره خطأ؟
إذا كان الأمر كذلك ، فربما تستطيع وحدة Ansible تجاوز السلوك الافتراضي لـ PyMySQL للتأكد من توصيل الوحدة بنفس الطريقة (إذا لم يكن هناك خيار اتصال محدد) عندما يكون برنامج التشغيل المثبت هو MySQLdb أو PyMySQL.

في حالتي ، ساعد هذا الحل أيضًا
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  

شكرا @ فيليكسفونتين للإشارة إلى هذا!
تحديد المعلمة login_unix_socket: /var/run/mysqld/mysqld.sock حل المشكلة!

اضطررت إلى تحديث كل مهام وحدة mysql_{user,db} في الملفات tasks/databases.yml ، tasks/secure-installation.yml و tasks/users.yml رغم ذلك

شرحت هذا في المستند https://github.com/ansible/ansible/pull/66848
يأتي مع 2.10

اقترب مني

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

renaudguerin picture renaudguerin  ·  3تعليقات

Pallokala picture Pallokala  ·  3تعليقات

arkag picture arkag  ·  3تعليقات

iven picture iven  ·  3تعليقات

rchady picture rchady  ·  3تعليقات