geerlingguy.mysql

Rôle Ansible : MySQL

CI

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

Exigences

Pas d'exigences spéciales ; notez que ce rôle nécessite un accès root, donc soit exécutez-le dans un playbook avec devenir: yes, soit invoquez le rôle dans votre playbook comme suit :

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

Variables du Rôle

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

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

Le répertoire personnel où seront stockés les paramètres MySQL de Python. Ansible l'utilisera pour se connecter à MySQL. Cela doit être le répertoire personnel de l'utilisateur qui exécute ce rôle Ansible. Les valeurs mysql_user_name et mysql_user_password peuvent être définies si vous exécutez ce rôle sous un compte utilisateur non-root et souhaitez créer 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

Détermine 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 configuré pour la première fois. Vous pouvez forcer une mise à jour en définissant ceci 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 au départ. Essayez de supprimer le fichier .my.cnf dans le mysql_user_home configuré ou de le mettre à jour en définissant password='' (le mot de passe par défaut non sécurisé). Exécutez de nouveau le playbook, avec mysql_root_password_update défini sur yes, et l'installation devrait se terminer.

Remarque : Si vous obtenez une erreur comme ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES) lors de la tentative de connexion depuis la CLI, vous devrez peut-être exécuter en tant que root ou sudoer.

mysql_enabled_on_startup: true

Indique 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

Indique si le my.cnf global doit être remplacé à chaque exécution de ce rôle. Le définir sur no indique à Ansible de créer le fichier my.cnf uniquement s'il n'existe pas. Cela doit rester à 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 doivent remplacer 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" optionnel peut forcer la mise à jour du fichier à chaque exécution d'Ansible.

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 ces variables sont identiques à ceux du 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 sur absent (valeur 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 clair ou crypté—si crypté, définissez encrypted: yes)
  • encrypted (valeur par défaut no)
  • priv (valeur par défaut *.*:USAGE)
  • append_privs (valeur par défaut no)
  • state (valeur par défaut present)

Les formats de ces variables sont identiques à ceux du module mysql_user.

mysql_packages:
  - mysql
  - mysql-server

(Dépend des OS, valeurs par défaut pour RedHat/CentOS ici) Paquets à installer. Dans certains cas, vous devrez peut-être ajouter des paquets supplémentaires, comme mysql-devel.

mysql_enablerepo: ""

(uniquement pour RedHat/CentOS) Si vous avez activé des référentiels supplémentaires (je suggérerais 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 voulez installer des versions plus récentes de MySQL.

mysql_python_package_debian: python3-mysqldb

(uniquement pour Ubuntu/Debian) Si vous devez explicitement remplacer le paquet Python de MySQL, vous pouvez le définir ici. Définissez-le sur python-mysqldb si vous utilisez d'anciennes distributions avec 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 de la journalisation MySQL. Définir mysql_log (le journal des requêtes générales) ou mysql_log_error sur syslog fera en sorte que MySQL se journalise dans 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"
...

Les autres paramètres dans defaults/main.yml contrôlent l'utilisation de mémoire de MySQL et d'autres paramètres courants. Les valeurs par défaut sont ajustées pour un serveur où MySQL peut consommer 512 Mo de RAM, donc vous devriez envisager de les ajuster en fonction de 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 serait ID 1, avec le mysql_replication_role de master, et l'esclave serait ID 2, avec le mysql_replication_role de slave). Le mysql_replication_user utilise les mêmes clés que les éléments individuels de mysql_users, et est créé sur les serveurs maîtres, utilisé pour répliquer sur tous les esclaves.

mysql_replication_master doit résoudre à une adresse IP ou un nom d'hôte accessible par les esclaves (cela peut être une injection dans /etc/hosts ou un autre moyen), sinon les esclaves ne peuvent pas communiquer avec le maître.

Si le maître de réplication a des adresses IP différentes de celles où vous exécutez ansible et où la réplique MySQL s'exécute, 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).

mysql_hide_passwords: false

Avez-vous besoin de cacher la sortie des tâches qui contient des mots de passe pendant l'exécution ?

Versions ultérieures de MySQL sur CentOS 7

Si vous souhaitez installer MySQL à partir du 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+, l'engine de base de données mariadb a remplacé le paquet MySQL par défaut. Aucune modification n'est nécessaire bien que toutes les variables référencent encore 'mysql' au lieu de mariadb.

Configuration de MariaDB sur Ubuntu 14.04 et 16.04

Sur Ubuntu, les noms de paquets 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 installé ansible (par exemple pip3 install ansible), aucune.

Si vous avez seulement installé ansible-core, assurez-vous de demander 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 geerlingguy.mysql
Licence
mit
Téléchargements
4.5M
Propriétaire
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns