pulse-mind.mysql
Rôle Ansible : MySQL
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 lemysql_user_home
configuré, soit de le mettre à jour en définissantpassword=''
(le mot de passe par défaut non sécurisé). Exécutez à nouveau le playbook, avecmysql_root_password_update
défini suryes
, 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éfautlocalhost
)password
(peut être en texte brut ou crypté—si crypté, définirencrypted: yes
)encrypted
(par défautno
)priv
(par défaut*.*:USAGE
)append_privs
(par défautno
)state
(par défautpresent
)
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.
MySQL server for RHEL/CentOS and Debian/Ubuntu.
ansible-galaxy install pulse-mind.mysql