Saltar al contenido

Ansible: Cómo cambiar la contraseña raíz del servidor MySQL reaprovisionando el servidor

Solución:

El problema que tiene es que Ansible está tratando de usar la misma contraseña de root para iniciar sesión a la que desea cambiarla:

- name: Set root user password
  mysql_user: name=root
              host="{{ item }}"
              password="{{ mysql_root_password }}"
              check_implicit_admin=yes
              login_user="{{ mysql_user }}"
              login_password="{{ mysql_root_password }}"
              state=present

Obviamente, esto nunca funcionará si quieres usar este juego para cambiarlo.

En su lugar, debe cambiar el juego anterior para que sea algo como:

- name: Set root user password
  mysql_user: name=root
              host="{{ item }}"
              password="{{ mysql_root_password }}"
              check_implicit_admin=yes
              login_user="{{ mysql_user }}"
              login_password="{{ mysql_old_root_password }}"
              state=present

Y luego actualice los archivos de inventario relevantes para agregar esta nueva variable.

Entonces tus group_vars/production ahora debe contener:

mysql_old_root_password: productionpw
mysql_root_password: newproductionpw

Parece que este libro de jugadas usa la contraseña de root tanto en roles/mariadb/tasks/main.yml libro de jugadas y también roles/wordpress-setup/tasks/database.yml por lo que es posible que desee ejecutar todo server.yml libro de jugadas para asegurarse de que esté configurado correctamente.

Puedes hacer un mal uso ~ / .my.cnf por poder cambiar la contraseña mysql-root-password.

El truco es tener una tarea “Establecer contraseña de root” (nr. 1), que establecerá la contraseña. Luego, tienes una tarea, que crea un ~ / .my.cnf con las credenciales correctas (nr.2).

En un nuevo sistema, ~ / .my.cnf no es presente. La tarea nr.1 creará mysql-root-user con las credenciales dadas. En un sistema actual, las credenciales de ~ / .my.cnf se utilizan para iniciar sesión y establecer una contraseña mysql_root_password. La tarea nr.2 creará ~ / .my.cnf, o sobrescriba las credenciales antiguas existentes ~ / .my.cnf con otros nuevos.

La gran ventaja de este enfoque es tener solo una variable “mysql_root_password”, que siempre es la correcta desde el punto de vista de un libro de jugadas. En el sistema (s) actual (es), ~ / .my.cnf es una especie de almacenamiento para las credenciales mysql locales actuales.

- name: Set root user password
  # If .my.cnf already exists, this will cause an mysql-root-password update.
  mysql_user:
    name: root
    password: "{{ mysql_root_password}}"
    check_implicit_admin: true

- name: Create .my.cnf
  template:
   src: "client.my.cnf.j2"
   dest: "/root/.my.cnf"
   owner: root
   group: root
   mode: 0600

con client.my.cnf.j2:

[client]
user=root
password={{ mysql_root_password }}

Otras lecturas

Notas relevantes de ansible-mysql_user_module-documentation:

  • Nota 1:

    Para proteger a este usuario como parte de un libro de jugadas idempotente, debe crear al menos dos tareas: la primera debe cambiar la contraseña del usuario raíz, sin proporcionar ningún detalle de login_user / login_password. El segundo debe soltar un archivo ~ / .my.cnf que contiene las nuevas credenciales de root. Las ejecuciones posteriores del libro de jugadas se realizarán correctamente al leer las nuevas credenciales del archivo. ansible-mysql_user_module, notas

  • Nota 2:

    Tanto login_password como login_user son obligatorios cuando se pasan las credenciales. Si no hay ninguno, el módulo intentará leer las credenciales de ~ / .my.cnf y, finalmente, volverá a utilizar el inicio de sesión predeterminado de MySQL de ‘root’ sin contraseña. ansible-mysql_user_module, notas

Para la próxima persona que venga a buscar respuestas por aquí. Si bien la respuesta aceptada es verdadera, debe ser más diligente si está utilizando MySQL 5.7 porque no se permite un inicio de sesión anónimo en mysqld en modo demonizado (servicio). En su lugar, DEBE raspar el /var/log/mysqld.log para obtener una contraseña TEMPORAL que alguien decidió crear y usarla en login_password = ydaetskcoR. Esta fue una característica que decidieron implementar en la versión 5.7 del repositorio de desarrollo, por lo que si desea evitarla, use una versión anterior (5.6).

Documentación aquí: https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_initialize-insecure

http://mysqlserverteam.com/initialize-your-mysql-5-7-instances-with-ease/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *