From 9158ebf61598db0bb571945d993b0542c6e135d0 Mon Sep 17 00:00:00 2001 From: Hao Jiang Date: Thu, 13 Feb 2020 11:17:07 -0500 Subject: [PATCH 1/5] Use ssh forwarding to connect to appliances other than GHE_RESTORE_HOST --- share/github-backup-utils/ghe-restore-mysql | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/share/github-backup-utils/ghe-restore-mysql b/share/github-backup-utils/ghe-restore-mysql index bbcf3ab9a..00c07aaec 100755 --- a/share/github-backup-utils/ghe-restore-mysql +++ b/share/github-backup-utils/ghe-restore-mysql @@ -38,11 +38,16 @@ is_binary_backup_feature_on(){ ghe-ssh "$GHE_HOSTNAME" ghe-config --true "mysql.backup.binary" } -if ghe-ssh "$GHE_HOSTNAME" test -f /etc/github/cluster ; then +ssh_config_file_opt="" +if $CLUSTER ; then ghe_mysql_master=$(ghe-ssh "$GHE_HOSTNAME" ghe-config "cluster.mysql-master") if [ -z $ghe_mysql_master ]; then ghe_mysql_master=$GHE_HOSTNAME else + ssh_config_file="$tempdir/ssh_config" + ssh_config_file_opt="-F $ssh_config_file" + opts="$opts -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PasswordAuthentication=no" + ghe-ssh-config "$GHE_HOSTNAME" "$ghe_mysql_master" > "$ssh_config_file" port=$(ssh_port_part "$GHE_HOSTNAME") ghe_mysql_master=$ghe_mysql_master${port:+:$port} fi @@ -79,16 +84,16 @@ else fi cleanup() { - ghe-ssh "$GHE_RESTORE_HOST" -- "sudo rm -rf $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz" + ghe-ssh $ssh_config_file_opt "$GHE_RESTORE_HOST" -- "sudo rm -rf $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz" } trap 'cleanup' INT TERM EXIT -ghe-ssh "$GHE_RESTORE_HOST" -- "sudo mkdir -p '$GHE_REMOTE_DATA_USER_DIR/tmp'" 1>&3 +ghe-ssh $ssh_config_file_opt "$GHE_RESTORE_HOST" -- "sudo mkdir -p '$GHE_REMOTE_DATA_USER_DIR/tmp'" 1>&3 # Transfer MySQL data from the snapshot to the GitHub instance. -cat $snapshot_dir/mysql.sql.gz | ghe-ssh "$GHE_RESTORE_HOST" -- "sudo dd of=$GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz >/dev/null 2>&1" +cat $snapshot_dir/mysql.sql.gz | ghe-ssh $ssh_config_file_opt "$GHE_RESTORE_HOST" -- "sudo dd of=$GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz >/dev/null 2>&1" # Import the database -echo "cat $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz | $IMPORT_MYSQL" | ghe-ssh "$GHE_RESTORE_HOST" -- /bin/bash 1>&3 +echo "cat $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz | $IMPORT_MYSQL" | ghe-ssh $ssh_config_file_opt "$GHE_RESTORE_HOST" -- /bin/bash 1>&3 bm_end "$(basename $0)" From a4c7abaf5c4863f2d5d9cf2a91fd5096b2823c0b Mon Sep 17 00:00:00 2001 From: Hao Jiang Date: Thu, 13 Feb 2020 11:27:30 -0500 Subject: [PATCH 2/5] make temp dir --- share/github-backup-utils/ghe-restore-mysql | 1 + 1 file changed, 1 insertion(+) diff --git a/share/github-backup-utils/ghe-restore-mysql b/share/github-backup-utils/ghe-restore-mysql index 00c07aaec..10a0b1bee 100755 --- a/share/github-backup-utils/ghe-restore-mysql +++ b/share/github-backup-utils/ghe-restore-mysql @@ -44,6 +44,7 @@ if $CLUSTER ; then if [ -z $ghe_mysql_master ]; then ghe_mysql_master=$GHE_HOSTNAME else + tempdir=$(mktemp -d -t backup-utils-restore-XXXXXX) ssh_config_file="$tempdir/ssh_config" ssh_config_file_opt="-F $ssh_config_file" opts="$opts -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PasswordAuthentication=no" From df45d826d9a602e266fa6c25faa240a83ac7fa8b Mon Sep 17 00:00:00 2001 From: Hao Jiang Date: Thu, 13 Feb 2020 11:52:04 -0500 Subject: [PATCH 3/5] Error out for mysql-master not found in cluster setup --- share/github-backup-utils/ghe-restore-mysql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/share/github-backup-utils/ghe-restore-mysql b/share/github-backup-utils/ghe-restore-mysql index 10a0b1bee..42a349427 100755 --- a/share/github-backup-utils/ghe-restore-mysql +++ b/share/github-backup-utils/ghe-restore-mysql @@ -42,7 +42,8 @@ ssh_config_file_opt="" if $CLUSTER ; then ghe_mysql_master=$(ghe-ssh "$GHE_HOSTNAME" ghe-config "cluster.mysql-master") if [ -z $ghe_mysql_master ]; then - ghe_mysql_master=$GHE_HOSTNAME + echo "Something is wrong with configuration: cluster.mysql-master not found" >&2 + exit 2 else tempdir=$(mktemp -d -t backup-utils-restore-XXXXXX) ssh_config_file="$tempdir/ssh_config" From a32b235d71297dc421b0ba667a6265ed47ba3c98 Mon Sep 17 00:00:00 2001 From: Hao Jiang Date: Thu, 13 Feb 2020 14:45:10 -0500 Subject: [PATCH 4/5] Remove unused opts --- share/github-backup-utils/ghe-restore-mysql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/share/github-backup-utils/ghe-restore-mysql b/share/github-backup-utils/ghe-restore-mysql index 42a349427..f7919322e 100755 --- a/share/github-backup-utils/ghe-restore-mysql +++ b/share/github-backup-utils/ghe-restore-mysql @@ -38,7 +38,7 @@ is_binary_backup_feature_on(){ ghe-ssh "$GHE_HOSTNAME" ghe-config --true "mysql.backup.binary" } -ssh_config_file_opt="" +ssh_config_file_opt= if $CLUSTER ; then ghe_mysql_master=$(ghe-ssh "$GHE_HOSTNAME" ghe-config "cluster.mysql-master") if [ -z $ghe_mysql_master ]; then @@ -48,7 +48,6 @@ if $CLUSTER ; then tempdir=$(mktemp -d -t backup-utils-restore-XXXXXX) ssh_config_file="$tempdir/ssh_config" ssh_config_file_opt="-F $ssh_config_file" - opts="$opts -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PasswordAuthentication=no" ghe-ssh-config "$GHE_HOSTNAME" "$ghe_mysql_master" > "$ssh_config_file" port=$(ssh_port_part "$GHE_HOSTNAME") ghe_mysql_master=$ghe_mysql_master${port:+:$port} From 33efc37e8bdc955ec00c0a083134fece5dedcb0d Mon Sep 17 00:00:00 2001 From: Hao Jiang Date: Thu, 13 Feb 2020 15:45:24 -0500 Subject: [PATCH 5/5] move logic around for binary backups only --- share/github-backup-utils/ghe-restore-mysql | 34 ++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/share/github-backup-utils/ghe-restore-mysql b/share/github-backup-utils/ghe-restore-mysql index f7919322e..a939c8d6d 100755 --- a/share/github-backup-utils/ghe-restore-mysql +++ b/share/github-backup-utils/ghe-restore-mysql @@ -39,26 +39,26 @@ is_binary_backup_feature_on(){ } ssh_config_file_opt= -if $CLUSTER ; then - ghe_mysql_master=$(ghe-ssh "$GHE_HOSTNAME" ghe-config "cluster.mysql-master") - if [ -z $ghe_mysql_master ]; then - echo "Something is wrong with configuration: cluster.mysql-master not found" >&2 - exit 2 - else - tempdir=$(mktemp -d -t backup-utils-restore-XXXXXX) - ssh_config_file="$tempdir/ssh_config" - ssh_config_file_opt="-F $ssh_config_file" - ghe-ssh-config "$GHE_HOSTNAME" "$ghe_mysql_master" > "$ssh_config_file" - port=$(ssh_port_part "$GHE_HOSTNAME") - ghe_mysql_master=$ghe_mysql_master${port:+:$port} - fi -else - ghe_mysql_master=$GHE_HOSTNAME -fi - if is_binary_backup_feature_on; then # Feature "mysql.backup.binary" is on, which means new backup scripts are available if is_binary_backup; then + if $CLUSTER ; then + ghe_mysql_master=$(ghe-ssh "$GHE_HOSTNAME" ghe-config "cluster.mysql-master") + if [ -z $ghe_mysql_master ]; then + echo "Something is wrong with configuration: cluster.mysql-master not found" >&2 + exit 2 + else + tempdir=$(mktemp -d -t backup-utils-restore-XXXXXX) + ssh_config_file="$tempdir/ssh_config" + ssh_config_file_opt="-F $ssh_config_file" + ghe-ssh-config "$GHE_HOSTNAME" "$ghe_mysql_master" > "$ssh_config_file" + port=$(ssh_port_part "$GHE_HOSTNAME") + ghe_mysql_master=$ghe_mysql_master${port:+:$port} + fi + else + ghe_mysql_master=$GHE_HOSTNAME + fi + # Check if the decompress needed by looking into the sentinel file # In 2.19.5 we compress the binary backup twice if [ "$(cat $snapshot_dir/mysql-binary-backup-sentinel)" = "NO_ADDITIONAL_COMPRESSION" ]; then