summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@vps-18a7a2b7.vps.ovh.ca>2024-02-13 17:23:03 -0500
committerroot <root@vps-18a7a2b7.vps.ovh.ca>2024-02-13 17:23:03 -0500
commit2482cc0fe4b4439628c7460e1ac1dcd6a4b282fc (patch)
tree0f79f5a52cac4875d7db264b320b0264f7217876
parentb2dec60e05d38630d567900ef668aadf66ddfc33 (diff)
the slave replication seems to work with the mariadb-dump tool automatically providing the gtid
-rwxr-xr-xsrc/mariadb-push-replica.sh71
1 files changed, 57 insertions, 14 deletions
diff --git a/src/mariadb-push-replica.sh b/src/mariadb-push-replica.sh
index e133fad..56a3b42 100755
--- a/src/mariadb-push-replica.sh
+++ b/src/mariadb-push-replica.sh
@@ -195,6 +195,21 @@ mostly_silent_unless_error()
195 return $r 195 return $r
196} 196}
197 197
198mariadb_install_replication_credentials()
199{
200 set -e
201 tee /dev/stderr <<END | mariadb --skip-reconnect -t
202stop slave
203;
204change master
205to
206 master_host='$1'
207, master_user='$2'
208, master_password='$3'
209;
210END
211}
212
198enable_replication_via_mariabackup_xtra_info() 213enable_replication_via_mariabackup_xtra_info()
199{ 214{
200 primary_host=$1 215 primary_host=$1
@@ -285,7 +300,8 @@ END
285 300
286mariadb_list_databases() 301mariadb_list_databases()
287{ 302{
288mariadb -Bsss "$@" <<. 303 list_databases >&2
304 mariadb -Bsss "$@" <<.
289select 305select
290 schema_name 306 schema_name
291from 307from
@@ -350,7 +366,9 @@ send_mariadb_dump()
350 366
351receive_mariadb_dump() 367receive_mariadb_dump()
352{ 368{
353 pv -f | mariadb --skip-reconnect 369 pv -f |
370 tee /var/cache/mariadb-dump.sql |
371 mariadb --skip-reconnect
354} 372}
355 373
356save_array() 374save_array()
@@ -389,22 +407,28 @@ mariadb_scan_databases()
389 ) 407 )
390} 408}
391 409
392mariadbdump_transfer_missing_databases() 410choose_mariadbdump_target_databases()
393{ 411{
394 mariadb_scan_databases 412 declare -n target_databases="$1"
395 declare -a to_replicate 413 shift
396 if [ $# = 0 ] 414 if [ $# = 0 ]
397 then 415 then
398 to_replicate=("${primary_dbs_not_on_replica[@]}") 416 target_databases=()
417 [ ${#primary_dbs_not_on_replica[@]} -gt 0 ] || return 0
399 printf "Missing on ${replica_host}: %s\n" \ 418 printf "Missing on ${replica_host}: %s\n" \
400 "${to_replicate[@]}" 419 "${primary_dbs_not_on_replica[@]}" >&2
401 exit 420 [ "$SEND_ALL_MARIADB_DATABASES" ] || return 0
421 target_databases=("${primary_dbs_not_on_replica[@]}")
402 else 422 else
403 save_array to_replicate from lines \ 423 save_array target_databases from lines \
404 <(intersection_lines \ 424 <(intersection_lines \
405 <(printarray primary_dbs_not_on_replica) \ 425 <(printarray primary_dbs_not_on_replica) \
406 <(printlines "$@" | sort -u)) 426 <(printlines "$@" | sort -u))
407 fi 427 fi
428}
429
430mariadbdump_transfer_missing_databases()
431{
408 mariadbdump_transfer_databases \ 432 mariadbdump_transfer_databases \
409 "$replica_host" \ 433 "$replica_host" \
410 "${to_replicate[@]}" 434 "${to_replicate[@]}"
@@ -412,10 +436,11 @@ mariadbdump_transfer_missing_databases()
412 436
413mariadbdump_transfer_databases() 437mariadbdump_transfer_databases()
414{ 438{
415 [ $# -ge 2 ] || return 439 [ $# -ge 2 ] || return 0
416 run_primary \ 440 run_primary \
417 send_mariadb_dump "$1" \ 441 send_mariadb_dump "$1" \
418 --master-data \ 442 --master-data \
443 --apply-slave-statements \
419 --gtid \ 444 --gtid \
420 --single-transaction \ 445 --single-transaction \
421 --databases "${@:2}" 446 --databases "${@:2}"
@@ -439,15 +464,32 @@ main()
439 set -e 464 set -e
440 check_input 465 check_input
441 466
442 run_primary set_server_id 467 run_both set_server_id
443 468
444 # run_primary check_db 469 # run_primary check_db
445 # run_replica check_db 470 # run_replica check_db
446 # showvars replica 471 # showvars replica
447 472
448 mariadbdump_transfer_missing_databases "$@" 473 # run_primary list_databases
449 run_replica list_databases 474 # run_replica list_databases
450 run_both list_databases 475
476 mariadb_scan_databases
477 choose_mariadbdump_target_databases to_replicate "$@"
478 if [ ${#to_replicate[@]} -gt 0 ]
479 then
480 run_replica mariadb_install_replication_credentials \
481 "$primary_host" \
482 "$replication_user" \
483 "$replication_password"
484 run_primary \
485 send_mariadb_dump "$replica_host" \
486 --master-data \
487 --apply-slave-statements \
488 --gtid \
489 --single-transaction \
490 --databases "${to_replicate[@]}"
491 run_replica list_databases
492 fi
451} 493}
452 494
453cleanup_after_test() 495cleanup_after_test()
@@ -478,5 +520,6 @@ if false
478then 520then
479 cleanup_after_test 521 cleanup_after_test
480fi 522fi
523SEND_ALL_MARIADB_DATABASES=y
481main "$@" 524main "$@"
482exit $? 525exit $?