pulse-mind.mysql

Rôle Ansible : MySQL

CI

Installe et configure le serveur MySQL ou MariaDB sur des serveurs RHEL/CentOS ou Debian/Ubuntu.

Exigences

Pas d'exigences particulières ; sachez que ce rôle nécessite un accès root, donc vous devez soit l'exécuter dans un playbook avec become: yes global, soit invoquer le rôle dans votre playbook comme ceci :

- hosts: database
  roles:
    - role: geerlingguy.mysql
      become: yes

Variables du rôle

Les variables disponibles sont listées ci-dessous, avec les valeurs par défaut (voir defaults/main.yml) :

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

Le répertoire personnel dans lequel les paramètres MySQL de Python seront stockés, que Ansible utilisera lors de la connexion à MySQL. Cela doit être le répertoire personnel de l'utilisateur qui exécute ce rôle Ansible. Les mysql_user_name et mysql_user_password peuvent être définis si vous exécutez ce rôle sous un compte utilisateur non-root et souhaitez définir un utilisateur non-root.

mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root

Les détails du compte utilisateur root de MySQL.

mysql_root_password_update: false

Savoir si le mot de passe de l'utilisateur root de MySQL doit être mis à jour. Par défaut, ce rôle ne changera le mot de passe de l'utilisateur root que lorsque MySQL est d'abord configuré. Vous pouvez forcer une mise à jour en définissant cela sur yes.

Remarque : Si vous obtenez une erreur comme ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) après un échec ou une interruption de l'exécution du playbook, cela signifie généralement que le mot de passe root n'a pas été mis à jour à l'origine. Essayez soit de supprimer le fichier .my.cnf dans le mysql_user_home configuré, soit de le mettre à jour en définissant password='' (le mot de passe par défaut non sécurisé). Exécutez à nouveau le playbook, avec mysql_root_password_update défini sur yes, et la configuration devrait se terminer.

Remarque : Si vous obtenez une erreur comme ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES) en essayant de vous connecter via la CLI, vous pourriez avoir besoin d'exécuter en tant que root ou sudoer.

mysql_enabled_on_startup: true

Savoir si MySQL doit être activé au démarrage.

mysql_config_file: *valeur par défaut dépend de l'OS*
mysql_config_include_dir: *valeur par défaut dépend de l'OS*

Le fichier de configuration principal my.cnf et le répertoire d'inclusion.

overwrite_global_mycnf: true

Savoir si le fichier global my.cnf doit être écrasé chaque fois que ce rôle est exécuté. Le définir sur no indique à Ansible de créer le fichier my.cnf uniquement s'il n'existe pas. Il est préférable de le laisser à sa valeur par défaut (yes) si vous souhaitez utiliser les variables de ce rôle pour configurer MySQL.

mysql_config_include_files: []

Une liste de fichiers qui devraient écraser le my.cnf global par défaut. Chaque élément du tableau nécessite un paramètre "src" qui est un chemin vers un fichier. Un paramètre "force" facultatif peut forcer la mise à jour du fichier chaque fois qu'Ansible s'exécute.

mysql_databases: []

Les bases de données MySQL à créer. Une base de données a les valeurs name, encoding (par défaut utf8), collation (par défaut utf8_general_ci) et replicate (par défaut 1, utilisé uniquement si la réplication est configurée). Les formats de celles-ci sont les mêmes que dans le module mysql_db.

Vous pouvez également supprimer une base de données (ou vous assurer qu'elle n'est pas sur le serveur) en définissant state à absent (par défaut present).

mysql_users: []

Les utilisateurs MySQL et leurs privilèges. Un utilisateur a les valeurs :

  • name
  • host (par défaut localhost)
  • password (peut être en texte brut ou crypté—si crypté, définir encrypted: yes)
  • encrypted (par défaut no)
  • priv (par défaut *.*:USAGE)
  • append_privs (par défaut no)
  • state (par défaut present)

Les formats de celles-ci sont les mêmes que dans le module mysql_user.

mysql_packages:
  - mysql
  - mysql-server

(Dépendances spécifiques à l'OS, les valeurs par défaut de RedHat/CentOS sont listées ici) Paquets à installer. Dans certaines situations, vous pourriez avoir besoin d'ajouter des paquets supplémentaires, comme mysql-devel.

mysql_enablerepo: ""

(uniquement RedHat/CentOS) Si vous avez activé des référentiels supplémentaires (je vous suggère geerlingguy.repo-epel ou geerlingguy.repo-remi), ces référentiels peuvent être listés sous cette variable (par exemple remi,epel). Cela peut être utile, par exemple, si vous souhaitez installer des versions plus récentes de MySQL.

mysql_python_package_debian: python3-mysqldb

(uniquement Ubuntu/Debian) Si vous devez explicitement remplacer le paquet Python MySQL, vous pouvez le définir ici. Définissez-le sur python-mysqldb si vous utilisez de plus anciennes distributions fonctionnant sous Python 2.

mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *valeur par défaut dépend de l'OS*
mysql_pid_file: *valeur par défaut dépend de l'OS*

Configuration de connexion MySQL par défaut.

mysql_log_file_group: mysql *adm sur Debian*
mysql_log: ""
mysql_log_error: *valeur par défaut dépend de l'OS*
mysql_syslog_tag: *valeur par défaut dépend de l'OS*

Configuration des journaux MySQL. Définir mysql_log (le journal des requêtes générales) ou mysql_log_error sur syslog fera que MySQL journalise sur syslog en utilisant le mysql_syslog_tag.

mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *valeur par défaut dépend de l'OS*
mysql_slow_query_time: 2

Paramètres du journal des requêtes lentes. Notez que le fichier journal sera créé par ce rôle, mais si vous exécutez sur un serveur avec SELinux ou AppArmor, vous devrez peut-être ajouter ce chemin aux chemins autorisés pour MySQL, ou désactiver le profil mysql. Par exemple, sur Debian/Ubuntu, vous pouvez exécuter 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"
...

Le reste des paramètres dans defaults/main.yml contrôle l'utilisation de la mémoire de MySQL et d'autres paramètres communs. Les valeurs par défaut sont réglées pour un serveur où MySQL peut consommer 512 Mo de RAM, vous devriez donc envisager de les ajuster pour mieux convenir à votre serveur particulier.

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: {}

Paramètres de réplication. Définissez mysql_server_id et mysql_replication_role par serveur (par exemple, le maître aura l'ID 1, avec le mysql_replication_role de master, et l'esclave aura l'ID 2, avec le mysql_replication_role de slave). Le mysql_replication_user utilise les mêmes clés que les éléments individuels dans mysql_users, et est créé sur les serveurs maîtres, et utilisé pour la réplication sur tous les esclaves.

mysql_replication_master doit résoudre en une adresse IP ou un nom d'hôte qui est accessible aux esclaves (cela pourrait être une injection dans /etc/hosts ou d'une autre manière), sinon les esclaves ne peuvent communiquer avec le maître.

Si le maître de réplication a différentes adresses IP où vous exécutez ansible et où la réplique mysql fonctionne, vous pouvez optionnellement spécifier un mysql_replication_master_inventory_host pour accéder à la machine (par exemple, vous exécutez ansible sur votre machine locale, mais le maître et la réplique mysql doivent communiquer sur un réseau différent)

Versions ultérieures de MySQL sur CentOS 7

Si vous souhaitez installer MySQL depuis le référentiel officiel au lieu d'installer les équivalents MariaDB par défaut du système, vous pouvez ajouter la tâche pre_tasks suivante dans votre playbook :

  pre_tasks:
    - name: Installer le référentiel MySQL.
      yum:
        name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
        state: present
      when: ansible_os_family == "RedHat"
  
    - name: Remplacer les variables pour 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"

Utilisation de MariaDB

Ce rôle fonctionne avec MySQL ou une version compatible de MariaDB. Sur RHEL/CentOS 7+, le moteur de base de données MariaDB a été substitué comme le paquet de remplacement par défaut de MySQL. Aucune modification n'est nécessaire même si toutes les variables font toujours référence à 'mysql' au lieu de 'mariadb'.

Configuration MariaDB pour Ubuntu 14.04 et 16.04

Sur Ubuntu, les noms de paquet sont différents, donc la variable mysql_package doit être modifiée. Définissez les variables suivantes (au minimum) :

mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb

Dépendances

Si vous avez ansible installé (par exemple, pip3 install ansible), aucune.

Si vous avez uniquement installé ansible-core, assurez-vous d'inclure community.mysql dans votre collections/requirements.yml ou installez-le manuellement avec ansible-galaxy collection install community.mysql.

Exemple de Playbook

- hosts: db-servers
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.mysql }

Dans 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"

Licence

MIT / BSD

Informations sur l'auteur

Ce rôle a été créé en 2014 par Jeff Geerling, auteur de Ansible for DevOps.

À propos du projet

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Installer
ansible-galaxy install pulse-mind.mysql
Licence
mit
Téléchargements
133
Propriétaire