mysql
Ansible Роль: MySQL
Устанавливает и настраивает сервер MySQL или MariaDB на серверах RHEL/CentOS или Debian/Ubuntu.
Требования
Нет специальных требований; обратите внимание, что эта роль требует доступа root, поэтому запускайте ее в плейбуке с глобальным become: yes
, или вызывайте роль в вашем плейбуке таким образом:
- hosts: database
roles:
- role: geerlingguy.mysql
become: yes
Переменные Роли
Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml
):
mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root
Домашний каталог, внутри которого будут храниться настройки Python MySQL, которые Ansible будет использовать при подключении к MySQL. Это должен быть домашний каталог пользователя, который запускает эту роль Ansible. mysql_user_name
и mysql_user_password
можно задать, если вы запускаете эту роль от имени пользователя, не являющегося root, и хотите настроить пользователя не root.
mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root
Данные учетной записи пользователя root MySQL.
mysql_root_password_update: false
Необходимо ли принудительно обновить пароль пользователя root MySQL. По умолчанию эта роль изменяет пароль пользователя root только при первой настройке MySQL. Вы можете принудительно обновить, установив это значение в yes
.
Примечание: Если вы получаете ошибку вроде
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
после неудачного или прерванного выполнения плейбука, это обычно означает, что пароль root изначально не был обновлен. Попробуйте удалить файл.my.cnf
в настроенномmysql_user_home
или обновить его, установивpassword=''
(небезопасный пароль по умолчанию). Запустите плейбук снова, установивmysql_root_password_update
вyes
, и настройка должна завершиться.
Примечание: Если вы получаете ошибку вроде
ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES)
при попытке войти через CLI, возможно, вам нужно запустить как root или sudoer.
mysql_enabled_on_startup: true
Необходимо ли включать MySQL при запуске.
mysql_config_file: *значение по умолчанию зависит от ОС*
mysql_config_include_dir: *значение по умолчанию зависит от ОС*
Основной файл конфигурации my.cnf и каталог включения.
overwrite_global_mycnf: true
Необходимо ли перезаписывать глобальный my.cnf каждый раз, когда эта роль запускается. Установка этого значения в no
указывает Ansible создавать файл my.cnf
только в случае, если его нет. Это значение следует оставить по умолчанию (yes
), если вы хотите использовать переменные этой роли для настройки MySQL.
mysql_config_include_files: []
Список файлов, которые должны переопределять глобальный my.cnf. Каждый элемент массива требует параметр "src", который указывает путь к файлу. Необязательный параметр "force" может принудить обновление файла каждый раз, когда запускается ansible.
mysql_databases: []
Базы данных MySQL для создания. У базы данных есть значения name
, encoding
(по умолчанию utf8
), collation
(по умолчанию utf8_general_ci
) и replicate
(по умолчанию 1
, используется только если настроена репликация). Форматы этих значений такие же, как и в модуле mysql_db
.
Вы также можете удалить базу данных (или убедиться, что ее нет на сервере), установив state
в absent
(по умолчанию present
).
mysql_users: []
Пользователи MySQL и их привилегии. У пользователя есть следующие значения:
name
host
(по умолчаниюlocalhost
)password
(может быть в открытом виде или зашифрованном—если зашифрован, установитеencrypted: yes
)encrypted
(по умолчаниюno
)priv
(по умолчанию*.*:USAGE
)append_privs
(по умолчаниюno
)state
(по умолчаниюpresent
)
Форматы этих значений такие же, как и в модуле mysql_user
.
mysql_packages:
- mysql
- mysql-server
(зависит от ОС, по умолчанию для RedHat/CentOS) Пакеты для установки. В некоторых случаях вам, возможно, потребуется добавить дополнительные пакеты, такие как mysql-devel
.
mysql_enablerepo: ""
(только для RedHat/CentOS) Если вы включили какие-либо дополнительные репозитории (например, geerlingguy.repo-epel или geerlingguy.repo-remi), эти репозитории можно перечислить в этой переменной (например, remi,epel
). Это может быть полезно, если вы хотите установить более поздние версии MySQL.
mysql_python_package_debian: python3-mysqldb
(только для Ubuntu/Debian) Если вам нужно явно переопределить Python пакет для MySQL, вы можете установить его здесь. Установите его в python-mysqldb
, если используете более старые дистрибутивы с Python 2.
mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *значение по умолчанию зависит от ОС*
mysql_pid_file: *значение по умолчанию зависит от ОС*
Конфигурация подключения MySQL по умолчанию.
mysql_log_file_group: mysql *adm на Debian*
mysql_log: ""
mysql_log_error: *значение по умолчанию зависит от ОС*
mysql_syslog_tag: *значение по умолчанию зависит от ОС*
Конфигурация логирования MySQL. Установка mysql_log
(общий журнал запросов) или mysql_log_error
на syslog
заставит MySQL записывать логи в syslog, используя mysql_syslog_tag
.
mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *значение по умолчанию зависит от ОС*
mysql_slow_query_time: 2
Настройки журнала медленных запросов. Обратите внимание, что файл журнала будет создан этой ролью, но если вы работаете на сервере с SELinux или AppArmor, возможно, вам нужно будет добавить этот путь в разрешенные для MySQL пути, или отключить профиль mysql. Например, на Debian/Ubuntu вы можете выполнить 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"
...
Остальные параметры в defaults/main.yml
контролируют использование памяти MySQL и некоторые другие общие настройки. Значения по умолчанию настроены для сервера, где MySQL может использовать 512 МБ ОЗУ, поэтому вам следует учесть, что их нужно настроить под ваш конкретный сервер.
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: {}
Настройки репликации. Установите mysql_server_id
и mysql_replication_role
по серверу (например, мастер будет с ID 1
, с mysql_replication_role
как master
, а реплика будет с ID 2
, с mysql_replication_role
как slave
). mysql_replication_user
использует те же ключи, что и отдельные элементы в mysql_users
, и создается на мастер-серверах, и используется для репликации на всех рабах.
mysql_replication_master
должен разрешаться в IP-адрес или имя хоста, доступное для рабов (это может быть инъекция в /etc/hosts
или другой способ), в противном случае рабы не смогут общаться с мастером.
Если у мастера репликации разные IP-адреса там, где вы запускаете ansible, и где работает mysql реплика, вы можете по желанию указать mysql_replication_master_inventory_host
для доступа к машине (например, вы запускаете ansible на своей локальной машине, но mysql мастер и реплика должны общаться в другой сети).
Поздние версии MySQL на CentOS 7
Если вы хотите установить MySQL из официального репозитория вместо установки системных пакетных эквивалентов MariaDB, вы можете добавить следующую задачу pre_tasks
в ваш плейбук:
pre_tasks:
- name: Установите репозиторий MySQL.
yum:
name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
state: present
when: ansible_os_family == "RedHat"
- name: Переопределите переменные для 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"
Использование MariaDB
Эта роль работает как с MySQL, так и с совместимой версией MariaDB. В RHEL/CentOS 7+ движок базы данных mariadb был заменен на пакет замены MySQL по умолчанию. Никакие изменения не требуются, хотя все переменные по-прежнему ссылаются на 'mysql', а не на mariadb.
Настройка MariaDB для Ubuntu 14.04 и 16.04
В Ubuntu имена пакетов названы по-другому, поэтому переменная mysql_package
должна быть изменена. Установите следующие переменные (по минимуму):
mysql_packages:
- mariadb-client
- mariadb-server
- python-mysqldb
Зависимости
Если у вас установлен ansible
(например, pip3 install ansible
), никаких.
Если вы установили только ansible-core
, обязательно укажите требование community.mysql
в вашем collections/requirements.yml
или установите его вручную с помощью ansible-galaxy collection install community.mysql
.
Пример Плейбука
- hosts: db-servers
become: yes
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.mysql }
Внутри 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"
Лицензия
MIT / BSD
Информация об авторе
Эта роль была создана в 2014 году Джеффом Гирлингом, автором Ansible for DevOps.
ansible-galaxy install pulse-mind/ansible-role-mysql