DEV-380: __fast__ lauffaehig ohne Probleme (TM) ;)

feature/DEV-380_2nd
friedrich goerz 4 years ago
parent 5cac30fede
commit 2c64432d1e

@ -1,4 +1,5 @@
---
ansible_managed: 'do not edit manually - file powered by ansible'
debug: false
ssh_macs:

File diff suppressed because it is too large Load Diff

@ -1,6 +1,4 @@
---
ansible_managed: 'do not edit manually - file powered by ansible'
mariadb_server_version: '10.6'
mariadb_server_global_my_cnf: '/etc/mysql/my.cnf'
mariadb_server_config_dir: '/etc/mysql/mariadb.conf.d'
@ -13,3 +11,16 @@ backup_status_file: '{{ backup_dest_dir }}/backup_finished'
mysql_root_username: "{{ mysql_root_username_vault }}"
mysql_root_password: "{{ mysql_root_password_vault }}"
mysql_replication_user:
name: repl_user
password: '{{ mysql_replication_user_password_vault }}'
mysqldump_creds:
username: backupuser
password: '{{ mysql_dump_user_password_vault }}'
host: '%'
priv: '*.*:ALL,GRANT'
backup_target: "dump_all_{{ ansible_date_time.date }}.sql"

@ -143,3 +143,16 @@
name: dummytestdb
state: import
target: /tmp/testdb.sql
- name: "Do stuff for M-M-replication"
throttle: 1
block:
- name: "Init M-S-replication-setup"
include_tasks: replication.yml
vars:
mysql_replication_master: "{{ master }}"
mysql_replication_slave: "{{ slave }}"
import_dump: "{{ mysql_import | default(False) }}"
when:
- mysql_mastermaster_replication | default(False)
- mysql_mastermaster_replication_init | default(False)

@ -0,0 +1,116 @@
---
- 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

@ -25,4 +25,12 @@ ssl_cipher = TLSv1.2,TLSv1.3
log_error = /var/log/mysql/error.log
slow_query_log_file = /var/log/mysql/slow.log
{% if mysql_mastermaster_replication | default(false) %}
log-bin
server_id={{ inventory_hostname | split("-") | last | int }}
log-basename={{ inventory_hostname }}
binlog-format=mixed
{% endif %}
[mariadb-10.6]

Loading…
Cancel
Save