Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Commit effdcf2

Browse files
committed
Script for Master-Slave automation.
unfixed Error => slave server can't run if configured through mysql_replication. need to run manually via cli in slave server with command : CHANGE MASTER TO MASTER_HOST = '{{host_ip}}', MASTER_USER = 'dbrep', MASTER_PASSWORD = 'dbrep', MASTER_LOG_FILE = '{{log_id}}', MASTER_LOG_POS = {{pos_id}}
1 parent 591cf9c commit effdcf2

File tree

3 files changed

+106
-64
lines changed

3 files changed

+106
-64
lines changed

inventory.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[master]
2-
fe80::215:5dff:fe38:102%eth0
2+
fe80::215:5dff:fe38:108%eth0
33
; 10.10.10.1
44

55
[slave]
6-
fe80::215:5dff:fe38:103%eth0
6+
fe80::215:5dff:fe38:109%eth0
77
; 10.10.10.1
88

99
[all:vars]

mariadb-master-slave.yml

Lines changed: 104 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -31,77 +31,57 @@
3131
- mariadb-client
3232
# - mariadb-common
3333

34-
- name: Edit my.cnf
34+
- name: Add line in my.cnf
3535
ansible.builtin.lineinfile:
3636
path: /etc/mysql/my.cnf
37-
regexp: 'bind-address = 0.0.0.0'
38-
line: 'bind-address = 0.0.0.0'
37+
regexp: "{{item}}"
38+
line: "{{item}}"
3939
state: present
40+
with_items:
41+
- "[mysqld]"
42+
- "bind-address = 0.0.0.0"
43+
- "log_bin = /var/log/mysql/mysql-bin.log"
44+
- "max_binlog_size = 100M"
45+
- "relay_log = /var/log/mysql/mysql-relay-bin"
46+
- "relay_log_index = /var/log/mysql/mysql-relay-bin.index"
4047

41-
- name: Restart and Enable MariaDB
42-
ansible.builtin.service:
43-
name: mysql
44-
state: restarted
45-
enabled: true
46-
47-
- name: Delete Anonymous user
48-
community.mysql.mysql_user:
49-
name: ''
50-
host: localhost
51-
state: absent
52-
login_unix_socket: /run/mysqld/mysqld.sock
48+
# - name: Delete Anonymous user
49+
# community.mysql.mysql_user:
50+
# name: ''
51+
# host: localhost
52+
# state: absent
53+
# login_unix_socket: /run/mysqld/mysqld.sock
5354

54-
- name: Set Root Password with defined variable
55-
community.mysql.mysql_user:
56-
name: "root"
57-
password: "{{root_password}}"
58-
host: "{{item}}"
59-
login_unix_socket: /run/mysqld/mysqld.sock
60-
with_items:
61-
- localhost
62-
# - 127.0.0.1
63-
# - ::1
55+
# - name: Set Root Password with defined variable
56+
# community.mysql.mysql_user:
57+
# name: "root"
58+
# password: "{{root_password}}"
59+
# host: "{{item}}"
60+
# login_unix_socket: /run/mysqld/mysqld.sock
61+
# with_items:
62+
# - localhost
63+
# # - 127.0.0.1
64+
# # - ::1
6465

6566
### RUN ON MASTER SERVER ONLY
66-
# when: inventory_hostname in groups["master[0]"]
67+
# when: inventory_hostname in groups["master[0]"][0]
68+
6769
- name: Add line in my.cnf
6870
ansible.builtin.lineinfile:
6971
path: /etc/mysql/my.cnf
7072
regexp: "{{item}}"
7173
line: "{{item}}"
7274
state: present
73-
when: inventory_hostname in groups["master"]
7475
with_items:
7576
- "server-id = 1"
76-
- "log_bin = /var/log/mysql/mysql-bin.log"
77-
- "max_binlog_size = 100M"
78-
- "relay_log = /var/log/mysql/mysql-relay-bin"
79-
- "relay_log_index = /var/log/mysql/mysql-relay-bin.index"
80-
77+
when: inventory_hostname in groups["master"][0]
8178

8279
- name: Restart and Enable MariaDB
8380
ansible.builtin.service:
8481
name: mysql
8582
state: restarted
8683
enabled: true
87-
88-
- name: Delete Anonymous user
89-
community.mysql.mysql_user:
90-
name: ''
91-
host: localhost
92-
state: absent
93-
login_unix_socket: /run/mysqld/mysqld.sock
94-
95-
- name: Set Root Password with defined variable
96-
community.mysql.mysql_user:
97-
name: "root"
98-
password: "{{root_password}}"
99-
host: "{{item}}"
100-
login_unix_socket: /run/mysqld/mysqld.sock
101-
with_items:
102-
- localhost
103-
# - 127.0.0.1
104-
# - ::1
84+
when: inventory_hostname in groups["master"][0]
10585

10686
- name: Create Database "{{database}}"
10787
community.mysql.mysql_db:
@@ -118,4 +98,78 @@
11898
login_user: root
11999
login_password: "{{root_password}}"
120100
state: present
101+
102+
- name: "Create user dbrep for replication"
103+
community.mysql.mysql_user:
104+
name: "dbrep"
105+
password: "dbrep"
106+
priv: "*.*:REPLICATION SLAVE"
107+
host: "%"
108+
login_user: root
109+
login_password: "{{root_password}}"
110+
state: present
111+
when: inventory_hostname in groups["master"][0]
112+
113+
- name: Get Master Status
114+
community.mysql.mysql_info:
115+
login_user: root
116+
login_password: "{{root_password}}"
117+
login_unix_socket: /run/mysqld/mysqld.sock
118+
register: master_status
119+
when: inventory_hostname in groups["master"][0]
120+
121+
- name: Get Master Host
122+
command: echo "{{hostvars[inventory_hostname].inventory_hostname}}"
123+
register: master_host
124+
when: inventory_hostname in groups["master"][0]
125+
126+
### RUN ON SLAVE ONLY
127+
# when: inventory_hostname in groups["slave"]
128+
129+
- set_fact:
130+
master_host: "{{ hostvars[groups['master'].0].master_host }}"
131+
master_log_file: "{{ hostvars[groups['master'].0].master_status.master_status.File }}"
132+
master_log_pos: "{{ hostvars[groups['master'].0].master_status.master_status.Position }}"
133+
134+
- name: Add line in my.cnf
135+
ansible.builtin.lineinfile:
136+
path: /etc/mysql/my.cnf
137+
regexp: "{{item}}"
138+
line: "{{item}}"
139+
state: present
140+
with_items:
141+
- "server-id = 2"
142+
when: inventory_hostname in groups["slave"]
143+
144+
- name: Stop and then Reset Slave Server
145+
community.mysql.mysql_replication:
146+
mode: "{{item}}"
147+
login_user: root
148+
login_password: "{{root_password}}"
149+
login_host: localhost
150+
when: inventory_hostname in groups["slave"]
151+
with_items:
152+
- stopreplica
153+
- resetreplica
154+
155+
- name: Config Slave Server
156+
community.mysql.mysql_replication:
157+
mode: changeprimary
158+
login_user: root
159+
login_password: "{{root_password}}"
160+
login_host: localhost
161+
# primary_host : "{{master_host}}"
162+
MASTER_HOST : 172.17.136.104
163+
MASTER_USER : "dbrep"
164+
MASTER_PASSWORD : "dbrep"
165+
MASTER_LOG_FILE : "{{master_log_file}}"
166+
MASTER_LOG_POS : "{{master_log_pos}}"
167+
when: inventory_hostname in groups["slave"]
121168

169+
name: Start Slave Server
170+
community.mysql.mysql_replication:
171+
mode: startreplica
172+
login_user: root
173+
login_password: "{{root_password}}"
174+
login_host: localhost
175+
when: inventory_hostname in groups["slave"]

tes.yml

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)