mysql

Ansible Роль: MySQL

CI

Устанавливает и настраивает сервер 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.

О проекте

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Установить
ansible-galaxy install pulse-mind/ansible-role-mysql
Лицензия
mit
Загрузки
124
Владелец