pulse-mind.mysql

Rola Ansible: MySQL

CI

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

Wymagania

Brak specjalnych wymagań; należy pamiętać, że ta rola wymaga dostępu root, więc należy ją uruchomić w playbooku z globalnym become: yes lub wywołać rolę w swoim playbooku, jak poniżej:

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

Zmienne Roli

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

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

Katalog domowy, w którym ustawy MySQL Python będą przechowywane, co Ansible wykorzysta do łączenia się z MySQL. Powinien to być katalog domowy użytkownika, który uruchamia tę rolę Ansible. mysql_user_name i mysql_user_password można ustawić, jeśli wykonujesz tę rolę jako użytkownik niebędący rootem i chcesz ustawić użytkownika niebędącego rootem.

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. Domyślnie ta rola zmieni hasło użytkownika root tylko, gdy MySQL jest konfigurowany po raz pierwszy. Możesz wymusić aktualizację, ustawiając tę wartość na tak.

Uwaga: Jeśli napotkasz błąd w stylu ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) po nieudanym lub przerwanym uruchomieniu playbooka, zwykle oznacza to, że hasło root nie zostało na początku zaktualizowane. Spróbuj usunąć plik .my.cnf znajdujący się w skonfigurowanym mysql_user_home lub zaktualizować go, ustawiając password='' (nieszczególnie bezpieczne domyślne hasło). Uruchom ponownie playbook, ustawić mysql_root_password_update na tak, a konfiguracja powinna się zakończyć.

mysql_enabled_on_startup: true

Czy MySQL powinno być włączone przy starcie systemu.

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 i katalog dołączania.

overwrite_global_mycnf: true

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

mysql_config_include_files: []

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

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). Formaty te są takie same jak w module mysql_db.

Możesz również usunąć bazę danych (lub upewnić się, że nie jest 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 czystego tekstu lub zaszyfrowane—jeśli zaszyfrowane, ustaw encrypted: yes)
  • encrypted (domyślnie nie)
  • priv (domyślnie *.*:USAGE)
  • append_privs (domyślnie nie)
  • state (domyślnie present)

Formaty te są takie same jak w module mysql_user.

mysql_packages:
  - mysql
  - mysql-server

(Paczek specyficznych dla systemu OS, domyślne 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 RedHat/CentOS) Jeśli włączyłeś dodatkowe repozytoria (sugeruję geerlingguy.repo-epel lub geerlingguy.repo-remi), możesz je wymienić w tej zmiennej (np. remi,epel). Może to być przydatne, jeśli chcesz zainstalować nowsze wersje MySQL.

mysql_python_package_debian: python3-mysqldb

(Tylko Ubuntu/Debian) Jeśli musisz jawnie nadpisać pakiet MySQL Python, możesz to ustawić tutaj. Ustaw na python-mysqldb, jeśli korzystasz ze 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 na 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 log zapytań) lub mysql_log_error na syslog spowoduje, że MySQL będzie logował do syslog z wykorzystaniem 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 logowania wolnych zapytań. Zauważ, że plik logu będzie tworzony przez tę rolę, ale jeśli działasz na serwerze z SELinux lub AppArmor, możesz potrzebować dodać tę ścieżkę do dozwolonych ścieżek dla MySQL lub wyłączyć profil MySQL. Na przykład, na 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 niektóre inne powszechne ustawienia. Wartości domyślne są dostosowane dla serwera, na którym MySQL może zużywać 512 MB pamięci RAM, więc warto je dostosować do specyficznych wymagań twojego 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. Ustal mysql_server_id i mysql_replication_role według serwera (np. master miałby ID 1, z mysql_replication_role równym master, a slave miałby ID 2, z mysql_replication_role równym slave). mysql_replication_user używa tych samych kluczy, co poszczególne pozycje w mysql_users i jest tworzony na serwerach głównych, a używany do replikacji na wszystkich slave'ach.

mysql_replication_master musi być rozwiązywane na IP lub nazwę hosta, która jest dostępna dla slave’ów (może być to wstrzyknięcie do /etc/hosts lub inna metoda), w przeciwnym razie slave'y nie mogą komunikować się z masterem.

Jeśli replikacja master ma różne adresy IP, na których uruchamiasz ansible i na których działa replika MySQL, możesz opcjonalnie określić mysql_replication_master_inventory_host, aby uzyskać dostęp do maszyny (np. uruchamiasz ansible na swoim lokalnym komputerze, ale master i replika MySQL muszą komunikować się na innej sieci).

Nowsze wersje MySQL na CentOS 7

Jeśli chcesz zainstalować MySQL z oficjalnego repozytorium zamiast instalować domyślne odpowiedniki MariaDB, możesz dodać poniższe zadanie pre_tasks w swoim playbooku:

  pre_tasks:
    - name: Zainstaluj repozytorium MySQL.
      yum:
        name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
        state: present
      when: ansible_os_family == "RedHat"
  
    - name: Nadpisz zmienne dla 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ą wymagane modyfikacje, chociaż wszystkie zmienne nadal odnoszą się do 'mysql' zamiast mariadb.

Konfiguracja MariaDB dla Ubuntu 14.04 i 16.04

Na Ubuntu nazwy pakietów są inne, więc zmienna mysql_package musi być zmieniona. Należy ustawić poniższe zmienne (przynajmniej):

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

Zależności

Jeśli masz zainstalowane ansible (np. pip3 install ansible), brak.

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

Przykładowy Playbook

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

W pliku vars/main.yml:

mysql_root_password: super-bezpieczne-hasło
mysql_databases:
  - name: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: podobnie-bezpieczne-hasło
    priv: "example_db.*:ALL"

Licencja

MIT / BSD

Informacje o autorze

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

O projekcie

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Zainstaluj
ansible-galaxy install pulse-mind.mysql
Licencja
mit
Pobrania
133
Właściciel