diff --git a/handlers/main.yml b/handlers/main.yml index 432607dee0d1aed6dc9fe51897924020097df615..2c5ddcd7184ff7ca601d8d3a7871e15cce17ae95 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,10 +1,12 @@ --- # file: roles/mysql/handlers/main.yml -- name: MySQL | Restart MySQL - service: name=mysql state=restarted +- name: Restart MySQL + service: + name: mysql + state: restarted -- name: MySQL | Restart MySQL 5.7 +- name: Restart MySQL 5.7 systemd: state: restarted daemon_reload: yes diff --git a/tasks/backup.yml b/tasks/backup.yml index a332248529bbab04f7bcf76cf7190ea18974efb9..9437783dc7a66205547d836360f9aac3b9fc0266 100644 --- a/tasks/backup.yml +++ b/tasks/backup.yml @@ -1,42 +1,42 @@ --- # file: roles/mysql/tasks/backup.yml -- name: MySQL | Backup | Configuration Directory +- name: Backup | Configuration Directory file: - dest=/etc/automysqlbackup - owner=root - group=root - state=directory - mode='775' + dest: /etc/automysqlbackup + owner: root + group: root + state: directory + mode: 0775 -- name: MySQL | Backup | Configuration File +- name: Backup | Configuration File template: - src=automysqlbackup.conf - dest=/etc/automysqlbackup/automysqlbackup.conf - owner=root - group=root - mode='644' + src: automysqlbackup.conf + dest: /etc/automysqlbackup/automysqlbackup.conf + owner: root + group: root + mode: 0644 tags: - backup -- name: MySQL | Backup | Script File +- name: Backup | Script File copy: - src=automysqlbackup.sh - dest=/usr/local/bin/automysqlbackup.sh - owner=root - group=root - mode='755' + src: automysqlbackup.sh + dest: /usr/local/bin/automysqlbackup.sh + owner: root + group: root + mode: 0755 -- name: MySQL | Backup | Cron Tab +- name: Backup | Cron Tab cron: - name="MySQL Backup" - month='{{ mysqlbackup.cron.month|default(omit) }}' - day='{{ mysqlbackup.cron.day|default(omit) }}' - weekday='{{ mysqlbackup.cron.weekday|default(omit) }}' - hour='{{ mysqlbackup.cron.hour|default(omit) }}' - minute='{{ mysqlbackup.cron.minute|default(omit) }}' - job="/usr/local/bin/automysqlbackup.sh >>/var/log/mysql/backup.log 2>&1" - state={{ mysqlbackup.active|ternary('present', 'absent') }} - disabled='{{ crons_disabled|default(false) }}' + name: MySQL Backup + month: '{{ mysqlbackup.cron.month|default(omit) }}' + day: '{{ mysqlbackup.cron.day|default(omit) }}' + weekday: '{{ mysqlbackup.cron.weekday|default(omit) }}' + hour: '{{ mysqlbackup.cron.hour|default(omit) }}' + minute: '{{ mysqlbackup.cron.minute|default(omit) }}' + job: /usr/local/bin/automysqlbackup.sh >>/var/log/mysql/backup.log 2>&1 + state: '{{ mysqlbackup.active|ternary("present", "absent") }}' + disabled: '{{ crons_disabled|default(false) }}' tags: - cron diff --git a/tasks/install.yml b/tasks/install.yml index 1c07e031f080ff8b3c600ad2192791b523d400fc..4e18cf03429d8c907718f1a925dc813c7ba54acb 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -1,60 +1,60 @@ --- # file: roles/mysql/tasks/install.yml -- name: MySQL | Install required packages +- name: Install required packages apt: - pkg='mysql-server' - state='present' + pkg: mysql-server + state: present # The following should also work for the new mechanism of MySQL 5.7 where # the auth plugin for root@localhost is initially set to socket mode. # This uses the pre-hashed default password 'root' which will then be changed # afterwards if required. -- name: MySQL | Initially set root password for localhost +- name: Initially set root password for localhost mysql_user: - user='root' - password='*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' - host='localhost' - check_implicit_admin=yes - priv='*.*:ALL,GRANT' - login_unix_socket='/var/run/mysqld/mysqld.sock' - login_user='root' - encrypted='yes' + user: root + password: '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' + host: localhost + check_implicit_admin: yes + priv: '*.*:ALL,GRANT' + login_unix_socket: /var/run/mysqld/mysqld.sock + login_user: root + encrypted: yes -- name: MySQL | Set real root password for localhost +- name: Set real root password for localhost mysql_user: - user='root' - password='{{ mysql_root_password }}' - host='localhost' - check_implicit_admin=yes - priv='*.*:ALL,GRANT' - login_user='root' - login_password='root' + user: root + password: '{{ mysql_root_password }}' + host: localhost + check_implicit_admin: yes + priv: '*.*:ALL,GRANT' + login_user: root + login_password: root when: mysql_root_password != 'root' -- name: MySQL | Set root password for all hosts +- name: Set root password for all hosts mysql_user: - user='root' - password='{{ mysql_root_password }}' - host='{{ item }}' - append_privs=yes - priv='*.*:ALL,GRANT' - login_user='root' - login_password='{{ mysql_root_password }}' + user: root + password: '{{ mysql_root_password }}' + host: '{{ item }}' + append_privs: yes + priv: '*.*:ALL,GRANT' + login_user: root + login_password: '{{ mysql_root_password }}' with_items: - localhost - 127.0.0.1 - ::1 - {{ inventory_hostname }} - ignore_errors: true + ignore_errors: yes -- name: MySQL | Create root .my.cnf file +- name: Create root .my.cnf file ini_file: - dest='/root/.my.cnf' - create=yes - section='client' - option='{{ item.option }}' - value="'{{ item.value }}'" + dest: /root/.my.cnf + create: yes + section: client + option: '{{ item.option }}' + value: "'{{ item.value }}'" with_items: - option: user value: root diff --git a/tasks/main.yml b/tasks/main.yml index 757215a2fec8aee20f99bfd831eeb5def845b3bf..26fe6e81854d18151d60018fc534727a8e356a27 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -9,108 +9,112 @@ - block: - - name: MySQL | Check for initial installation requirement - shell: which mysqld - register: mysql_available - changed_when: false - failed_when: false - - - import_tasks: install.yml - when: mysql_available.stdout == '' - - - name: MySQL | Update required packages - apt: - pkg='{{ packages }}' - state=present - vars: - packages: - - mysql-server - - mytop - - - name: MySQL | Check version - shell: mysqld --version - register: mysql_version - changed_when: false - failed_when: false - - - name: MySQL | Configure server up to version 5.6 - template: - src='etc-mysql-my-cnf' - dest='/etc/mysql/my.cnf' - owner='root' - group='root' - mode='644' - when: not mysql_version.stdout is match(".* Ver 5\.7.*") - notify: "MySQL | Restart MySQL" - - - name: MySQL | Configure server version 5.7 - template: - src='etc-mysql-mysql-conf-d-mysqld.cnf' - dest='/etc/mysql/mysql.conf.d/mysqld.cnf' - owner='root' - group='root' - mode='644' - when: mysql_version.stdout is match(".* Ver 5\.7.*") - notify: "MySQL | Restart MySQL 5.7" - - - name: MySQL | Configure system services for server version 5.7 - template: - src='etc-systemd-system-mysql.service' - dest='/etc/systemd/system/mysql.service' - owner='root' - group='root' - mode='644' - when: mysql_version.stdout is match(".* Ver 5\.7.*") - notify: "MySQL | Restart MySQL 5.7" - - - name: MySQL | Configure mysqldump - template: - src='etc-mysql-conf-d-mysqldump.cnf' - dest='/etc/mysql/conf.d/mysqldump.cnf' - owner='root' - group='root' - mode='644' - - - import_tasks: user.yml - - - name: MySQL | Remove the MySQL test database - mysql_db: - db='test' - state='absent' - notify: "MySQL | Restart MySQL" - - - import_tasks: master.yml - when: mysql_repl_master - - - import_tasks: slave.yml - when: mysql_repl_slave - - - import_tasks: backup.yml - tags: - - cron - - backup - - - name: MySQL | Copy Tuning Scripts - copy: - src='{{ item }}' - dest='/usr/local/bin/{{ item }}' - owner=root - group=root - mode='755' - with_items: - - mysqltuner.pl - - tuning-primer.sh - - mysql-create-index.py - - pt-query-digest - - - name: MySQL | Logrotate configuration - template: - src='etc-logrotate-d-mysql-server' - dest='/etc/logrotate.d/mysql-server' - owner=root - group=root - mode='644' - tags: - - logrotate + - name: Check for initial installation requirement + shell: which mysqld + register: mysql_available + changed_when: no + failed_when: no + + - import_tasks: install.yml + when: mysql_available.stdout == '' + + - name: Update required packages + apt: + pkg: '{{ packages }}' + state: present + vars: + packages: + - mysql-server + - mytop + + - name: Check version + shell: mysqld --version + register: mysql_version + changed_when: no + failed_when: no + + - name: Configure server up to version 5.6 + template: + src: etc-mysql-my-cnf + dest: /etc/mysql/my.cnf + owner: root + group: root + mode: 0644 + when: not mysql_version.stdout is match(".* Ver 5\.7.*") + notify: + - Restart MySQL + + - name: Configure server version 5.7 + template: + src: etc-mysql-mysql-conf-d-mysqld.cnf + dest: /etc/mysql/mysql.conf.d/mysqld.cnf + owner: root + group: root + mode: 0644 + when: mysql_version.stdout is match(".* Ver 5\.7.*") + notify: + - Restart MySQL 5.7 + + - name: Configure system services for server version 5.7 + template: + src: etc-systemd-system-mysql.service + dest: /etc/systemd/system/mysql.service + owner: root + group: root + mode: 0644 + when: mysql_version.stdout is match(".* Ver 5\.7.*") + notify: + - Restart MySQL 5.7 + + - name: Configure mysqldump + template: + src: etc-mysql-conf-d-mysqldump.cnf + dest: /etc/mysql/conf.d/mysqldump.cnf + owner: root + group: root + mode: 644 + + - import_tasks: user.yml + + - name: Remove the MySQL test database + mysql_db: + db: test + state: absent + notify: + - Restart MySQL + + - import_tasks: master.yml + when: mysql_repl_master + + - import_tasks: slave.yml + when: mysql_repl_slave + + - import_tasks: backup.yml + tags: + - cron + - backup + + - name: Copy Tuning Scripts + copy: + src: '{{ item }}' + dest: /usr/local/bin/{{ item }} + owner: root + group: root + mode: 0755 + with_items: + - mysqltuner.pl + - tuning-primer.sh + - mysql-create-index.py + - pt-query-digest + + - name: Logrotate configuration + template: + src: etc-logrotate-d-mysql-server + dest: /etc/logrotate.d/mysql-server + owner: root + group: root + mode: 0644 + tags: + - logrotate when: not excluded_roles or "mysql" not in excluded_roles diff --git a/tasks/master.yml b/tasks/master.yml index f2c472bc0550d1a7ddc397f5071752ae00ba4fa5..7bb4fd29111ca5a6141b9c9a1ebb350a11a89506 100644 --- a/tasks/master.yml +++ b/tasks/master.yml @@ -1,12 +1,12 @@ --- # file: roles/mysql/tasks/master.yml -- name: MySQL | Master | Define replication user and privileges +- name: Master | Define replication user and privileges mysql_user: - user='repl' - password='{{mysql_repl_password}}' - host='{{item}}' - priv='*.*:REPLICATION SLAVE,REPLICATION CLIENT' + user: repl + password: '{{mysql_repl_password}}' + host: '{{item}}' + priv: '*.*:REPLICATION SLAVE,REPLICATION CLIENT' with_items: - "localhost" - "127.0.0.1" diff --git a/tasks/slave.yml b/tasks/slave.yml index 45c18df2b0975440437b23620fbdac71eed640ed..8c9091fe4356434308606f80b1f9fb842561465b 100644 --- a/tasks/slave.yml +++ b/tasks/slave.yml @@ -1,5 +1,5 @@ --- # file: roles/mysql/tasks/slave.yml -- name: MySQL | Slave | Status +- name: Slave | Status debug: msg="Currently nothing to do yet" diff --git a/tasks/user.yml b/tasks/user.yml index bc58580796980f258c69c3c9fb65530134ed3991..4fe2c36e9579672362015784cf6d7f00cd90d027 100644 --- a/tasks/user.yml +++ b/tasks/user.yml @@ -1,36 +1,39 @@ --- # file: roles/mysql/tasks/user.yml -- name: MySQL | Set the root password for all other domains +- name: Set the root password for all other domains mysql_user: - user='root' - password='{{ mysql_root_password }}' - host='{{ item }}' - check_implicit_admin=yes + user: root + password: '{{ mysql_root_password }}' + host: '{{ item }}' + check_implicit_admin: yes with_items: - localhost - 127.0.0.1 - ::1 - {{ inventory_hostname }} - notify: "MySQL | Restart MySQL" + notify: + - Restart MySQL -- name: MySQL | Delete anonymous MySQL server user for all domains +- name: Delete anonymous MySQL server user for all domains mysql_user: - user='' - host='{{ item }}' - state='absent' + user: '' + host: '{{ item }}' + state: absent with_items: - localhost - 127.0.0.1 - ::1 - {{inventory_hostname}} - notify: "MySQL | Restart MySQL" + notify: + - Restart MySQL -- name: MySQL | Add external users +- name: Add external users mysql_user: - user='{{ item.username }}' - password='{{ item.password }}' - host='%' - check_implicit_admin=yes + user: '{{ item.username }}' + password: '{{ item.password }}' + host: '%' + check_implicit_admin: yes with_items: '{{ mysql_external_users|default([]) }}' - notify: "MySQL | Restart MySQL" + notify: + - Restart MySQL