--- - name: Sanity check ansible.builtin.assert: that: - hostname_replication_primary is defined - db_server_id is defined - name: Install software ansible.builtin.package: name: "{{ item }}" state: present with_items: "{{ db_packages }}" - name: "Quick-Fix MariaDB/systemd problems" ansible.builtin.lineinfile: path: /usr/lib/systemd/system/mariadb.service regexp: "^SendSIGKILL=no" line: "SendSIGKILL=yes" backup: true register: db_systemd_fix when: ansible_virtualization_type == "lxc" - name: Reload systemd daemon # noqa: no-handler ansible.builtin.systemd: daemon_reload: true when: db_systemd_fix is changed - name: 'Enable service "{{ db_servicename }}"' ansible.builtin.service: name: "{{ db_servicename }}" state: started enabled: true - name: "Config: Listen on all ip addresses" ansible.builtin.lineinfile: path: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: "^ *#* *bind-address" line: "bind-address = 0.0.0.0" backup: true notify: 'Restart MariaDB' - name: "Config: Set server-id" ansible.builtin.lineinfile: dest: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: "^ *#* *server-id" line: "server-id = {{ db_server_id }}" backup: true notify: 'Restart MariaDB' - name: Ensure log directory is present ansible.builtin.file: path: /var/log/mysql state: directory owner: mysql group: mysql mode: "0770" - name: "Config: Enable binlog" ansible.builtin.lineinfile: dest: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: "^ *#* *log_bin" line: "log_bin = /var/log/mysql/mysql-bin.log" backup: true when: db_server_id == 1 notify: 'Restart MariaDB' - name: MariaDB create replication user community.mysql.mysql_user: name: "{{ db_repl_user }}" password: "{{ db_repl_password }}" priv: '*.*:REPLICATION SLAVE' host: "%" column_case_sensitive: true state: present login_unix_socket: /var/run/mysqld/mysqld.sock notify: 'Restart MariaDB' - name: Get MariaDB master state community.mysql.mysql_info: filter: master_status login_unix_socket: /var/run/mysqld/mysqld.sock register: db_master_status - name: "DEBUG»»» db_server_id / db_master_status.master_status" ansible.builtin.debug: msg: - "db_server_id: {{ db_server_id }}" - "db_master_status.master_status: {{ db_master_status.master_status }}" when: db_debug|default(false) - name: "(Maybe) Restart MariaDB" ansible.builtin.meta: flush_handlers - name: Get MariaDB master state community.mysql.mysql_info: filter: master_status login_unix_socket: /var/run/mysqld/mysqld.sock register: db_master_status_new - name: "DEBUG»»» db_server_id / db_master_status_new.master_status" ansible.builtin.debug: msg: - "db_server_id: {{ db_server_id }}" - "db_master_status_new.master_status: {{ db_master_status_new.master_status|to_nice_json }}" when: db_debug|default(false) - name: "(Master) Reset binlog" # noqa: no-changed-when ansible.builtin.command: cmd: '/usr/bin/mysql -u root -e "RESET MASTER"' when: db_server_id == 1 and db_master_status.master_status == {} - name: "(Replica) Get status" community.mysql.mysql_replication: mode: getreplica login_unix_socket: /var/run/mysqld/mysqld.sock register: db_replica_status - name: "DEBUG»»» db_replica_status" ansible.builtin.debug: var: db_replica_status when: db_debug|default(false) - name: "(Replica) Block for replicas" when: db_server_id != 1 and db_replica_status.Slave_IO_Running|default("No") == "No" block: - name: "(Replica) Setup replication" # noqa: no-changed-when ansible.builtin.command: cmd: '/usr/bin/mysql -u root -e "CHANGE MASTER TO master_host=\"{{ hostvars[hostname_replication_primary]["ansible_default_ipv4"].address }}\", master_user=\"{{ db_repl_user }}\", master_password=\"{{ db_repl_password }}\", master_use_gtid=current_pos"' # noqa: yaml[line-length] - name: "(Replica) Start replica" community.mysql.mysql_replication: mode: startreplica login_unix_socket: /var/run/mysqld/mysqld.sock