2017-02-16 33 views
3

Я недавно модернизировал свой бродяга из убунту/испытанный-64 к бенто/Ubuntu-16.04. С этим MySQL был обновлен до 5.7. Я сделал несколько обновлений для своей пьесы, но я все время застреваю при настройке пароля пользователя root.анзибль Установка MySql 5.7 - Установка корневого пароля пользователя

В прошлом (до 5.7) следующий был достаточно:

- name: MySQL | Set the root password. 
    mysql_user: 
    name=root 
    host=localhost 
    password={{ mysql_root_password }} 
    become: true 

В моей PlayBook это проверяется при попытке удалить анонимный пользователь.

- name: MySQL | Delete anonymous MySQL server user for {{ server_hostname }} 
    mysql_user: 
    name="" 
    host="{{ server_hostname }}" 
    state="absent" 
    login_user=root 
    login_password={{ mysql_root_password }} 

Однако, теперь мой Playbook терпит неудачу на этом этапе, возвращаясь:

"Доступ запрещен для пользователя 'корень' @ 'локальный'"

TASK [mysql : MySQL | Delete anonymous MySQL server user for vagrant] ********** 
task path: /Users/jonrobinson/vagrant/survey/playbooks/roles/mysql/tasks/mysql.yml:51 
fatal: [vagrant]: FAILED! => {"changed": false, "failed": true, "msg": "unable to connect to database, check login_user and login_password are correct or /home/vagrant/.my.cnf has the credentials. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"} 

Я попробовал несколько вещей:

  1. Установка пароля blan k для пользователя root mysql_root_password=""
  2. Попытка удалить пользователя root, а затем воссоздать его с помощью Ansible. Я получаю такую ​​же ошибку, вероятно, потому, что она пытается действовать у пользователя root.
  3. Ручное обновление пароля root в mysql. - Это также не работает (пароль не распознается), если я не удалю пользователя root и не создаю его со всеми разрешениями. Просто обновление пароля пользователя root не изменилось.

Мой Полный MySQL YAML:

--- 
- name: MySQL | install mysql packages 
    apt: pkg={{ item }} state=installed 
    become: true 
    with_items:  
    - mysql-client 
    - mysql-common 
    - mysql-server 
    - python-mysqldb 

- name: MySQL | create MySQL configuration file 
    template: 
    src=my.cnf.j2 
    dest=/etc/mysql/my.cnf 
    backup=yes 
    owner=root 
    group=root 
    mode=0644 
    become: true 

- name: MySQL | create MySQLD configuration file 
    template: 
    src=mysqld.cnf.j2 
    dest=/etc/mysql/conf.d/mysqld.cnf 
    backup=yes 
    owner=root 
    group=root 
    mode=0644 
    become: true 

- name: MySQL | restart mysql 
    service: name=mysql state=restarted 
    become: true 

- name: MySQL | Set the root password. 
    mysql_user: 
    name=root 
    host=localhost 
    password={{ mysql_root_password }} 
    become: true 

- name: MySQL | Config for easy access as root user 
    template: src=mysql_root.my.cnf.j2 dest=/root/.my.cnf 
    become: true 

- name: MySQL | Config for easy access as root user 
    template: src=mysql_root.my.cnf.j2 dest={{ home_dir }}/.my.cnf 
    when: "'{{ user }}' != 'root'" 

- name: MySQL | Delete anonymous MySQL server user for {{ server_hostname }} 
    mysql_user: name="" host="{{ server_hostname }}" state="absent" login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | Delete anonymous MySQL server user for localhost 
    mysql_user: name="" state="absent" host=localhost login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | Secure the MySQL root user for IPV6 localhost (::1) 
    mysql_user: name="root" password="{{ mysql_root_password }}" host="::1" login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | Secure the MySQL root user for IPV4 localhost (127.0.0.1) 
    mysql_user: name="root" password="{{ mysql_root_password }}" host="127.0.0.1" login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | Secure the MySQL root user for localhost domain (localhost) 
    mysql_user: name="root" password="{{ mysql_root_password }}" host="localhost" login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | Secure the MySQL root user for {{ server_hostname }} domain 
    mysql_user: name="root" password="{{ mysql_root_password }}" host="{{ server_hostname }}" login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | Remove the MySQL test database 
    mysql_db: db=test state=absent login_user=root login_password={{ mysql_root_password }} 

- name: MySQL | create application database user 
    mysql_user: name={{ dbuser }} password={{ dbpass }} priv=*.*:ALL host='%' state=present login_password={{ mysql_root_password }} login_user=root 

- name: MySQL | restart mysql 
    service: name=mysql state=restarted 
    become: true 
+0

Что ваше требование? Вы хотите только настроить mysql на сервере? –

+0

Я предоставил вам свою игру для установки mysql –

+0

Я пытаюсь установить MySql 5.7 на Ubuntu 16. Установка пароля для пользователя root, и если вы видите внизу моей книги, я создаю другого пользователя базы данных. –

ответ

4

Я был в состоянии понять это. Суть проблемы связана с mysql 5.7, используя auth_socket для пользователя root, когда пароль не предоставляется. Смотрите следующее: "That plugin doesn’t care and doesn’t need a password. It just checks if the user is connecting using a UNIX socket and then compares the username."

Если это так, вы не можете обновить пароль с помощью:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('test'); 

И вместо этого должны использовать:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password='test'; 

Решение 1: Тем не менее, анзибль, с версии 2.0.2 не учитывал этого.Я был в состоянии обойти эту проблему, установив пароль перед MySql установлен

- name: Specify MySQL root password before installing 
    debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_password | quote}}' vtype='password' 
    become: true 

- name: Confirm MySQL root password before installing 
    debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_password | quote}}' vtype='password' 
    become: true 

- name: MySQL | install mysql packages 
    apt: pkg={{ item }} state=installed 
    become: true 
    with_items:  
    - mysql-client 
    - mysql-common 
    - mysql-server 
    - python-mysqldb 
    ... 

However, this has also since been addressed by Ansible

Решение 2: Самое простое решение просто обновить анзибль 2.2.1

0

Из того, что я понимаю, в MySQL, изменение корневого пароля необходимо сделать для localhost, имени хоста сервера и 127.0.0.1, а также нуждается в полных правах. Что-то вдоль этих линий может помочь (Примечание: Я проверил это только на MariaDB, а не MySQL):

tasks: 
    - name: Set a new root password 
    mysql_user: check_implicit_admin=yes 
       login_user=root 
       login_password={{ mysql_root_password }} 
       user=root 
       password={{ NEW_mysql_root_password }} 
       host={{ item }} 
       priv='*.*:ALL,GRANT' 
    with_items: 
     - localhost 
     - 127.0.0.1 
     - {{ server_hostname }} 
    notify: 
     - restart_mariadb 

handlers: 
    - name: restart_mariadb 
    service: name=mariadb 
      state=restarted 
+0

Я просто попробовал это. Получение: Доступ запрещен для пользователя «root» @ «localhost» \ »при установке нового пароля для пароля root. Я устанавливаю' login_password blank'. Потому что я считаю, что это то, что по умолчанию mysql 5.7. Каково ваше исходное значение mysql_root_password? ? –

+0

В этом тесте мне 'mysql_root_password' был присвоен случайный пароль открытого текста, например:' mysql_root_password: "testpass" ' – rahuL

 Смежные вопросы

  • Нет связанных вопросов^_^