diff options
author | root <root@vps-18a7a2b7.vps.ovh.ca> | 2024-01-21 11:44:18 -0500 |
---|---|---|
committer | root <root@vps-18a7a2b7.vps.ovh.ca> | 2024-01-21 11:44:18 -0500 |
commit | f7a4cd6b4bf04269a675c8856fe9625a1b7817c1 (patch) | |
tree | b6de079c7dad21344442b460751c726b41aa2181 | |
parent | 1e6869e7730389e64fd70b8aa30034758a4fe392 (diff) |
move hosting-tools config into /etc/hosting-tools
-rwxr-xr-x | src/mariadb-push-replica.sh | 2 | ||||
-rwxr-xr-x | wip/mariadb-push-replica.sh | 211 |
2 files changed, 1 insertions, 212 deletions
diff --git a/src/mariadb-push-replica.sh b/src/mariadb-push-replica.sh index c8e1e0a..69b9edf 100755 --- a/src/mariadb-push-replica.sh +++ b/src/mariadb-push-replica.sh | |||
@@ -3,7 +3,7 @@ set -e | |||
3 | PATH=$(dirname "$0"):$PATH | 3 | PATH=$(dirname "$0"):$PATH |
4 | source rpc.bash | 4 | source rpc.bash |
5 | 5 | ||
6 | datadir=data | 6 | datadir=/etc/hosting-tools |
7 | default_replica_host_file=$datadir/default-replica-host | 7 | default_replica_host_file=$datadir/default-replica-host |
8 | replication_password_file=$datadir/replication-password | 8 | replication_password_file=$datadir/replication-password |
9 | 9 | ||
diff --git a/wip/mariadb-push-replica.sh b/wip/mariadb-push-replica.sh deleted file mode 100755 index c4df851..0000000 --- a/wip/mariadb-push-replica.sh +++ /dev/null | |||
@@ -1,211 +0,0 @@ | |||
1 | #!/bin/bash | ||
2 | set -e | ||
3 | PATH=./src:$PATH | ||
4 | source rpc.bash | ||
5 | |||
6 | default_replica_host_file=data/default-replica-host | ||
7 | replication_password_file=data/replication-password | ||
8 | |||
9 | if [ -r "$default_replica_host_file" ] | ||
10 | then | ||
11 | read default_replica_host < "$default_replica_host_file" | ||
12 | fi | ||
13 | |||
14 | gen_password() | ||
15 | { | ||
16 | generated_password_length=32 | ||
17 | generated_password=$(tr -cd a-zA-Z0-9 < /dev/urandom | head -c "$generated_password_length") | ||
18 | [ "${#generated_password}" -eq "$generated_password_length" ] | ||
19 | printf '%s\n' "$generated_password" | ||
20 | } | ||
21 | |||
22 | if ! [ -e "$replication_password_file" ] | ||
23 | then | ||
24 | gen_password > "$replication_password_file" | ||
25 | fi | ||
26 | |||
27 | if [ -r "$replication_password_file" ] | ||
28 | then | ||
29 | read replication_password < "$replication_password_file" | ||
30 | [ "${#replication_password}" -ge 30 ] | ||
31 | fi | ||
32 | |||
33 | primary_host=$(hostname --fqdn) | ||
34 | replica_host=${1:-$default_replica_host} | ||
35 | replication_user=replication | ||
36 | |||
37 | [ "$primary_host" ] | ||
38 | [ "$replica_host" ] | ||
39 | [ "$replication_password" ] | ||
40 | |||
41 | run_primary() | ||
42 | { | ||
43 | (set -x | ||
44 | : primary : $1 $2 ${3:+ ...}) | ||
45 | BASH_RPC_REMOTE_DEST=$primary_host remote_run_function "$@" | ||
46 | } | ||
47 | |||
48 | run_replica() | ||
49 | { | ||
50 | (set -x | ||
51 | : replica : $1 $2 ${3:+ ...}) | ||
52 | BASH_RPC_REMOTE_DEST=$replica_host remote_run_function "$@" | ||
53 | } | ||
54 | |||
55 | show_hostnames() | ||
56 | { | ||
57 | printf \ | ||
58 | "==> %s %s <==\n %s\n" \ | ||
59 | "$(hostname -A)" \ | ||
60 | "$(hostname -I)" \ | ||
61 | "$(uptime)" | ||
62 | } | ||
63 | |||
64 | check_db() | ||
65 | { | ||
66 | show_hostnames | ||
67 | mariadb --skip-reconnect -t <<END | ||
68 | select @@hostname, @@server_id, @@gtid_slave_pos, @@sql_log_bin; | ||
69 | END | ||
70 | } | ||
71 | |||
72 | create_backup() | ||
73 | { | ||
74 | set -e | ||
75 | mariabackup_target_dir=/var/mariadb/backup | ||
76 | binlog_info_file=$mariabackup_target_dir/xtrabackup_binlog_info | ||
77 | [ -e "$binlog_info_file" ] && return | ||
78 | mkdir -p "$mariabackup_target_dir" | ||
79 | marialog=$(mktemp) | ||
80 | e=0 | ||
81 | (set -- \ | ||
82 | -u root \ | ||
83 | --target-dir="$mariabackup_target_dir" | ||
84 | exec >"$marialog" 2>&1 | ||
85 | set -x | ||
86 | mariabackup --backup --rsync "$@" | ||
87 | mariabackup --prepare "$@") || e=$? | ||
88 | if [ "$e" = 0 -a -e "$binlog_info_file" ] | ||
89 | then | ||
90 | tail -v -n2 "$marialog" >&2 | ||
91 | rm "$marialog" | ||
92 | else | ||
93 | cat "$marialog" >&2 | ||
94 | false | ||
95 | fi | ||
96 | } | ||
97 | |||
98 | delete_backup() | ||
99 | { | ||
100 | set -x | ||
101 | rm -r /var/mariadb/backup | ||
102 | } | ||
103 | |||
104 | send_backup() | ||
105 | { | ||
106 | mariabackup_target_dir=/var/mariadb/backup | ||
107 | set -x | ||
108 | rsync -zaR -- /./"${mariabackup_target_dir#/}" "$1":/ | ||
109 | } | ||
110 | |||
111 | restore_from_backup() | ||
112 | { | ||
113 | livedb=/var/lib/mysql | ||
114 | mariabackup_target_dir=/var/mariadb/backup | ||
115 | set -e | ||
116 | if [ -e "$livedb" ] | ||
117 | then | ||
118 | if [ "$(systemctl is-active mariadb)" = active ] | ||
119 | then | ||
120 | systemctl stop mariadb | ||
121 | fi | ||
122 | livedb_backup=$livedb~$(date -Ins) | ||
123 | mv -v -T -- "$livedb" "$livedb_backup" | ||
124 | mkdir "$livedb" | ||
125 | chown --reference="$livedb_backup" "$livedb" | ||
126 | chmod --reference="$livedb_backup" "$livedb" | ||
127 | fi | ||
128 | marialog=$(mktemp) | ||
129 | exec >"$marialog" 2>&1 | ||
130 | set -- \ | ||
131 | -u root \ | ||
132 | --target-dir="$mariabackup_target_dir" | ||
133 | if mariabackup --move-back "$@" | ||
134 | then | ||
135 | tail -v -n2 "$marialog" >&2 | ||
136 | # Can't believe mariabackup | ||
137 | # is so primitive as to | ||
138 | # recommend this chown in its | ||
139 | # documentation | ||
140 | chown -R mysql:mysql /var/lib/mysql | ||
141 | systemctl start mariadb | ||
142 | else | ||
143 | cat "$marialog" >&2 | ||
144 | fi | ||
145 | |||
146 | } | ||
147 | |||
148 | enable_replication() | ||
149 | { | ||
150 | primary_host=$1 | ||
151 | replication_user=$2 | ||
152 | replication_password=$3 | ||
153 | mariabackup_target_dir=/var/mariadb/backup | ||
154 | binlog_info_file=$mariabackup_target_dir/xtrabackup_binlog_info | ||
155 | set -e | ||
156 | read master_log_file master_log_pos gtid_slave_pos < $binlog_info_file | ||
157 | tee /dev/stderr <<END | mariadb --skip-reconnect -t | ||
158 | STOP SLAVE; | ||
159 | SET GLOBAL gtid_slave_pos = "$gtid_slave_pos"; | ||
160 | CHANGE MASTER TO | ||
161 | MASTER_HOST='$primary_host', | ||
162 | MASTER_USER='$replication_user', | ||
163 | MASTER_PASSWORD='$replication_password', | ||
164 | MASTER_USE_GTID=slave_pos; | ||
165 | START SLAVE; | ||
166 | SHOW SLAVE STATUS\G | ||
167 | END | ||
168 | set -x | ||
169 | rm -r /var/mariadb/backup | ||
170 | } | ||
171 | |||
172 | create_replication_user() | ||
173 | { | ||
174 | mariadb --skip-reconnect -t <<END | ||
175 | CREATE OR REPLACE USER '$2'@'$1' IDENTIFIED BY '$3'; | ||
176 | GRANT REPLICATION SLAVE ON *.* TO '$2'@'$1'; | ||
177 | END | ||
178 | } | ||
179 | |||
180 | showvars() | ||
181 | { | ||
182 | for h in "$@" | ||
183 | do | ||
184 | run_$h mariadb --skip-reconnect -t <<END | ||
185 | select VARIABLE_NAME,SESSION_VALUE,GLOBAL_VALUE | ||
186 | from INFORMATION_SCHEMA.SYSTEM_VARIABLES | ||
187 | where VARIABLE_NAME LIKE '%SLAVE%' \G | ||
188 | END | ||
189 | done | ||
190 | } | ||
191 | |||
192 | set -e | ||
193 | run_primary check_db | ||
194 | run_replica check_db | ||
195 | : showvars replica | ||
196 | : exit | ||
197 | |||
198 | run_primary create_replication_user \ | ||
199 | "$replica_host" \ | ||
200 | "$replication_user" \ | ||
201 | "$replication_password" | ||
202 | run_primary create_backup | ||
203 | run_primary send_backup "$replica_host" | ||
204 | run_replica restore_from_backup | ||
205 | run_replica enable_replication \ | ||
206 | "$primary_host" \ | ||
207 | "$replication_user" \ | ||
208 | "$replication_password" | ||
209 | run_replica check_db | ||
210 | run_primary delete_backup | ||
211 | run_primary check_db | ||