From 2482cc0fe4b4439628c7460e1ac1dcd6a4b282fc Mon Sep 17 00:00:00 2001 From: root Date: Tue, 13 Feb 2024 17:23:03 -0500 Subject: the slave replication seems to work with the mariadb-dump tool automatically providing the gtid --- src/mariadb-push-replica.sh | 71 ++++++++++++++++++++++++++++++++++++--------- 1 file 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() return $r } +mariadb_install_replication_credentials() +{ + set -e + tee /dev/stderr <&2 + mariadb -Bsss "$@" <<. select schema_name from @@ -350,7 +366,9 @@ send_mariadb_dump() receive_mariadb_dump() { - pv -f | mariadb --skip-reconnect + pv -f | + tee /var/cache/mariadb-dump.sql | + mariadb --skip-reconnect } save_array() @@ -389,22 +407,28 @@ mariadb_scan_databases() ) } -mariadbdump_transfer_missing_databases() +choose_mariadbdump_target_databases() { - mariadb_scan_databases - declare -a to_replicate + declare -n target_databases="$1" + shift if [ $# = 0 ] then - to_replicate=("${primary_dbs_not_on_replica[@]}") + target_databases=() + [ ${#primary_dbs_not_on_replica[@]} -gt 0 ] || return 0 printf "Missing on ${replica_host}: %s\n" \ - "${to_replicate[@]}" - exit + "${primary_dbs_not_on_replica[@]}" >&2 + [ "$SEND_ALL_MARIADB_DATABASES" ] || return 0 + target_databases=("${primary_dbs_not_on_replica[@]}") else - save_array to_replicate from lines \ + save_array target_databases from lines \ <(intersection_lines \ <(printarray primary_dbs_not_on_replica) \ <(printlines "$@" | sort -u)) fi +} + +mariadbdump_transfer_missing_databases() +{ mariadbdump_transfer_databases \ "$replica_host" \ "${to_replicate[@]}" @@ -412,10 +436,11 @@ mariadbdump_transfer_missing_databases() mariadbdump_transfer_databases() { - [ $# -ge 2 ] || return + [ $# -ge 2 ] || return 0 run_primary \ send_mariadb_dump "$1" \ --master-data \ + --apply-slave-statements \ --gtid \ --single-transaction \ --databases "${@:2}" @@ -439,15 +464,32 @@ main() set -e check_input - run_primary set_server_id + run_both set_server_id # run_primary check_db # run_replica check_db # showvars replica - mariadbdump_transfer_missing_databases "$@" - run_replica list_databases - run_both list_databases + # run_primary list_databases + # run_replica list_databases + + mariadb_scan_databases + choose_mariadbdump_target_databases to_replicate "$@" + if [ ${#to_replicate[@]} -gt 0 ] + then + run_replica mariadb_install_replication_credentials \ + "$primary_host" \ + "$replication_user" \ + "$replication_password" + run_primary \ + send_mariadb_dump "$replica_host" \ + --master-data \ + --apply-slave-statements \ + --gtid \ + --single-transaction \ + --databases "${to_replicate[@]}" + run_replica list_databases + fi } cleanup_after_test() @@ -478,5 +520,6 @@ if false then cleanup_after_test fi +SEND_ALL_MARIADB_DATABASES=y main "$@" exit $? -- cgit v1.2.3