diff --git a/share/github-backup-utils/ghe-restore-mysql b/share/github-backup-utils/ghe-restore-mysql index bbcf3ab9a..a939c8d6d 100755 --- a/share/github-backup-utils/ghe-restore-mysql +++ b/share/github-backup-utils/ghe-restore-mysql @@ -38,21 +38,27 @@ 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 - ghe_mysql_master=$(ghe-ssh "$GHE_HOSTNAME" ghe-config "cluster.mysql-master") - if [ -z $ghe_mysql_master ]; then - ghe_mysql_master=$GHE_HOSTNAME - else - port=$(ssh_port_part "$GHE_HOSTNAME") - ghe_mysql_master=$ghe_mysql_master${port:+:$port} - fi -else - ghe_mysql_master=$GHE_HOSTNAME -fi - +ssh_config_file_opt= 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 @@ -79,16 +85,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)"