【问题标题】:Unable to change password for root account ansible无法更改root帐户ansible的密码
【发布时间】:2016-11-20 20:36:52
【问题描述】:

我有以下错误:

{"failed": true, "invocation": {"module_args": 
 {"append_privs": false, "check_implicit_admin": true, "config_file": "/root/.my.cnf", "connect_timeout": 30, "encrypted": false, "host": "rothko", "host_all": false, "login_host": "localhost", "login_password": "", "login_port": 3306, "login_unix_socket": null, "login_user": "root", "name": "root", "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "priv": "*.*:ALL,GRANT", "sql_log_bin": true, "ssl_ca": null, "ssl_cert": null, "ssl_key": null, "state": "present", "update_password": "always", "user": "root"}, "module_name": "mysql_user"}, 
  "item": "rothko", 
   "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: NO)\")"}

这些是我的剧本说明和我尝试过的:

#    - name: Create .my.cnf file with root password credentials
#      become: yes
#      template: src=".my.cnf.j2" dest="/root/.my.cnf" owner=root group=root mode=0600
#    - name: Restart mysql
#      service: name=mysqld state=restarted
#    - name: Change root user password on first run
#      mysql_user:
#        name=root
#        host=localhost
#        password={{ mysql_root_password }}
#        priv=*.*:ALL,GRANT
    - name: update mysql root password for all root accounts
      become: yes
      mysql_user:
        login_user=root
        login_password=''
        name=root
        host="{{ item }}"
        password="{{ mysql_root_password }}"
        check_implicit_admin=yes
        priv="*.*:ALL,GRANT"
      with_items:
        - "{{ ansible_hostname }}"
        - 127.0.0.1
        - ::1
        - localhost
      ignore_errors: true

这是一个众所周知的问题,我发现了一些可以解决它的问题,但没有适合我的解决方案:

【问题讨论】:

  • 要么你在你现在被注释掉的任务中设置了 root 密码,要么你已经安装了 MySQL 5.7,它提供了一个随机生成的 root 密码(可以在 /var/log/mysqld.log 中找到)。无论哪种方式,如果没有该 root 密码,您将无法登录。
  • 对于无声的反对者,如果您反对,列举原因会很有帮助,这样我可以改进问题或知道我不能问的问题。
  • 我不会说这是一个“众所周知的问题”;您提供的链接不是针对与您有相同问题的人(至少,正如您所描述的那样)。您的问题是您没有向 MySQL 提供正确的凭据。正如@ydaetskcoR 所说,要么你已经将它设置在别处(现在没有传递它),要么它是为你设置的,你需要去找它。
  • @XiongChiamiov 一切都很好“……你需要去找它”到底在​​哪里?这不是您在其他地方设置的东西,它是为用户制作的配置。我知道我的问题是什么,但不知道解决方案是什么。
  • ydaetskcoR 告诉了你一个可以看的地方,但你没有表现出任何尝试过的迹象。

标签: mysql ansible


【解决方案1】:

更多信息在这里:Change mysql root password on Centos7

我尝试做一些可靠的事情

    - name: Stop MySQL
      service: name=mysqld state=stopped
    - name: set environment variables
      shell: systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
    - name: Start MySQL
      service: name=mysqld state=started
    - name: sql query
      command:  mysql -u root --execute="UPDATE mysql.user SET authentication_string = PASSWORD('toto') WHERE User = 'root' AND Host = 'localhost';"
    - name: sql query flush
      command:  mysql -u root --execute="FLUSH PRIVILEGES"
    - name: Stop MySQL
      service: name=mysqld state=stopped
    - name: unset environment variables
      shell: systemctl unset-environment MYSQLD_OPTS
    - name: Start MySQL
      service: name=mysqld state=started

希望对你有帮助

【讨论】:

    【解决方案2】:

    完全归功于@glmrenard;这是我在 Ubuntu 16.04 上为 Percona server 5.7 改编的版本:

    ---
    #Reset MySQL root password
    - name: Stop MySQL
      systemd:
        name: mysql
        state: stopped
    
    - name: set environment variables
      shell: systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
    
    - name: Start MySQL
      systemd:
        name: mysql
        state: started
    
    - name: Reset root PW
      command: mysql -u root --execute="UPDATE mysql.user SET authentication_string = PASSWORD('{{ mysql_rootpw }}') WHERE User = 'root' AND (Host = 'localhost' OR Host = '127.0.0.1');"
    
    - name: Flush MySQL privileges
      command: mysql -u root --execute="FLUSH PRIVILEGES"
    
    - name: Stop MySQL
      systemd:
        name: mysql
        state: stopped
    
    - name: Unset environment variables
      shell: systemctl unset-environment MYSQLD_OPTS
    
    - name: Start MySQL
      systemd:
        name: mysql
        state: started
    

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 2023-03-12
      • 2019-11-24
      相关资源
      最近更新 更多