Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 22 additions & 16 deletions share/github-backup-utils/ghe-restore-mysql
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)"