You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hetzner-ansible/roles/maria/tasks/replication.yml

117 lines
4.2 KiB
YAML

---
- 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