Установите и настройте mysql с помощью ansible

Я установил MySql, nginx и PHP, используя следующую книгу:

---
- hosts: all
  become: true
  tasks:
    - name: Make Sure we can connect to hosts
      ping:
    - name: Install PHP
      yum: name={{item}} state=present update_cache=yes
      with_items:
        - php
        - php-fpm
        - php-mysql
        - php-xml
    - name: add repository nginx-release (CentOS6/CentOS7)
      yum: name="http://nginx.org/packages/centos/{{ansible_distribution_major_version}}/noarch/RPMS/nginx-release-centos-{{ansible_distribution_major_version}}-0.el{{ansible_distribution_major_version}}.ngx.noarch.rpm"
    - name: Install nginx
      yum: name=nginx state=installed enablerepo=nginx
    - name: Download MySQL Community Repo
      command: /usr/bin/rpm -ivh /tmp/mysql-community-release-el7-7.noarch.rpm
    - name: Install MySql
      yum: name={{item}} state=installed
      with_items:
        - mysql-server
        - MySQL-python

Я пытаюсь настроить mysql с помощью ansible, используя следующую книгу:

---
- hosts: ansible-ctl
  become: true
  tasks:
    - name: Make Sure we can connect to hosts
      ping:
    - name: Start MySQL Server and enable it
      service: name=mysqld state=started enabled=yes
    - name: Generate new root password
      command: openssl rand -hex 7 creates=/root/.my.cnf
      register: mysql_new_root_pass
    - name: Create my.cnf
      template: src=templates/mysql/my.cnf dest=/root/.my.cnf
      when: mysql_new_root_pass.changed
    - name: Remove anonymous users
      mysql_user: name='' host_all=yes state=absent
      when: mysql_new_root_pass.changed
    - name: Remove test database
      mysql_db: name=test state=absent
      when: mysql_new_root_pass.changed
    - name: Output new root password
      debug: msg="New root password is {{mysql_new_root_pass.stdout}}"
      when: mysql_new_root_pass.changed
    - name: Update root password
      mysql_user: name=root host={{item}} password={{mysql_new_root_pass.stdout}}
      with_items:
        - "{{ ansible_hostname }}"
        - 127.0.0.1
        - ::1
        - localhost
      when: mysql_new_root_pass.changed

Файл шаблона my.cnf находится в папке /templates/mysql/:

[client]
user=root
password={{ mysql_new_root_pass.stdout }}

Файл /root/.my.cnf создается с паролем.

Сначала я запускаю службу mysql. Затем с помощью openssl создайте новый пароль и сохраните его в mysql_new_root_pass. Затем, основываясь на существовании файла /root/.my.cnf, я пытаюсь выполнить такие задачи, как удаление анонимных пользователей, удаление тестовой базы данных и обновление пароля root. Но мой playbook выдает ошибку на шаге Remove Anonymous Users. Ниже приведена ошибка, которую я получаю:

fatal: [ansible-ctl]: 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, \"Access denied for user 'root'@'localhost' (using password: YES)\")"}

Я следую книге Apress - Ansible Beginner to Pro, а также следующей ссылке Установка MySQL на сервер Centos 7 с помощью Ansible. Мой контроллер ansible — это Macbook Pro с Centos 7 Minimal, работающий на виртуальной машине.

Сгенерированный .my.cnf :

[client]
user=root
password=<generated password>

Может ли кто-нибудь объяснить, что здесь происходит и как я могу удалить анонимных пользователей?


person Abhilash D K    schedule 09.07.2018    source источник
comment
опубликовать использованный шаблон, отправленный на /root/.my.cnf (заменить конфиденциальную информацию)   -  person Baptiste Mille-Mathias    schedule 09.07.2018


Ответы (1)


Это не удается, потому что, как только вы создадите файл /root/.my.cnf, он будет использоваться для подключения к mysql, но вы еще не обновили пароль пользователя root. Переместите задачу name: Update root password непосредственно перед задачей name: Create my.cnf

person Baptiste Mille-Mathias    schedule 09.07.2018
comment
Привет @baptistemm, теперь я получаю ту же ошибку в задаче обновления пароля `failed: [ansible-ctl] (item=localhost) => {changed: false, item: localhost, msg: невозможно подключиться к базе данных, проверьте login_user и login_password верны или /root/.my.cnf имеет учетные данные. Сообщение об исключении: (1045, \Отказано в доступе для пользователя 'root'@'localhost' (используется пароль: НЕТ)\)}` - person Abhilash D K; 09.07.2018