عند الترقية من 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'\")"}
مرحبًا epeli ، شكرًا لك على إرسال هذه المشكلة!
الملفات المحددة في الوصف:
إذا كانت هذه الملفات غير دقيقة ، يرجى تحديث قسم component name
للوصف أو استخدام الأمر !component
bot.
epeli مرحبًا ، هل https://github.com/ansible/ansible/pull/47809 يصلح هذا لك ، هل يمكنك إضافة تعليقات على العلاقات العامة
timorunge كما ترى ، كان من الممكن إضافة مستخدمي mysql مختلفين بدون هذا التصحيح ...
نعم ، مشكلتي لا تتعلق بهذا العلاقات العامة ، لكنها تتعلق بالرقم 47736 ، لذلك ما زلت أتحدث هناك. ولا يمكنني تقديم Dockerfile ، آسف.
هل جربت الشيء نفسه بالفعل بترتيب مختلف؟ المعنى بشكل أساسي: تسجيل الدخول أولاً بدون أي كلمة مرور ، وتعيين كلمة مرور الجذر ، ثم إنشاء ملف my.cnf؟
ما هو موصل Python DB الذي تستخدمه هذه الأيام؟ MySQLdb أو PyMySQL؟
ccJmainguy
انقر هنا للحصول على مساعدة الروبوت
تحية للجميع،
هل من الممكن أن أرى نفس المشكلة مع 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
انقر هنا للحصول على مساعدة الروبوت
ccbmildren
انقر هنا للحصول على مساعدة الروبوت
آسف حتى الآن ، أعتقد أن هذا الخطأ لم يتم حله بعد.
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.
عبدالله @ 3bdul1ah
انقر هنا للحصول على مساعدة الروبوت
عبدالله @ 3bdul1ah
انقر هنا للحصول على مساعدة الروبوت
cc kurtdavis
انقر هنا للحصول على مساعدة الروبوت
في حالتي ، ساعد هذا الحل أيضًا
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
اقترب مني
التعليق الأكثر فائدة
حسنًا ، لقد وجدتها. لقد كانت مناقشة على # ansible-devel في الثاني من أكتوبر ، واكتشف المستخدم الذي واجه مشكلة في الاتصال (كان يشتبه في البداية في أن التعامل مع كلمة مرور سلسلة فارغة هو المشكلة) أخيرًا أنه يحتاج إلى استخدام
login_unix_socket
(بسبب اختلاف السلوك الذي ذكرته أعلاه) ، فقد نجح معه. لسوء الحظ ، لم يخلق مشكلة لذلك.على أي حال،epelianniemelen @ bchanan03، يمكنك محاولة الخروج من
login_unix_socket
الخيار ومعرفة ما إذا كان حل المشكلة بالنسبة لك؟