diff --git a/.travis.yml b/.travis.yml index abe4801..3aa115f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,12 @@ env: - - PLATFORM='docker-stretch-default-master' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-stretch-upstream-master' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-stretch-default-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-stretch-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7' - - PLATFORM='docker-stretch-default-master' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-stretch-upstream-master' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-stretch-default-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-stretch-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8' - - PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8' + - PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.8,<2.9' + - PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.8,<2.9' + - PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.8,<2.9' + - PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.8,<2.9' + - PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.9,<2.10' + - PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.9,<2.10' + - PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.9,<2.10' + - PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.9,<2.10' sudo: required diff --git a/README.md b/README.md index 4bb4f97..e136c17 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,6 @@ Install and configure MariaDB (Galera Cluster). Manage replication (master/slave | OS | Origin | MariaDB versions | | --------------- | --------- | ------------------------- | -| Debian Stretch | Debian | 10.1 | -| Debian Stretch | Upstream | 10.1 / 10.2 / 10.3 / 10.4 | | Debian Buster | Debian | 10.3 | | Debian Buster | Upstream | 10.3 / 10.4 | @@ -18,12 +16,11 @@ Notes * Galera Cluster is experimental * Due to Vagrant + Docker limitation (private network), replication/galera can't be checked with Travis * If you need to test this role with Vagrant, you must install hostmanager plugin: `vagrant plugin install vagrant-hostmanager` -* Percona Xtrabackup is not available in upstream repository. This feature is disabled in the role. Requirements ------------ -Ansible 2.5+ +Ansible 2.8+ Role Variables -------------- @@ -32,8 +29,6 @@ Role Variables ### Configuration -- `mariadb_root_password`: root password (should be protected with [vault](http://docs.ansible.com/playbooks_vault.html)) - If you need a feature you can't configure, you can use this list. These config will go to `/etc/mysql/conf.d/01-extra`. - `mariadb_extra_config`: key/value hash see [default vars file](defaults/main.yml) @@ -64,8 +59,6 @@ Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.co - `mariadb_version`: depends Debian version - `mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](https://downloads.mariadb.org/mariadb/repositories)) -- `mariadb_percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) -- `mariadb_use_percona_apt`: Force using Percona APT repository (useful when you want to use latest version of percona toolkits, xtrabackup... etc) Dependencies ------------ diff --git a/Vagrantfile b/Vagrantfile index 55c820e..1f5352b 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -5,8 +5,6 @@ Vagrant.configure("2") do |config| - vbox_deb_stretch = 'debian/stretch64' - dk_deb_stretch = 'hanxhx/vagrant-ansible:debian9' vbox_deb_buster = 'debian/buster64' dk_deb_buster = 'hanxhx/vagrant-ansible:debian10' @@ -17,39 +15,17 @@ Vagrant.configure("2") do |config| config.hostmanager.include_offline = false cases = [ - # ======================== - # Debian Stretch - # ======================== - - # Default replication - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'default' }, groups: ['master'] }, - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['slave'] }, - - # Upstream replication - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'upstream' }, groups: ['master'] }, - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['slave'] }, - - # Galera Debian - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'default' }, groups: ['galera', '1'] }, - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['galera', '2'] }, - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['galera', '3'] }, - - # Galera Upstream - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '1'] }, - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '2'] }, - { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '3'] }, - # ======================== # Debian Buster # ======================== # Default replication { os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'default' }, groups: ['master'] }, -# { os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['slave'] }, + { os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['slave'] }, # Upstream replication { os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'upstream' }, groups: ['master'] }, -# { os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['slave'] }, + { os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['slave'] }, # Galera Debian { os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'default' }, groups: ['galera', '1'] }, diff --git a/defaults/main.yml b/defaults/main.yml index 1dc087d..86ad476 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -5,24 +5,19 @@ # ------------------------------------- mariadb_origin: 'default' mariadb_use_galera: false -mariadb_root_password: 'change_me_NOW' mariadb_notify_restart: true mariadb_upstream_apt_src: false -mariadb_manage_logrotate: true # ------------------------------------- # Configuration # ------------------------------------- -# MariaDB configuration template -mariadb_config_template: 'etc/mysql/my.cnf.j2' - # MariaDB connection settings. mariadb_port: "3306" mariadb_bind_address: '127.0.0.1' mariadb_datadir: '/var/lib/mysql' -mariadb_pid_file: '/var/run/mysqld/mysqld.pid' -mariadb_socket: '/var/run/mysqld/mysqld.sock' +mariadb_pid_file: '/run/mysqld/mysqld.pid' +mariadb_socket: '/run/mysqld/mysqld.sock' # Slow query log settings. mariadb_slow_query_log_enabled: false @@ -30,37 +25,38 @@ mariadb_slow_query_log_file: '/var/log/mysql/mysql_slow.log' mariadb_slow_query_time: 2 # Memory settings (default values optimized ~512MB RAM). +# Fine Tuning mariadb_key_buffer_size: '256M' mariadb_max_allowed_packet: '64M' -mariadb_table_open_cache: '256' -mariadb_sort_buffer_size: '1M' +mariadb_max_connections: 100 +mariadb_thread_concurrency: "{{ ansible_processor_cores * 2 }}" + + +mariadb_table_open_cache: '2000' +mariadb_sort_buffer_size: '2M' mariadb_read_buffer_size: '1M' -mariadb_read_rnd_buffer_size: '4M' -mariadb_myisam_sort_buffer_size: '64M' -mariadb_thread_cache_size: '8' +mariadb_read_rnd_buffer_size: '2M' +mariadb_myisam_sort_buffer_size: '128M' +mariadb_thread_cache_size: '256' mariadb_query_cache_size: '16M' # Other settings. mariadb_wait_timeout: 28800 -# Try number of CPU's * 2 for thread_concurrency. -mariadb_thread_concurrency: "{{ ansible_processor_cores * 2 }}" - # InnoDB settings. -mariadb_innodb_file_per_table: '1' mariadb_innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.2) | round | int }}M" mariadb_innodb_log_file_size: "64M" # If this setting changes on a running system, you will break it! http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html mariadb_innodb_log_buffer_size: '8M' mariadb_innodb_flush_log_at_trx_commit: '1' mariadb_innodb_lock_wait_timeout: 50 -# mysqldump settings. -mariadb_mysqldump_max_allowed_packet: '64M' - # Logging settings. mariadb_log_error: '/var/log/mysql/mysql_error.log' mariadb_syslog_tag: 'mysql' +# mysqldump settings. +mariadb_mysqldump_max_allowed_packet: '64M' + # ------------------------------------- # Extra configuration # ------------------------------------- @@ -101,8 +97,6 @@ mariadb_slave_import_data: true mariadb_slave_import_from: "{{ mariadb_replication_host }}" # Delete dump after slave configuration (set false if you have many slaves to install, it avoids to create many dumps) mariadb_slave_import_flush_dump: true -# Slave uses mysql database from master? -mariadb_slave_replicate_mysqldb: true # Don't replicate these DBs/tables mariadb_slave_ignore_db: [] mariadb_slave_ignore_table: [] @@ -139,11 +133,3 @@ mariadb_wsrep_node_address: false # Set primary node IP mariadb_galera_members: [] mariadb_galera_primary_node: 'change_me' # See: https://github.com/ansible/ansible/issues/17453 mariadb_wsrep_stt_method: 'rsync' - -# ------------------------------------- -# Percona -# ------------------------------------- -mariadb_percona_repository: 'http://repo.percona.com/apt' -mariadb_use_percona_apt: false -mariadb_install_xtrabackup_package: false -mariadb_xtrabackup_package: "{{ mariadb_default_xtrabackup_package }}" diff --git a/meta/main.yml b/meta/main.yml index 8c642db..8ea72f6 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -4,11 +4,10 @@ galaxy_info: description: Install and configure MariaDB (and Galera Cluster) on Debian company: license: GPLv2 - min_ansible_version: 2.5 + min_ansible_version: 2.8 platforms: - name: Debian versions: - - stretch - buster galaxy_tags: - database @@ -19,6 +18,5 @@ galaxy_info: - debian - galera - cluster - - stretch dependencies: [] diff --git a/tasks/galera/main.yml b/tasks/galera/main.yml index 89efc79..a4a1c09 100644 --- a/tasks/galera/main.yml +++ b/tasks/galera/main.yml @@ -2,8 +2,8 @@ - name: TEMPLATE | Deploy Galera configuration template: - src: etc/mysql/conf.d/09-galera.cnf.j2 - dest: /etc/mysql/conf.d/09-galera.cnf + src: etc/mysql/mariadb.conf.d/20-galera.cnf.j2 + dest: /etc/mysql/mariadb.conf.d/20-galera.cnf register: galeraconfig - name: INCLUDE | Bootstrap first node diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 6f79cdf..e34ab01 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -1,9 +1,5 @@ --- -- name: INCLUDE | Setup Percona repository - import_tasks: 'percona/apt.yml' - when: mariadb_use_percona_apt | bool - - name: INCLUDE | Setup MariaDB repository import_tasks: 'mariadb/upstream.yml' when: mariadb_origin == 'upstream' @@ -15,8 +11,3 @@ apt: pkg: "{{ mariadb_tools }}" install_recommends: no - -- name: APT | Install percona-xtrabackup if needed - apt: - pkg: "{{ mariadb_xtrabackup_package }}" - when: mariadb_install_xtrabackup_package | bool diff --git a/tasks/install/mariadb/default.yml b/tasks/install/mariadb/default.yml index 749cb49..993ce1c 100644 --- a/tasks/install/mariadb/default.yml +++ b/tasks/install/mariadb/default.yml @@ -1,26 +1,5 @@ --- -- name: SHELL | Get MariaDB target version - shell: "LANG=C apt-cache depends mariadb-server | awk -F '-' '/Depends/ { print $NF }'" - register: apt_mariadb_version - changed_when: false - -- name: DEBCONF | Prepare MariaDB silent installation (root password) - debconf: - name: 'mariadb-server-{{ apt_mariadb_version.stdout }}' - question: 'mysql-server/root_password' - vtype: 'password' - value: '{{ mariadb_root_password }}' - when: not mariadb_exists.stat.exists - -- name: DEBCONF | Prepare MariaDB silent installation (root password again) - debconf: - name: 'mariadb-server-{{ apt_mariadb_version.stdout }}' - question: 'mysql-server/root_password_again' - vtype: 'password' - value: '{{ mariadb_root_password }}' - when: not mariadb_exists.stat.exists - - name: APT | Install MariaDB server apt: pkg: mariadb-server diff --git a/tasks/install/percona/apt.yml b/tasks/install/percona/apt.yml deleted file mode 100644 index 28a7668..0000000 --- a/tasks/install/percona/apt.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- - -- name: APT | Install Percona repository - apt: - deb: https://repo.percona.com/apt/percona-release_latest.generic_all.deb - -- name: COMMAND | Enable percona tools repository - command: percona-release enable tools release - args: - creates: /etc/apt/sources.list.d/percona-tools-release.list - register: p - -- name: APT | Update cache - apt: - update_cache: yes - when: p.changed diff --git a/tasks/main.yml b/tasks/main.yml index 67ad4f8..b10fcd9 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,13 +1,5 @@ --- -- block: - - - name: SET_FACT | Bypass https://github.com/ansible/ansible/issues/19874 - set_fact: - ansible_distribution_release: 'buster' - - when: ansible_facts.distribution_major_version == "buster/sid" - - name: INCLUDE_VARS | Related to OS version include_vars: "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml" @@ -20,35 +12,27 @@ - name: INCLUDE | Install import_tasks: install/main.yml -- name: TEMPLATE | Deploy configuration +- name: TEMPLATE | Deploy config files template: - src: "{{ mariadb_config_template }}" - dest: /etc/mysql/my.cnf + src: "{{ item }}" + dest: "/{{ item | replace('.j2', '') }}" + loop: + - etc/mysql/my.cnf + - etc/mysql/conf.d/mysqldump.cnf.j2 + - etc/mysql/mariadb.conf.d/10-extra.cnf.j2 + - etc/mysql/mariadb.conf.d/50-client.cnf.j2 + - etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf.j2 + - etc/mysql/mariadb.conf.d/50-server.cnf.j2 register: config -- name: TEMPLATE | Deploy extra configuration - template: - src: etc/mysql/conf.d/10-extra.cnf.j2 - dest: /etc/mysql/conf.d/10-extra.cnf - register: extraconfig - - name: SERVICE | Restart now (prevent bugs) service: name: mysql state: restarted when: - (config.changed or extraconfig.changed) and + config.changed and not mariadb_galera_resetup -- name: TEMPLATE Create .my.cnf for root - template: - src: root/my.cnf - dest: /root/.my.cnf - owner: root - group: root - mode: 0600 - backup: yes - - name: INCLUDE | Galera import_tasks: galera/main.yml when: mariadb_use_galera @@ -80,9 +64,3 @@ host_all: "{{ item.host_all | default(omit) }}" state: present loop: "{{ mariadb_users }}" - -- name: TEMPLATE | Deploy logrotate configuration - template: - src: "etc/logrotate.d/mysql-server.j2" - dest: "/etc/logrotate.d/mysql-server" - when: mariadb_manage_logrotate | bool diff --git a/tasks/replication/master.yml b/tasks/replication/master.yml index 3cd904e..5bd3e70 100644 --- a/tasks/replication/master.yml +++ b/tasks/replication/master.yml @@ -2,6 +2,6 @@ - name: TEMPLATE | Deploy master configuration template: - src: etc/mysql/conf.d/50-master.cnf.j2 - dest: /etc/mysql/conf.d/50-master.cnf + src: etc/mysql/mariadb.conf.d/40-master.cnf.j2 + dest: /etc/mysql/mariadb.conf.d/40-master.cnf notify: restart mariadb diff --git a/tasks/replication/slave.yml b/tasks/replication/slave.yml index 3eb9bd9..a1fbff1 100644 --- a/tasks/replication/slave.yml +++ b/tasks/replication/slave.yml @@ -8,8 +8,8 @@ - name: TEMPLATE | Deploy slave configuration template: - src: etc/mysql/conf.d/51-slave.cnf.j2 - dest: /etc/mysql/conf.d/51-slave.cnf + src: etc/mysql/mariadb.conf.d/40-slave.cnf.j2 + dest: /etc/mysql/mariadb.conf.d/40-slave.cnf notify: restart mariadb - name: MYSQL_REPLICATION | Get slave status @@ -18,27 +18,16 @@ ignore_errors: yes register: slave_status -- name: INCLUDE | Transfert /etc/mysql/debian.cnf from master - import_tasks: slave/ssh.yml - when: mariadb_slave_replicate_mysqldb or ((slave_status.failed is defined or not slave_status.Is_Slave) and mariadb_slave_import_data) - - name: INCLUDE | Import data import_tasks: slave/import_data.yml - when: (slave_status.failed is defined or not slave_status.Is_Slave) and mariadb_slave_import_data + when: (slave_status.failed or not slave_status.Is_Slave) and mariadb_slave_import_data -- name: INCLUDE | Configure replication - import_tasks: slave/replication.yml - when: (slave_status.failed is defined or not slave_status.Is_Slave) or mariadb_slave_force_setup - -- name: INCLUDE | Transfert /etc/mysql/debian.cnf from master - import_tasks: slave/debiancnf.yml - when: mariadb_slave_replicate_mysqldb +- name: Configure GTID Recplication + import_tasks: slave/gtid.yml + when: slave_status.failed or not slave_status.Is_Slave or mariadb_slave_force_setup - name: MYSQL_REPLICATION | Get slave status mysql_replication: mode: getslave ignore_errors: yes register: slave_status - -- name: Configure GTID - import_tasks: slave/gtid.yml diff --git a/tasks/replication/slave/debiancnf.yml b/tasks/replication/slave/debiancnf.yml deleted file mode 100644 index efc90ea..0000000 --- a/tasks/replication/slave/debiancnf.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- - -- name: FETCH | Get /etc/mysql/debian.cnf on master - fetch: - src: /etc/mysql/debian.cnf - dest: /tmp/{{ mariadb_slave_import_from }}/debian.cnf - flat: yes - changed_when: false - delegate_to: "{{ mariadb_slave_import_from }}" - -- name: LOCAL_ACTION FILE | Secure fetched file - local_action: - module: file - path: "/tmp/{{ mariadb_slave_import_from }}/debian.cnf" - mode: 0600 - become: no - -- name: COPY | Fetched file to /etc/mysql/debian.cnf - copy: - src: "/tmp/{{ mariadb_slave_import_from }}/debian.cnf" - dest: /etc/mysql/debian.cnf - owner: root - group: root - mode: 0600 - notify: restart mariadb diff --git a/tasks/replication/slave/gtid.yml b/tasks/replication/slave/gtid.yml index f1b1197..73ab399 100644 --- a/tasks/replication/slave/gtid.yml +++ b/tasks/replication/slave/gtid.yml @@ -1,15 +1,25 @@ --- -# Need this hack before: -# - https://github.com/ansible/ansible/issues/29214 -# - https://mariadb.com/kb/en/mariadb/global-transaction-id/#switching-an-existing-old-style-slave-to-use-gtid - - name: MYSQL_REPLICATION | Stop slave mysql_replication: mode: stopslave -- name: COMMAND | Migrate to MariaDB GTID +- name: MYSQL_REPLICATION | Configure master host + mysql_replication: + mode: changemaster + master_host: "{{ mariadb_replication_host }}" + master_port: "{{ mariadb_replication_port }}" + master_user: "{{ mariadb_replication_user }}" + master_password: "{{ mariadb_replication_password }}" + +# -- Wait this PR in Ansible released version (https://github.com/ansible/ansible/pull/62648) +# name: MYSQL_REPLICATION | Setup replication with GTID +# mysql_replication: +# master_use_gtid: current_pos + +- name: COMMAND | Configure GTID command: mariadb -e "CHANGE MASTER TO master_use_gtid=current_pos"; + changed_when: true - name: MYSQL_REPLICATION | Start slave mysql_replication: diff --git a/tasks/replication/slave/import_data.yml b/tasks/replication/slave/import_data.yml index 4f1204b..1a26208 100644 --- a/tasks/replication/slave/import_data.yml +++ b/tasks/replication/slave/import_data.yml @@ -1,39 +1,51 @@ --- -# Doc: https://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_gtid.html -- name: WAIT_FOR | source data (prevent rsync bug) - TODO find another hack - wait_for: - host: "{{ mariadb_slave_import_from }}" - port: 22 - -- name: COMMAND | Prepare backup another server - command: innobackupex --no-timestamp {{ mariadb_backup_dir }} - args: - creates: "{{ mariadb_backup_dir }}" - delegate_to: "{{ mariadb_slave_import_from }}" - register: backup - -- name: SHELL | Dump - shell: "innobackupex --apply-log {{ mariadb_backup_dir }}" - delegate_to: "{{ mariadb_slave_import_from }}" - when: backup.changed - -- name: FILE | Remove mysql db from backup +- name: FILE | Create SSH client dir file: - path: "{{ mariadb_backup_dir }}/mysql" - state: absent + path: "{{ ansible_env.HOME }}/.ssh" + state: directory + mode: 0700 + +- name: OPENSSH_KEYPAIR | Create SSH key + openssh_keypair: + path: "{{ ansible_env.HOME }}/.ssh/id_rsa" + register: gen_ssh + +- block: + + - name: AUTHORIZED_KEY | Auth slave to backup host + authorized_key: + user: "{{ mariadb_backup_user }}" + state: present + key: "{{ gen_ssh.public_key }}" + + - name: FILE | Create backup directory + file: + path: "{{ mariadb_backup_dir }}" + state: directory + + - name: COMMAND | Prepare backup another server + command: "mariabackup --backup -u root --target-dir={{ mariadb_backup_dir }}" + args: + creates: "{{ mariadb_backup_dir }}/xtrabackup_info" + register: backup + + - name: SHELL | Dump + shell: "mariabackup --prepare --target-dir={{ mariadb_backup_dir }}" + when: backup.changed + register: prep + changed_when: "'This target seems to be not prepared yet' in prep.stderr" + delegate_to: "{{ mariadb_slave_import_from }}" - when: backup.changed and not mariadb_slave_replicate_mysqldb - name: MYSQL_VARIABLES | Get datadir mysql_variables: variable: datadir register: datadir -- name: SET_FACT | related to mysql datadir +- name: SET_FACT | Get MariaDB datadir set_fact: mariadb_datadir: "{{ datadir.msg }}" - mariadb_binlog_info: "{{ datadir.msg }}/xtrabackup_binlog_info" - name: SERVICE | Stop MariaDB before importing data service: @@ -53,29 +65,17 @@ group: mysql recurse: yes +- name: SHELL | Remove InnoDB redo logs + shell: "rm -f {{ mariadb_datadir }}/ib_logfile*" + args: + removes: "{{ mariadb_datadir }}/ib_logfile0" + warn: false + - name: SERVICE | Start MariaDB service: name: mysql state: started -- name: SHELL | Get master_log_file - command: "awk '{ print $1 }' {{ mariadb_binlog_info }}" - register: master_log_file - -- name: SHELL | Get master_log_pos - command: "awk '{ print $2 }' {{ mariadb_binlog_info }}" - register: master_log_pos - -- name: SHELL | Get master GTID - command: "awk '{ print $3 }' {{ mariadb_binlog_info }}" - register: master_gtid - -- name: SET_FACT | master_log_file - set_fact: - mariadb_master_log_file: "{{ master_log_file.stdout }}" - mariadb_master_log_pos: "{{ master_log_pos.stdout }}" - mariadb_master_gtid: "{{ master_gtid.stdout }}" - - name: FILE | Delete dump file: path: "{{ mariadb_backup_dir }}" diff --git a/tasks/replication/slave/ssh.yml b/tasks/replication/slave/ssh.yml deleted file mode 100644 index fdce042..0000000 --- a/tasks/replication/slave/ssh.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- - -- name: SHELL | Create SSH key if needed on slave - shell: "ssh-keygen -b 2048 -t rsa -f {{ ansible_env.HOME }}/.ssh/id_rsa -q -N ''" - args: - creates: "{{ ansible_env.HOME }}/.ssh/id_rsa" - -- name: COMMAND | Get pub key - command: cat {{ ansible_env.HOME }}/.ssh/id_rsa.pub - register: pub_key - changed_when: false - -- name: AUTHORIZED_KEY | Auth slave to backup host - authorized_key: - user: "{{ mariadb_backup_user }}" - state: present - key: "{{ pub_key.stdout }}" - delegate_to: "{{ mariadb_slave_import_from }}" - become: yes diff --git a/tasks/secure.yml b/tasks/secure.yml index 53b8d6d..9f1b5c4 100644 --- a/tasks/secure.yml +++ b/tasks/secure.yml @@ -1,16 +1,5 @@ --- -- name: MYSQL_USER | Update mysql root password for all root accounts - mysql_user: - name: root - host: "{{ item }}" - password: "{{ mariadb_root_password }}" - loop: - - "{{ ansible_hostname }}" - - 127.0.0.1 - - ::1 - - localhost - - name: MYSQL_USER | Remove all anonymous users mysql_user: name: '' diff --git a/templates/etc/apt/preferences.d/95-percona.j2 b/templates/etc/apt/preferences.d/95-percona.j2 deleted file mode 100644 index 9d9e3bc..0000000 --- a/templates/etc/apt/preferences.d/95-percona.j2 +++ /dev/null @@ -1,6 +0,0 @@ -# {{ ansible_managed }} - -Explanation: Prevent Debian upgrades on percona packages -Package: * -Pin: release o=Percona Development Team -Pin-Priority: 1001 diff --git a/templates/etc/mysql/conf.d/mysqldump.cnf.j2 b/templates/etc/mysql/conf.d/mysqldump.cnf.j2 new file mode 100644 index 0000000..47fb08a --- /dev/null +++ b/templates/etc/mysql/conf.d/mysqldump.cnf.j2 @@ -0,0 +1,4 @@ +[mysqldump] +quick +quote-names +max_allowed_packet = {{ mariadb_mysqldump_max_allowed_packet }} diff --git a/templates/etc/mysql/conf.d/10-extra.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/10-extra.cnf.j2 similarity index 100% rename from templates/etc/mysql/conf.d/10-extra.cnf.j2 rename to templates/etc/mysql/mariadb.conf.d/10-extra.cnf.j2 diff --git a/templates/etc/mysql/conf.d/09-galera.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/20-galera.cnf.j2 similarity index 92% rename from templates/etc/mysql/conf.d/09-galera.cnf.j2 rename to templates/etc/mysql/mariadb.conf.d/20-galera.cnf.j2 index 9d6b22e..fbd9885 100644 --- a/templates/etc/mysql/conf.d/09-galera.cnf.j2 +++ b/templates/etc/mysql/mariadb.conf.d/20-galera.cnf.j2 @@ -29,6 +29,3 @@ binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 innodb_doublewrite=1 -{% if mariadb_version == '10.0'%} -query_cache_size=0 -{% endif %} diff --git a/templates/etc/mysql/conf.d/50-master.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/40-master.cnf.j2 similarity index 99% rename from templates/etc/mysql/conf.d/50-master.cnf.j2 rename to templates/etc/mysql/mariadb.conf.d/40-master.cnf.j2 index 6b67a25..8a01bae 100644 --- a/templates/etc/mysql/conf.d/50-master.cnf.j2 +++ b/templates/etc/mysql/mariadb.conf.d/40-master.cnf.j2 @@ -2,7 +2,6 @@ # {{ ansible_managed }} # -# # Replication master [mysqld] diff --git a/templates/etc/mysql/conf.d/51-slave.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/40-slave.cnf.j2 similarity index 82% rename from templates/etc/mysql/conf.d/51-slave.cnf.j2 rename to templates/etc/mysql/mariadb.conf.d/40-slave.cnf.j2 index 98b9586..9c26154 100644 --- a/templates/etc/mysql/conf.d/51-slave.cnf.j2 +++ b/templates/etc/mysql/mariadb.conf.d/40-slave.cnf.j2 @@ -12,9 +12,6 @@ read-only {% endif %} # --> Ignore DB/tables -{% if not mariadb_slave_replicate_mysqldb %} -replicate-ignore-db=mysql -{% endif %} {% for db in mariadb_slave_ignore_db %} replicate-ignore-db={{ db }} {% endfor %} diff --git a/templates/etc/mysql/mariadb.conf.d/50-client.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/50-client.cnf.j2 new file mode 100644 index 0000000..2cda0b0 --- /dev/null +++ b/templates/etc/mysql/mariadb.conf.d/50-client.cnf.j2 @@ -0,0 +1,29 @@ +# +# {{ ansible_managed }} +# + +# +# This group is read by the client library +# Use it for options that affect all clients, but not the server +# + +[client] +# Default is Latin1, if you need UTF-8 set this (also in server section) +default-character-set = utf8mb4 + +# socket location +socket = {{ mariadb_socket }} + +# Example of client certificate usage +# ssl-cert=/etc/mysql/client-cert.pem +# ssl-key=/etc/mysql/client-key.pem +# +# Allow only TLS encrypted connections +# ssl-verify-server-cert=on + +# This group is *never* read by mysql client library, though this +# /etc/mysql/mariadb.cnf.d/client.cnf file is not read by Oracle MySQL +# client anyway. +# If you use the same .cnf file for MySQL and MariaDB, +# use it for MariaDB-only client options +[client-mariadb] diff --git a/templates/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf.j2 new file mode 100644 index 0000000..3af1f6c --- /dev/null +++ b/templates/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf.j2 @@ -0,0 +1,34 @@ +# +# {{ ansible_managed }} +# + +# NOTE: This file is read only by the traditional SysV init script, not systemd. +# MariaDB systemd does _not_ utilize mysqld_safe nor read this file. +# +# For similar behaviour, systemd users should create the following file: +# /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf +# +# To achieve the same result as the default 50-mysqld_safe.cnf, please create +# /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf +# with the following contents: +# +# [Service] +# User=mysql +# StandardOutput=syslog +# StandardError=syslog +# SyslogFacility=daemon +# SyslogLevel=err +# SyslogIdentifier=mysqld +# +# For more information, please read https://mariadb.com/kb/en/mariadb/systemd/ +# + +[mysqld_safe] +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# especially if they contain "#" chars... +# Remember to edit /etc/mysql/debian.cnf when changing the socket location. +socket = {{ mariadb_socket }} +nice = 0 +skip_log_error +syslog diff --git a/templates/etc/mysql/mariadb.conf.d/50-server.cnf.j2 b/templates/etc/mysql/mariadb.conf.d/50-server.cnf.j2 new file mode 100644 index 0000000..1b6a70e --- /dev/null +++ b/templates/etc/mysql/mariadb.conf.d/50-server.cnf.j2 @@ -0,0 +1,163 @@ +# +# {{ ansible_managed }} +# + +# +# These groups are read by MariaDB server. +# Use it for options that only the server (but not clients) should see +# +# See the examples of server my.cnf files in /usr/share/mysql + +# this is read by the standalone daemon and embedded servers +[server] + +# this is only for the mysqld standalone daemon +[mysqld] + +# +# * Basic Settings +# +user = mysql +pid-file = {{ mariadb_pid_file }} +socket = {{ mariadb_socket }} +port = {{ mariadb_port }} +basedir = /usr +datadir = {{ mariadb_datadir }} +tmpdir = /tmp +lc-messages-dir = /usr/share/mysql +#skip-external-locking + +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +bind-address = {{ mariadb_bind_address }} + +# +# * Fine Tuning +# +key_buffer_size = {{ mariadb_key_buffer_size }} +max_allowed_packet = {{ mariadb_max_allowed_packet }} +#thread_stack = 192K +thread_cache_size = {{ mariadb_thread_cache_size }} +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched +#myisam_recover_options = BACKUP +max_connections = {{ mariadb_max_connections }} +#table_cache = 64 +thread_concurrency = {{ mariadb_thread_concurrency }} + +# Other tuning setting +table_open_cache = {{ mariadb_table_open_cache }} +sort_buffer_size = {{ mariadb_sort_buffer_size }} +read_buffer_size = {{ mariadb_read_buffer_size }} +read_rnd_buffer_size = {{ mariadb_read_rnd_buffer_size }} +myisam_sort_buffer_size = {{ mariadb_myisam_sort_buffer_size }} + +# +# * Query Cache Configuration +# +query_cache_size = {{ mariadb_query_cache_size }} + +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /var/log/mysql/mysql.log +#general_log = 1 +# +# Error log - should be very few entries. +# +{% if mariadb_log_error == 'syslog' %} +syslog +syslog-tag = {{ mariadb_syslog_tag }} +{% else %} +log-error = {{ mariadb_log_error }} +{% endif %} + +# +# Enable the slow query log to see queries with especially long duration +#slow_query_log_file = /var/log/mysql/mariadb-slow.log +#long_query_time = 10 +#log_slow_rate_limit = 1000 +#log_slow_verbosity = query_plan +#log-queries-not-using-indexes +{% if mariadb_slow_query_log_enabled %} +slow_query_log_file = {{ mariadb_slow_query_log_file }} +long_query_time = {{ mariadb_slow_query_time }} +slow_query_log = 1 +{% endif %} + +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#log_bin = /var/log/mysql/mysql-bin.log +#expire_logs_days = 10 +#max_binlog_size = 100M +#binlog_do_db = include_database_name +#binlog_ignore_db = exclude_database_name + +# +# * Security Features +# +# Read the manual, too, if you want chroot! +#chroot = /var/lib/mysql/ +# +# For generating SSL certificates you can use for example the GUI tool "tinyca". +# +#ssl-ca = /etc/mysql/cacert.pem +#ssl-cert = /etc/mysql/server-cert.pem +#ssl-key = /etc/mysql/server-key.pem +# +# Accept only connections using the latest and most secure TLS protocol version. +# ..when MariaDB is compiled with OpenSSL: +#ssl-cipher = TLSv1.2 +# ..when MariaDB is compiled with YaSSL (default in Debian): +#ssl = on + +# +# * Character sets +# +# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full +# utf8 4-byte character set. See also client.cnf +# +character-set-server = utf8mb4 +collation-server = utf8mb4_general_ci + +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +innodb_file_per_table = 1 +innodb_buffer_pool_size = {{ mariadb_innodb_buffer_pool_size }} +innodb_log_buffer_size = {{ mariadb_innodb_log_buffer_size }} +innodb_flush_log_at_trx_commit = {{ mariadb_innodb_flush_log_at_trx_commit }} +innodb_lock_wait_timeout = {{ mariadb_innodb_lock_wait_timeout }} +innodb_log_file_size = {{ mariadb_innodb_log_file_size }} + + +# +# * Unix socket authentication plugin is built-in since 10.0.22-6 +# +# Needed so the root database user can authenticate without a password but +# only when running as the unix root user. +# +# Also available for other users if required. +# See https://mariadb.com/kb/en/unix_socket-authentication-plugin/ + +# this is only for embedded server +[embedded] + +# This group is only read by MariaDB servers, not by MySQL. +# If you use the same .cnf file for MySQL and MariaDB, +# you can put MariaDB-only options here +[mariadb] + +# This group is only read by MariaDB-10.3 servers. +# If you use the same .cnf file for MariaDB of different versions, +# use this group for options that older servers don't understand +[mariadb-10.3] + diff --git a/templates/etc/mysql/my.cnf b/templates/etc/mysql/my.cnf new file mode 100644 index 0000000..94d8f10 --- /dev/null +++ b/templates/etc/mysql/my.cnf @@ -0,0 +1,23 @@ +# The MariaDB configuration file +# +# The MariaDB/MySQL tools read configuration files in the following order: +# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults, +# 2. "/etc/mysql/conf.d/*.cnf" to set global options. +# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options. +# 4. "~/.my.cnf" to set user-specific options. +# +# If the same option is defined multiple times, the last one will apply. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. + +# +# This group is read both both by the client and the server +# use it for options that affect everything +# +[client-server] + +# Import all .cnf files from configuration directory +!includedir /etc/mysql/conf.d/ +!includedir /etc/mysql/mariadb.conf.d/ diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 deleted file mode 100644 index 590a1c2..0000000 --- a/templates/etc/mysql/my.cnf.j2 +++ /dev/null @@ -1,81 +0,0 @@ -# -# {{ ansible_managed }} -# - -[client] -port = {{ mariadb_port }} -socket = {{ mariadb_socket }} - -[mysqld] -port = {{ mariadb_port }} -bind-address = {{ mariadb_bind_address }} -datadir = {{ mariadb_datadir }} -socket = {{ mariadb_socket }} - -{# TODO: FIX later #} -# Logging configuration. -{% if mariadb_log_error == 'syslog' %} -syslog -syslog-tag = {{ mariadb_syslog_tag }} -{% else %} -log-error = {{ mariadb_log_error }} -{% endif %} - -{% if mariadb_slow_query_log_enabled %} -# Slow query log configuration. -slow_query_log = 1 -slow_query_log_file = {{ mariadb_slow_query_log_file }} -long_query_time = {{ mariadb_slow_query_time }} -{% endif %} - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links = 0 - -# User is ignored when systemd is used (fedora >= 15). -user = mysql - -# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html -;performance_schema - -# Memory settings. -key_buffer_size = {{ mariadb_key_buffer_size }} -max_allowed_packet = {{ mariadb_max_allowed_packet }} -table_open_cache = {{ mariadb_table_open_cache }} -sort_buffer_size = {{ mariadb_sort_buffer_size }} -read_buffer_size = {{ mariadb_read_buffer_size }} -read_rnd_buffer_size = {{ mariadb_read_rnd_buffer_size }} -myisam_sort_buffer_size = {{ mariadb_myisam_sort_buffer_size }} -thread_cache_size = {{ mariadb_thread_cache_size }} -query_cache_size = {{ mariadb_query_cache_size }} - -# Other settings. -wait_timeout = {{ mariadb_wait_timeout }} - -# Try number of CPU's * 2 for thread_concurrency. -thread_concurrency = {{ mariadb_thread_concurrency }} - -# InnoDB settings. -innodb_file_per_table = {{ mariadb_innodb_file_per_table }} -innodb_buffer_pool_size = {{ mariadb_innodb_buffer_pool_size }} -innodb_log_buffer_size = {{ mariadb_innodb_log_buffer_size }} -innodb_flush_log_at_trx_commit = {{ mariadb_innodb_flush_log_at_trx_commit }} -innodb_lock_wait_timeout = {{ mariadb_innodb_lock_wait_timeout }} -{# If this setting changes on a running system, you will break it! #} -{# See how tho change it here: http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html #} -{# TODO FIX -> Maybe detect a change and fail, just to be safe? #} -innodb_log_file_size = {{ mariadb_innodb_log_file_size }} - -[mysqldump] -quick -max_allowed_packet = {{ mariadb_mysqldump_max_allowed_packet }} - -[mysqld_safe] -pid-file = {{ mariadb_pid_file }} - -# -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ - -# vim: set ft=dosini : diff --git a/templates/root/my.cnf b/templates/root/my.cnf deleted file mode 100644 index 8330ef7..0000000 --- a/templates/root/my.cnf +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------ -# {{ ansible_managed }} -# ------------------------------------------ - -[client] -user=root -password="{{ mariadb_root_password }}" diff --git a/tests/README.md b/tests/README.md index c7dd249..7cb07b4 100644 --- a/tests/README.md +++ b/tests/README.md @@ -5,19 +5,19 @@ IMPORTANT --------- - DO NOT `vagrant up`! My Vagrantfile provides many VMs... -- Each slave communicate to his master. You can't mix mysql and mariadb. +- Each slave communicate to his master. Tests ----- -- vagrant up the master -- vagrant up the slave +- vagrant up the-master +- vagrant up the-slave Wait master fully installed before run slave. Example: ``` -vagrant up stretch-upstream-mariadb-master -vagrant up stretch-upstream-mariadb-slave +vagrant up vbox-buster-default-master +vagrant up vbox-buster-default-slave ``` diff --git a/tests/group_vars/all b/tests/group_vars/all index f8aa4d9..eb80c13 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1,6 +1,5 @@ mariadb_bind_address: '0.0.0.0' mariadb_extra_configuration: innodb_commit_concurrency: 0 -mariadb_use_percona_apt: true mariadb_install_xtrabackup_package: true mariadb_slow_query_log_enabled: true diff --git a/tests/test.yml b/tests/test.yml index 5a17d08..c487eb3 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -3,13 +3,16 @@ - hosts: all gather_facts: false pre_tasks: + - name: SETUP | Get facts setup: register: s + - name: DEBUG | Show facts debug: var: s tasks: + - name: APT | Install some packages apt: name: "{{ p }}" @@ -22,11 +25,13 @@ roles: - ../../ tasks: + - name: COPY | Deploy first dump copy: src: import1.sql dest: /tmp/import1.sql register: c + - name: MYSQL_DB | Import first dump mysql_db: name: "{{ item }}" @@ -37,37 +42,47 @@ - hosts: slave pre_tasks: + - name: SHELL | Get master IP shell: getent hosts {{ ansible_hostname | replace ('slave', 'master') }} | cut -d ' ' -f 1 register: ip changed_when: false + - name: SET_FACT | Apply some configuration set_fact: # MariaDB don't read /etc/hosts (from vagrant host plugin) mariadb_replication_host: "{{ ip.stdout }}" # Need this to use vagrant 'delegate_to' mariadb_slave_import_from: "{{ ansible_hostname | replace ('slave', 'master') }}" + roles: - ../../ tasks: - - name: COPY | Deploy dump - copy: - src: import2.sql - dest: /tmp/import2.sql + + - block: + + - name: COPY | Deploy dump + copy: + src: import2.sql + dest: /tmp/import2.sql + delegate_to: "{{ mariadb_slave_import_from }}" + register: c + + - name: MYSQL_DB | Import another dump + mysql_db: + name: "{{ item }}" + state: import + target: /tmp/import2.sql + loop: ['testrepl', 'norepl'] + when: c.changed + delegate_to: "{{ mariadb_slave_import_from }}" - register: c - - name: MYSQL_DB | Import another dump - mysql_db: - name: "{{ item }}" - state: import - target: /tmp/import2.sql - loop: ['testrepl', 'norepl'] - delegate_to: "{{ mariadb_slave_import_from }}" - when: c.changed + - name: MYSQL_REPLICATION | Get slave infos mysql_replication: mode: getslave register: slave + - name: FAIL | if slave threads are not running fail: msg: "Slave issue" @@ -75,14 +90,12 @@ - hosts: galera pre_tasks: - - name: SET_FACT | Bypass https://github.com/ansible/ansible/issues/19874 - set_fact: - ansible_distribution_release: 'buster' - when: ansible_facts.distribution_major_version == "buster/sid" + - name: SET_FACT | Apply some configuration set_fact: mariadb_galera_primary_node: '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-{{ mariadb_origin }}-galera-1' mariadb_wsrep_node_address: "{{ '127.0.0.1' if is_docker else ansible_eth1.ipv4.address }}" mariadb_version: '10.3' + roles: - ../../ diff --git a/vars/Debian-buster.yml b/vars/Debian-buster.yml index 7c7ac53..74cdabf 100644 --- a/vars/Debian-buster.yml +++ b/vars/Debian-buster.yml @@ -1,6 +1,5 @@ mariadb_tools: - - percona-toolkit - - python-mysqldb + - mariadb-backup - mysqltuner - -mariadb_default_xtrabackup_package: 'percona-xtrabackup-24' + - percona-toolkit + - python{% if ansible_python_version is version('3', '>=') %}3{% endif %}-mysqldb diff --git a/vars/Debian-stretch.yml b/vars/Debian-stretch.yml deleted file mode 100644 index 7c7ac53..0000000 --- a/vars/Debian-stretch.yml +++ /dev/null @@ -1,6 +0,0 @@ -mariadb_tools: - - percona-toolkit - - python-mysqldb - - mysqltuner - -mariadb_default_xtrabackup_package: 'percona-xtrabackup-24'