--- - debug: msg: "{{ props }}" when: debug - name: "Ensure replication user exists on master" mysql_user: login_unix_socket: /run/mysqld/mysqld.sock login_password: "{{ mysql_root_password }}" name: "{{ mysql_replication_user.name }}" host: "{{ mysql_replication_user.host | default('%') }}" password: "{{ mysql_replication_user.password }}" priv: "{{ mysql_replication_user.priv | default('*.*:REPLICATION SLAVE,REPLICATION CLIENT') }}" state: present when: - props[inventory_hostname].mysql_replication_role == 'master' - mysql_replication_user.name is defined - (mysql_replication_master | length) > 0 - name: "Create temporarily backup user on master instance to dump all DBs" mysql_user: login_unix_socket: /run/mysqld/mysqld.sock login_password: "{{ mysql_root_password }}" name: "{{ mysqldump_creds.username }}" host: "{{ mysqldump_creds.host }}" password: "{{ mysqldump_creds.password }}" priv: "{{ mysqldump_creds.priv }}" state: present when: - props[inventory_hostname].mysql_replication_role == 'master' - import_dump | default(False) # using shell module due to missing SSL-flag in mysql_db module - name: "Dumpall DBs" # delegate_to: "{{ mysql_replication_slave }}" # no_log: True no_log: False shell: "mysqldump -A -h {{ mysql_replication_master }} -u {{ mysqldump_creds.username }} -p{{ mysqldump_creds.password }} --ssl > {{ backup_target }}" register: mysql_dump when: - props[inventory_hostname].mysql_replication_role == 'slave' - import_dump | default(False) - name: "Check slave replication status" mysql_replication: mode: getreplica login_unix_socket: /run/mysqld/mysqld.sock login_password: "{{ mysql_root_password }}" ignore_errors: true register: slaveinfo when: - props[inventory_hostname].mysql_replication_role == 'slave' - (mysql_replication_master | length) > 0 - name: "DEBUG" debug: msg: "return slave: {{ slaveinfo.Is_Replica }}" when: - debug - props[inventory_hostname].mysql_replication_role == 'slave' - slaveinfo is defined - name: "Import dumped DBs from mysql-master" mysql_db: login_unix_socket: /run/mysqld/mysqld.sock login_password: "{{ mysql_root_password }}" state: import name: all target: "{{ backup_target }}" when: - props[inventory_hostname].mysql_replication_role == 'slave' - import_dump | default(False) # TODO SSL TRUST - name: "Check master replication status." mysql_replication: mode: getprimary login_host: "{{ mysql_replication_master }}" login_user: "{{ mysql_replication_user.name }}" login_password: "{{ mysql_replication_user.password }}" ca_cert: '/tmp/{{ mysql_replication_master }}.ca.crt' register: masterinfo when: - props[inventory_hostname].mysql_replication_role == 'slave' - slaveinfo is defined - (slaveinfo.Is_Replica is defined and not slaveinfo.Is_Replica) or (slaveinfo.Is_Replica is not defined and slaveinfo is failed) - (mysql_replication_master | length) > 0 - name: "Configure replication on the slave" mysql_replication: mode: changeprimary login_unix_socket: /run/mysqld/mysqld.sock login_password: "{{ mysql_root_password }}" master_host: "{{ mysql_replication_master }}" master_user: "{{ mysql_replication_user.name }}" master_password: "{{ mysql_replication_user.password }}" master_log_file: "{{ masterinfo.File }}" master_log_pos: "{{ masterinfo.Position }}" ignore_errors: true when: - props[inventory_hostname].mysql_replication_role == 'slave' - slaveinfo is defined - (slaveinfo.Is_Replica is defined and not slaveinfo.Is_Replica) or (slaveinfo.Is_Replica is not defined and slaveinfo is failed) - mysql_replication_user.name is defined - (mysql_replication_master | length) > 0 - name: "Start replication" mysql_replication: mode: startreplica login_unix_socket: /run/mysqld/mysqld.sock login_password: "{{ mysql_root_password }}" when: - props[inventory_hostname].mysql_replication_role == 'slave' - slaveinfo is defined - (slaveinfo.Is_Replica is defined and not slaveinfo.Is_Replica) or (slaveinfo.Is_Replica is not defined and slaveinfo is failed) - (mysql_replication_master | length) > 0