summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@vps-18a7a2b7.vps.ovh.ca>2024-02-12 19:49:00 -0500
committerroot <root@vps-18a7a2b7.vps.ovh.ca>2024-02-12 19:49:00 -0500
commitafd1bdd2065a466888dd6076f9fb9d08a05e9b65 (patch)
tree79ccc3f8dad237e3d47002845763f30c9f27c045
parent3d798022eed43f26c7c9a697b1903c7e9bf3d1bc (diff)
factor our mariabackup to replace with mariadb-dump; many output improvements; etc
-rwxr-xr-xsrc/mariadb-push-replica.sh147
1 files changed, 117 insertions, 30 deletions
diff --git a/src/mariadb-push-replica.sh b/src/mariadb-push-replica.sh
index 5e18757..a7345dc 100755
--- a/src/mariadb-push-replica.sh
+++ b/src/mariadb-push-replica.sh
@@ -61,36 +61,44 @@ show_hostnames()
61 61
62check_db() 62check_db()
63{ 63{
64 show_hostnames 64ls -lFC --color /var/lib/mysql
65 mariadb --skip-reconnect -t <<END 65mariadb -t "$@" <<.
66select user(), @@hostname, @@server_id, @@gtid_slave_pos, @@sql_log_bin; 66select
67END 67 user()
68, @@hostname
69, @@server_id
70, @@gtid_slave_pos
71, @@sql_log_bin
72;
73select
74 @@hostname
75, schema_name as 'database'
76from
77 information_schema.schemata
78;
79.
68} 80}
69 81
70create_backup() 82create_backup()
71{ 83{
84 mostly_silent_unless_error create_backup_verbose "$@"
85}
86
87create_backup_verbose()
88{
72 set -e 89 set -e
73 mariabackup_target_dir=/var/mariadb/backup 90 mariabackup_target_dir=/var/mariadb/backup
74 binlog_info_file=$mariabackup_target_dir/xtrabackup_binlog_info 91 binlog_info_file=$mariabackup_target_dir/xtrabackup_binlog_info
75 [ -e "$binlog_info_file" ] && return 92 [ -e "$binlog_info_file" ] && return
76 mkdir -p "$mariabackup_target_dir" 93 mkdir -p "$mariabackup_target_dir"
77 marialog=$(mktemp) 94 set -- \
78 e=0
79 (set -- \
80 -u root \ 95 -u root \
81 --target-dir="$mariabackup_target_dir" 96 --target-dir="$mariabackup_target_dir" \
82 exec >"$marialog" 2>&1 97 "$@"
83 set -x 98 set -x
84 mariabackup --backup --rsync "$@" 99 mariabackup --backup --rsync "$@"
85 mariabackup --prepare "$@") || e=$? 100 mariabackup --prepare "$@"
86 if [ "$e" = 0 -a -e "$binlog_info_file" ] 101 [ -e "$binlog_info_file" ]
87 then
88 tail -v -n2 "$marialog" >&2
89 rm "$marialog"
90 else
91 cat "$marialog" >&2
92 false
93 fi
94} 102}
95 103
96delete_backup() 104delete_backup()
@@ -128,13 +136,13 @@ restore_from_backup()
128{ 136{
129 mariabackup_target_dir=/var/mariadb/backup 137 mariabackup_target_dir=/var/mariadb/backup
130 set -e 138 set -e
131
132 # stop_database_server_and_remove_database_files
133
134 set -- \ 139 set -- \
140 --force-non-empty-directories \
135 -u root \ 141 -u root \
136 --target-dir="$mariabackup_target_dir" 142 --target-dir="$mariabackup_target_dir"
137 if silent_unless_error mariabackup --move-back "$@" 143 set -- "$@"
144 if mostly_silent_unless_error \
145 mariabackup --move-back "$@"
138 then 146 then
139 # Can't believe mariabackup 147 # Can't believe mariabackup
140 # is so primitive as to 148 # is so primitive as to
@@ -163,6 +171,23 @@ silent_unless_error()
163 return $r 171 return $r
164} 172}
165 173
174mostly_silent_unless_error()
175{
176 echo "+ $*" >&2
177 set -- "$(mktemp)" "$@"
178 if
179 "${@:2}" >"$1" 2>&1
180 then
181 tail -n3 "$1" >&2
182 local r=0
183 else
184 local r=$?
185 cat "$1" >&2
186 fi
187 rm "$1"
188 return $r
189}
190
166enable_replication() 191enable_replication()
167{ 192{
168 primary_host=$1 193 primary_host=$1
@@ -251,29 +276,91 @@ set global server_id = $chosen_id;
251END 276END
252} 277}
253 278
279mariadb_list_databases()
280{
281mariadb -Bsss "$@" <<.
282select
283 schema_name
284from
285 information_schema.schemata;
286.
287}
288
289list_databases_needed_on_replica()
290{
291 set -- "$(mktemp)" "$(mktemp)"
292 run_primary mariadb_list_databases | sort -u >"$1"
293 run_replica mariadb_list_databases | sort -u >"$2"
294 comm -23 -- "$1" "$2"
295 rm -- "$1" "$2"
296}
297
298mariabackup_create_replica_databases()
299{
300 run_primary create_backup
301 run_primary send_backup "$replica_host"
302 run_replica stop_database_server_and_remove_database_files
303 run_replica restore_from_backup
304}
305
306mariadbdump_create_replica_databases()
307{
308 list_databases_needed_on_replica
309 comm -13 -- \
310 <(list_databases_needed_on_replica | tee /dev/stderr) \
311 <(printf '%s\n' "$@")
312}
313
254main() 314main()
255{ 315{
256 set -e 316 set -e
257 check_input 317 check_input
258 run_primary set_server_id 318 run_primary set_server_id
259 run_both check_db 319 run_both list_databases
260 : showvars replica 320
321 # run_primary check_db
322 # run_replica check_db
323 # showvars replica
261 324
262 run_primary create_replication_user \ 325 run_primary create_replication_user \
263 "$replica_host" \ 326 "$replica_host" \
264 "$replication_user" \ 327 "$replication_user" \
265 "$replication_password" 328 "$replication_password"
266 run_primary create_backup 329
267 run_primary send_backup "$replica_host" 330 # mariadbdump_create_replica
268 run_replica restore_from_backup 331 run_both list_databases
332 mariabackup_create_replica_databases
333 run_both list_databases
334
335 run_replica check_db
269 run_replica enable_replication \ 336 run_replica enable_replication \
270 "$primary_host" \ 337 "$primary_host" \
271 "$replication_user" \ 338 "$replication_user" \
272 "$replication_password" 339 "$replication_password"
273 run_replica check_db 340 run_both list_databases
274 : run_primary delete_backup 341}
275 run_primary check_db 342
343cleanup_after_test()
344{
345 run_primary delete_backup || true
276} 346}
277 347
348list_databases()
349{
350mariadb -t "$@" <<.
351select
352 @@hostname,
353 @@server_id,
354 schema_name as 'database'
355from
356 information_schema.schemata
357;
358.
359}
360
361if true
362then
363 cleanup_after_test
364fi
278main "$@" 365main "$@"
279exit $? 366exit $?