pulse-mind.mysql
Rola Ansible: MySQL
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 skonfigurowanymmysql_user_home
lub zaktualizować go, ustawiającpassword=''
(nieszczególnie bezpieczne domyślne hasło). Uruchom ponownie playbook, ustawićmysql_root_password_update
natak
, 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ślnielocalhost
)password
(może być w postaci czystego tekstu lub zaszyfrowane—jeśli zaszyfrowane, ustawencrypted: yes
)encrypted
(domyślnienie
)priv
(domyślnie*.*:USAGE
)append_privs
(domyślnienie
)state
(domyślniepresent
)
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.
ansible-galaxy install pulse-mind.mysql