Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Installieren Sie MySQL mit Ansible auf Ubuntu

Wenn mysql-server wird kopflos installiert, es gibt kein Passwort. Daher .my.cnf erstellen funktioniert, sollte es eine leere Passwortzeile haben. Folgendes habe ich für eine .my.cnf getestet :

[client]
user=root
password=

Es ist auch etwas seltsam, .my.cnf zu setzen in Ihrem vagrant Benutzerverzeichnis im Besitz von root und nur als root lesbar.

Nachdem sichergestellt wurde, dass das Passwort in .my.cnf leer war , konnte ich das Passwort für root in diesen vier Kontexten richtig festlegen. Beachten Sie, dass es danach nicht mehr ausgeführt werden kann, da .my.cnf aktualisiert werden müsste, sodass es den Idempotenztest nicht besteht.

Es gibt einen Hinweis auf der Modulseite von ansible mysql_user, der vorschlägt, das Passwort und then zu schreiben Schreiben der .my.cnf Datei. Wenn Sie das tun, brauchen Sie ein where -Klausel zu mysql_user Aktion (wahrscheinlich mit einem Dateistatus davor).

Noch eleganter ist die Verwendung von check_implicit_admin zusammen mit login_user und login_password . Das ist wunderbar idempotent.

Als dritte Möglichkeit vielleicht check_implicit_admin macht es noch einfacher.

Hier ist mein erfolgreiches Playbook, das das oben Gesagte zeigt, getestet mit ein paar frischen Servern. Irgendwie stolz darauf. Beachten Sie .my.cnf ist für all das unnötig.

---
- hosts: mysql
  vars:
    mysql_root_password: fart
  tasks:
  - name: Install MySQL
    apt: name={{ item }} update_cache=yes cache_valid_time=3600 state=present
    sudo: yes
    with_items:
    - python-mysqldb
    - mysql-server
  #- name: copy cnf
  #  copy: src=.my.cnf dest=~/.my.cnf owner=ubuntu mode=0644
  #  sudo: yes
  - name: Start the MySQL service
    sudo: yes
    service: 
      name: mysql 
      state: started
      enabled: true
  - name: update mysql root password for all root accounts
    sudo: yes
    mysql_user: 
      name: root 
      host: "{{ item }}" 
      password: "{{ mysql_root_password }}"
      login_user: root
      login_password: "{{ mysql_root_password }}"
      check_implicit_admin: yes
      priv: "*.*:ALL,GRANT"
    with_items:
      - "{{ ansible_hostname }}"
      - 127.0.0.1
      - ::1
      - localhost 

(bearbeiten – my.cnf entfernt)