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 или с правами sudo.

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 replica, вы можете по желанию указать mysql_replication_master_inventory_host, чтобы получить доступ к машине (например, вы запускаете ansible на своём локальном компьютере, но mysql master и replica должны общаться в другой сети).

mysql_hide_passwords: false

Нужно ли скрывать вывод задач, который содержит пароли, во время выполнения?

Более поздние версии 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 geerlingguy/ansible-role-mysql
Лицензия
mit
Загрузки
4127407
Владелец
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns