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