我正在编写一个简单的剧本,使用Ansible从Ubuntu 18.04安装MariaDB 10.3到我的运行在CentOS 7上的虚拟机上,我得到了以下错误,即使在网上论坛上阅读了大量的解决方案,我也无法解决。如果有任何帮助,我将非常感激。以下是错误信息
PLAY [myvm] *************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************
ok: [myvm]
TASK [MariaDB_10.3 official repository] *********************************************************************************
ok: [myvm]
TASK [Installation of mariadb and packages] *****************************************************************************
ok: [myvm]
TASK [Starting and enabling the service] ********************************************************************************
ok: [myvm]
TASK [Setting up root credentials] **************************************************************************************
[WARNING]: Module did not set no_log for update_password
fatal: [myvm]: FAILED! => {"changed": false, "msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (1045, u\"Access denied for user 'root'@'localhost' (using password: NO)\")"}
PLAY RECAP **************************************************************************************************************
myvm : ok=4 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
这是我的完整的Ansible游戏手册
---
- hosts: myvm
become: yes
vars:
mysql_root_password: "somerandom"
wp_user_pass: "anotherrandom"
tasks:
- name: MariaDB_10.3 official repository
yum_repository:
name: MariaDB
description: MariaDB_10.3
baseurl: http://yum.mariadb.org/10.3/centos7-amd64
gpgkey: https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck: yes
- name: Installation of mariadb and packages
yum:
name:
- mariadb-server
- MySQL-python
state: present
- name: Starting and enabling the service
service:
name: mariadb
state: started
enabled: yes
- name: Setting up root credentials
mysql_user:
name: root
password: "{{ mysql_root_password }}"
host: localhost
login_unix_socket: /var/lib/mysql/mysql.sock
priv: '*.*:ALL,GRANT'
check_implicit_admin: true
state: present
- name: Creating a new database for wordpress
mysql_db:
name: wp_db
login_user: wp_user
login_password: "{{ wp_user_pass }}"
login_host: localhost
login_port: 3306
state: present
- name: Creating a user for wordpress
mysql_user:
name: wp_user
password: "{{ wp_user_pass }}"
host: localhost
priv: 'wp_db.*:ALL'
state: present
- name: Removing test database
mysql_db:
name: test
login_user: root
login_password: "{{ mysql_root_password }}"
state: absent```
你的错误信息提供了一个线索。
"msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf
试试这个
- name: Setting up root credentials
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_user: root
login_password: "{{mysql_root_password}}"
host: localhost
login_unix_socket: /var/lib/mysql/mysql.sock
priv: '*.*:ALL,GRANT'
check_implicit_admin: true
state: present
下面的URL有一些很好的例子,特别是关于如何处理v5.7以后的新过期密码功能。
尤其是这部分...
- name: Detect and properly set root password
stat:
path: /root/.my.cnf
register: r
- mysql_user:
name: root
password: "{{ mysql_root_password }}"
when: r.stat.exists==True
- name: Set new password from temporary password
shell: 'mysql -e "SET PASSWORD = PASSWORD(''{{ mysql_root_password }}'');" --connect-expired-password -uroot -p"{{ tmp_root_password.stdout }}"'
when: r.stat.exists==False
# Now that the root password is set to the specified, make it default for the client.
- name: Copy my.cnf
template:
src: root_my.cnf.j2
dest: /root/.my.cnf
force: yes
点击这里查看完整的源代码。在Ansible中处理mysql_secure_installation。