英文:
Why doesn't Ansible change the default MariaDB password?
问题
我有一个Ubuntu虚拟机。但是,当我尝试通过Ansible更改MariaDB的默认密码(空密码)时,它说我没有权限这样做。我通常可以使用 sudo mysql -u root -p
登录MariaDB。
我尝试设置 become: yes,但没有成功。
你能帮我吗?
playbook.yml:
- hosts: vm-bd-01
vars:
mysql_root_password: password
tasks:
- name: 安装MariaDB服务器
apt:
pkg:
- mariadb-server
- python3-pymysql
update_cache: yes
become: yes
- name: 更改默认MariaDB密码
become: yes
mysql_user:
login_host: 'localhost'
login_user: 'root'
login_password: ''
name: 'root'
password: '{{ mysql_root_password }}'
state: present
错误:
TASK [Change default MariaDB password] ************************************************************************************************************************************************************************************************************
fatal: [IP]: FAILED! => {"changed": false, "msg": "无法连接到数据库,请检查 login_user 和 login_password 是否正确,或者 /root/.my.cnf 文件中是否包含凭据。异常消息:(1698, 'Access denied for user 'root'@'localhost'')"}
英文:
I have an Ubuntu VM. However, when I try to change the default password (Empty Password) for MariaDB via Ansible, it says that I don't have permission to do so. I can normally login to MariaDB using sudo mysql -u root -p
.
I tried setting become: yes, but it didn't work.
Can you help me?
playbook.yml:
- hosts: vm-bd-01
vars:
mysql_root_password: password
tasks:
- name: Install MariaDB Server
apt:
pkg:
- mariadb-server
- python3-pymysql
update_cache: yes
become: yes
- name: Change default MariaDB password
become: yes
mysql_user:
login_host: 'localhost'
login_user: 'root'
login_password: ''
name: 'root'
password: '{{ mysql_root_password }}'
state: present
Error:
TASK [Change default MariaDB password] ************************************************************************************************************************************************************************************************************
fatal: [IP]: FAILED! => {"changed": false, "msg": "unable to connect to database, check login_user and login_******** are correct or /root/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"}
答案1
得分: 2
当连接时不需要密码时,您需要通过mysql unix套接字(/run/mysqld/mysqld.sock
)而不是通过TCP连接进行连接。比较以下行为:
root@ubuntu:~# mysql
欢迎使用MariaDB监视器。命令以;或\g结尾。
您的MariaDB连接ID为31
服务器版本:10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
版权所有(c)2000、2018年、甲骨文、MariaDB公司Ab及其他公司。
键入'help'或'\h'获取帮助。键入'c'以清除当前输入语句。
MariaDB [(none)]> ^D再见
与此:
root@ubuntu:~# mysql -h 127.0.0.1
错误1698 (28000):拒绝用户'root'@'localhost'
重新编写您的playbook以通过unix套接字连接:
- hosts: vm-bd-01
vars:
mysql_root_password: password
tasks:
- name: 安装MariaDB服务器
apt:
pkg:
- mariadb-server
- python3-pymysql
update_cache: yes
become: yes
- name: 更改默认MariaDB密码
become: yes
mysql_user:
login_unix_socket: /run/mysqld/mysqld.sock
login_user: 'root'
login_password: ''
name: 'root'
password: '{{ mysql_root_password }}'
state: present
通过这个更改,您的playbook会成功运行:
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [安装MariaDB服务器] *****************************************************************************************************************************************************************************************
changed: [localhost]
TASK [更改默认MariaDB密码] ****************************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
现在需要密码:
root@ubuntu:~# mysql
错误1045 (28000):拒绝用户'root'@'localhost'(未使用密码)
root@ubuntu:~# mysql -p
输入密码:
欢迎使用MariaDB监视器。命令以;或\g结尾。
您的MariaDB连接ID为35
服务器版本:10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
版权所有(c)2000、2018年、甲骨文、MariaDB公司Ab及其他公司。
键入'help'或'\h'获取帮助。键入'c'以清除当前输入语句。
MariaDB [(none)]>
英文:
When connecting with no password, you need to connect over the mysql unix socket (/run/mysqld/mysqld.sock
) instead of over a TCP connection. Compare the behavior of:
root@ubuntu:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> ^DBye
With:
root@ubuntu:~# mysql -h 127.0.0.1
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Rewrite your playbook to connect over the unix socket:
- hosts: vm-bd-01
vars:
mysql_root_password: password
tasks:
- name: Install MariaDB Server
apt:
pkg:
- mariadb-server
- python3-pymysql
update_cache: yes
become: yes
- name: Change default MariaDB password
become: yes
mysql_user:
login_unix_socket: /run/mysqld/mysqld.sock
login_user: 'root'
login_password: ''
name: 'root'
password: '{{ mysql_root_password }}'
state: present
With this change, your playbook runs successfully for me:
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [Install MariaDB Server] *************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Change default MariaDB password] ****************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
And now a password is required:
root@ubuntu:~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
root@ubuntu:~# mysql -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 35
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论