geerlingguy.mysql

Rola Ansible: MySQL

CI

Instaluje i konfiguruje serwer MySQL lub MariaDB na serwerach RHEL/CentOS lub Debian/Ubuntu.

Wymagania

Nie ma specjalnych wymagań; należy pamiętać, że ta rola wymaga dostępu roota, więc uruchom ją w playbooku z globalnym become: yes, lub wywołaj rolę w swoim playbooku jak:

- hosts: database
  roles:
    - role: geerlingguy.mysql
      become: yes

Zmienne Roli

Dostępne zmienne są wymienione poniżej, wraz z wartościami domyślnymi (zobacz defaults/main.yml):

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

Katalog domowy, w którym będą przechowywane ustawienia MySQL dla Pythona, który Ansible wykorzysta do połączenia z MySQL. Powinien to być katalog domowy użytkownika, który uruchamia tę rolę Ansible. Wartości mysql_user_name i mysql_user_password można ustawić, jeśli uruchamiasz tę rolę jako użytkownik nie-root i chcesz utworzyć użytkownika innego niż root.

mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root

Szczegóły konta użytkownika root MySQL.

mysql_root_password_update: false

Czy wymusić aktualizację hasła użytkownika root MySQL. Domyślnie ta rola zmieni hasło użytkownika root tylko podczas pierwotnej konfiguracji MySQL. Można wymusić aktualizację, ustawiając na yes.

Uwaga: Jeśli pojawi się błąd typu ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) po nieudanym lub przerwanym uruchomieniu playbooka, oznacza to, że hasło root nie zostało pierwotnie zaktualizowane. Spróbuj usunąć plik .my.cnf wewnątrz skonfigurowanego mysql_user_home lub go zaktualizować, ustawiając password='' (niezaufane hasło domyślne). Uruchom ponownie playbook z mysql_root_password_update ustawionym na yes, a konfiguracja powinna się zakończyć.

Uwaga: Jeśli pojawi się błąd typu ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES) podczas logowania z CLI, może być konieczne uruchomienie jako root lub sudoer.

mysql_enabled_on_startup: true

Czy MySQL powinien być włączony przy uruchamianiu.

mysql_config_file: *domyślna wartość zależy od systemu OS*
mysql_config_include_dir: *domyślna wartość zależy od systemu OS*

Główny plik konfiguracyjny my.cnf oraz katalog include.

overwrite_global_mycnf: true

Czy globalny plik my.cnf powinien być nadpisywany za każdym razem, gdy ta rola jest uruchamiana. Ustawienie tego na no powoduje, że Ansible tworzy plik my.cnf tylko wtedy, gdy on nie istnieje. To powinno pozostać na wartości domyślnej (yes), jeśli chcesz używać zmiennych tej roli do konfiguracji MySQL.

mysql_config_include_files: []

Lista plików, które powinny nadpisywać domyślny globalny plik my.cnf. Każdy element w tablicy wymaga parametru "src", który jest ścieżką do pliku. Opcjonalny parametr "force" może wymusić zaktualizowanie pliku za każdym razem, gdy biega Ansible.

mysql_databases: []

Bazy danych MySQL do utworzenia. Baza danych ma wartości name, encoding (domyślnie utf8), collation (domyślnie utf8_general_ci) i replicate (domyślnie 1, używane tylko jeśli replikacja jest skonfigurowana). Format tych wartości jest taki sam jak w module mysql_db.

Można także usunąć bazę danych (lub upewnić się, że nie znajduje się na serwerze), ustawiając state na absent (domyślnie present).

mysql_users: []

Użytkownicy MySQL i ich uprawnienia. Użytkownik ma wartości:

  • name
  • host (domyślnie localhost)
  • password (może być w postaci tekstowej lub zaszyfrowanej—jeśli zaszyfrowana, ustaw encrypted: yes)
  • encrypted (domyślnie no)
  • priv (domyślnie *.*:USAGE)
  • append_privs (domyślnie no)
  • state (domyślnie present)

Formaty tych wartości są takie same jak w module mysql_user.

mysql_packages:
  - mysql
  - mysql-server

(Podspecyficzne dla OS, domyślnie dla RedHat/CentOS) Pakiety do zainstalowania. W niektórych sytuacjach może być konieczne dodanie dodatkowych pakietów, takich jak mysql-devel.

mysql_enablerepo: ""

(Tylko dla RedHat/CentOS) Jeśli włączyłeś jakiekolwiek dodatkowe repozytoria (możesz spróbować geerlingguy.repo-epel lub geerlingguy.repo-remi), można je wymienić w tej zmiennej (np. remi,epel). Może to być pomocne, jeśli chcesz zainstalować nowsze wersje MySQL.

mysql_python_package_debian: python3-mysqldb

(Tylko dla Ubuntu/Debian) Jeśli musisz jawnie nadpisać pakiet Pythona MySQL, możesz ustawić go tutaj. Ustaw to na python-mysqldb, jeśli korzystasz z starszych dystrybucji działających na Pythonie 2.

mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *domyślna wartość zależy od systemu OS*
mysql_pid_file: *domyślna wartość zależy od systemu OS*

Domyślna konfiguracja połączenia MySQL.

mysql_log_file_group: mysql *adm w Debianie*
mysql_log: ""
mysql_log_error: *domyślna wartość zależy od systemu OS*
mysql_syslog_tag: *domyślna wartość zależy od systemu OS*

Konfiguracja logowania MySQL. Ustawienie mysql_log (ogólny dziennik zapytań) lub mysql_log_error na syslog spowoduje, że MySQL będzie logować się do syslog, używając mysql_syslog_tag.

mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *domyślna wartość zależy od systemu OS*
mysql_slow_query_time: 2

Ustawienia dziennika powolnych zapytań. Należy pamiętać, że plik dziennika zostanie utworzony przez tę rolę, ale jeśli uruchamiasz na serwerze z SELinux lub AppArmor, może być konieczne dodanie tej ścieżki do dozwolonych dla MySQL lub wyłączenie profilu MySQL. Na przykład w Debianie/Ubuntu możesz uruchomić sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld && sudo service apparmor restart.

mysql_key_buffer_size: "256M"
mysql_max_allowed_packet: "64M"
mysql_table_open_cache: "256"
...

Pozostałe ustawienia w defaults/main.yml kontrolują wykorzystanie pamięci MySQL i inne powszechne ustawienia. Wartości domyślne są dostosowane do serwera, na którym MySQL może wykorzystać 512 MB RAM, więc należy rozważyć ich dostosowanie do konkretnego serwera.

mysql_server_id: "1"
mysql_max_binlog_size: "100M"
mysql_binlog_format: "ROW"
mysql_expire_logs_days: "10"
mysql_replication_role: ''
mysql_replication_master: ''
mysql_replication_user: {}

Ustawienia replikacji. Ustaw mysql_server_id i mysql_replication_role według serwera (np. master miałby ID 1, z mysql_replication_role jako master, a slave miałby ID 2, z mysql_replication_role jako slave). mysql_replication_user korzysta z tych samych kluczy co poszczególne elementy na liście w mysql_users i jest tworzony na serwerach głównych oraz używany do replikacji na wszystkich slave'ach.

mysql_replication_master musi rozwiązać się do adresu IP lub nazwy hosta, który jest dostępny dla slave'ów (może to być wstrzyknięcie do /etc/hosts lub inny sposób), w przeciwnym razie slave'y nie mogą komunikować się z masterem.

Jeśli master replikacji ma inne adresy IP, na których uruchamiasz ansible, i gdzie działa replika mysql, możesz opcjonalnie określić mysql_replication_master_inventory_host, aby uzyskać dostęp do maszyny (np. uruchamiasz ansible na lokalnej maszynie, ale master oraz replika mysql muszą komunikować się w innej sieci).

mysql_hide_passwords: false

Czy potrzebujesz ukryć wyniki zadań, które zawierają hasła podczas wykonywania?

Nowsze wersje MySQL na CentOS 7

Jeśli chcesz zainstalować MySQL z oficjalnego repozytorium zamiast instalować domyślną wersję gdyż MariaDB, możesz dodać następujące zadanie pre_tasks w swoim playbooku:

  pre_tasks:
    - name: Install the MySQL repo.
      yum:
        name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
        state: present
      when: ansible_os_family == "RedHat"
  
    - name: Override variables for MySQL (RedHat).
      set_fact:
        mysql_daemon: mysqld
        mysql_packages: ['mysql-server']
        mysql_log_error: /var/log/mysqld.err
        mysql_syslog_tag: mysqld
        mysql_pid_file: /var/run/mysqld/mysqld.pid
        mysql_socket: /var/lib/mysql/mysql.sock
      when: ansible_os_family == "RedHat"

Użycie MariaDB

Ta rola działa zarówno z MySQL, jak i z kompatybilną wersją MariaDB. W RHEL/CentOS 7+ silnik bazy danych mariadb został zastąpiony jako domyślny pakiet zastępujący MySQL. Nie są potrzebne żadne modyfikacje, chociaż wszystkie zmienne wciąż się odnoszą do 'mysql' zamiast do mariadb.

Konfiguracja MariaDB Ubuntu 14.04 i 16.04

W systemie Ubuntu nazwy pakietów są inne, więc zmienna mysql_package musi być zmieniona. Ustaw poniższe zmienne (przynajmniej):

mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb

Zależności

Jeśli masz zainstalowany ansible (np. pip3 install ansible), to żadnych.

Jeśli zainstalowałeś tylko ansible-core, upewnij się, że wymagany jest community.mysql w twoim collections/requirements.yml lub zainstaluj to ręcznie za pomocą ansible-galaxy collection install community.mysql.

Przykład Playbooka

- hosts: db-servers
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.mysql }

Wewnątrz vars/main.yml:

mysql_root_password: super-secure-password
mysql_databases:
  - name: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: similarly-secure-password
    priv: "example_db.*:ALL"

Licencja

MIT / BSD

Informacje o autorze

Ta rola została stworzona w 2014 roku przez Jeffa Geerlinga, autora Ansible for DevOps.

O projekcie

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Zainstaluj
ansible-galaxy install geerlingguy.mysql
Licencja
mit
Pobrania
4.5M
Właściciel
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns