geerlingguy.mysql
Rola Ansible: MySQL
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 skonfigurowanegomysql_user_home
lub go zaktualizować, ustawiającpassword=''
(niezaufane hasło domyślne). Uruchom ponownie playbook zmysql_root_password_update
ustawionym nayes
, 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ślnielocalhost
)password
(może być w postaci tekstowej lub zaszyfrowanej—jeśli zaszyfrowana, ustawencrypted: yes
)encrypted
(domyślnieno
)priv
(domyślnie*.*:USAGE
)append_privs
(domyślnieno
)state
(domyślniepresent
)
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.
ansible-galaxy install geerlingguy.mysql