--- # 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={{ mysql_slave_import_from }} port=22 - name: COMMAND | Prepare backup another server command: innobackupex --no-timestamp {{ mysql_backup_dir }} creates={{ mysql_backup_dir }} delegate_to: "{{ mysql_slave_import_from }}" register: backup - name: SHELL | Dump shell: innobackupex --apply-log {{ mysql_backup_dir }} delegate_to: "{{ mysql_slave_import_from }}" when: backup.changed - name: FILE | Remove mysql db from backup file: path={{ mysql_backup_dir }}/mysql state=absent delegate_to: "{{ mysql_slave_import_from }}" when: backup.changed and not mysql_slave_replicate_mysqldb - name: MYSQL_VARIABLES | Get datadir mysql_variables: variable=datadir register: datadir - name: SET_FACT | related to mysql datadir set_fact: mysql_mysql_datadir: "{{ datadir.msg }}" mysql_binlog_info: "{{ datadir.msg }}/xtrabackup_binlog_info" - name: SERVICE | Stop MySQL before importing data service: name=mysql state=stopped # TODO: add an "ignore warning" - name: COMMAND | Sync backup to slave - TODO remove vagrant as static user (see why mysql_backup_user is not working) shell: "sudo -E rsync --rsync-path='sudo rsync' -a -e 'ssh -o StrictHostKeyChecking=no' {{ mysql_backup_user }}@{{ mysql_slave_import_from }}:{{ mysql_backup_dir }}/ {{ mysql_mysql_datadir }}/" become: no - name: FILE | Re-apply owner file: > path={{ mysql_mysql_datadir }} state=directory owner=mysql group=mysql recurse=yes - name: SERVICE | Start MySQL service: name=mysql state=started - name: SHELL | Get master_log_file command: awk '{ print $1 }' {{ mysql_binlog_info }} register: master_log_file - name: SHELL | Get master_log_pos command: awk '{ print $2 }' {{ mysql_binlog_info }} register: master_log_pos - name: SHELL | Get master GTID command: awk '{ print $3 }' {{ mysql_binlog_info }} register: master_gtid - name: SET_FACT | master_log_file set_fact: mysql_master_log_file: "{{ master_log_file.stdout }}" mysql_master_log_pos: "{{ master_log_pos.stdout }}" mysql_master_gtid: "{{ master_gtid.stdout }}" - name: FILE | Delete dump file: path={{ mysql_backup_dir }} state=absent delegate_to: "{{ mysql_slave_import_from }}" when: mysql_slave_import_flush_dump