diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/mariadb-push-replica.sh | 71 |
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 | ||
198 | mariadb_install_replication_credentials() | ||
199 | { | ||
200 | set -e | ||
201 | tee /dev/stderr <<END | mariadb --skip-reconnect -t | ||
202 | stop slave | ||
203 | ; | ||
204 | change master | ||
205 | to | ||
206 | master_host='$1' | ||
207 | , master_user='$2' | ||
208 | , master_password='$3' | ||
209 | ; | ||
210 | END | ||
211 | } | ||
212 | |||
198 | enable_replication_via_mariabackup_xtra_info() | 213 | enable_replication_via_mariabackup_xtra_info() |
199 | { | 214 | { |
200 | primary_host=$1 | 215 | primary_host=$1 |
@@ -285,7 +300,8 @@ END | |||
285 | 300 | ||
286 | mariadb_list_databases() | 301 | mariadb_list_databases() |
287 | { | 302 | { |
288 | mariadb -Bsss "$@" <<. | 303 | list_databases >&2 |
304 | mariadb -Bsss "$@" <<. | ||
289 | select | 305 | select |
290 | schema_name | 306 | schema_name |
291 | from | 307 | from |
@@ -350,7 +366,9 @@ send_mariadb_dump() | |||
350 | 366 | ||
351 | receive_mariadb_dump() | 367 | receive_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 | ||
356 | save_array() | 374 | save_array() |
@@ -389,22 +407,28 @@ mariadb_scan_databases() | |||
389 | ) | 407 | ) |
390 | } | 408 | } |
391 | 409 | ||
392 | mariadbdump_transfer_missing_databases() | 410 | choose_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 | |||
430 | mariadbdump_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 | ||
413 | mariadbdump_transfer_databases() | 437 | mariadbdump_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 | ||
453 | cleanup_after_test() | 495 | cleanup_after_test() |
@@ -478,5 +520,6 @@ if false | |||
478 | then | 520 | then |
479 | cleanup_after_test | 521 | cleanup_after_test |
480 | fi | 522 | fi |
523 | SEND_ALL_MARIADB_DATABASES=y | ||
481 | main "$@" | 524 | main "$@" |
482 | exit $? | 525 | exit $? |