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

Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ matrix:
- brew install moreutils
- brew install shellcheck
- brew install jq
- brew install pigz
script: make test
- os: linux
dist: trusty
Expand All @@ -24,4 +25,5 @@ matrix:
- moreutils
- fakeroot
- jq
- pigz
script: debuild -uc -us
9 changes: 7 additions & 2 deletions bin/ghe-backup
Original file line number Diff line number Diff line change
Expand Up @@ -200,10 +200,15 @@ is_binary_backup(){

echo "Backing up MySQL database ..."
bm_start "ghe-export-mysql"
echo 'set -o pipefail; ghe-export-mysql | gzip' |
export_command="ghe-export-mysql"
if ! is_binary_backup; then
# binary backup is already compressed
export_command+=" | pigz"
fi
echo "set -o pipefail; $export_command" |
ghe-ssh "$GHE_HOSTNAME" -- /bin/bash > mysql.sql.gz || failures="$failures mysql"
if is_binary_backup; then
touch mysql-binary-backup-sentinel
echo "NO_ADDITIONAL_COMPRESSION" > mysql-binary-backup-sentinel
fi
bm_end "ghe-export-mysql"

Expand Down
44 changes: 33 additions & 11 deletions share/github-backup-utils/ghe-restore-mysql
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ ghe_remote_version_required "$GHE_HOSTNAME"
# The directory holding the snapshot to restore
snapshot_dir="$GHE_DATA_DIR/$GHE_RESTORE_SNAPSHOT"

cleanup() {
ghe-ssh "$GHE_HOSTNAME" -- "sudo rm -rf $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz"
}
trap 'cleanup' INT TERM EXIT

# Check if the backup is binary by looking up the sentinel file
is_binary_backup(){
test -f $snapshot_dir/mysql-binary-backup-sentinel
Expand All @@ -43,12 +38,33 @@ 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

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
IMPORT_MYSQL=ghe-import-mysql-xtrabackup
# 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
IMPORT_MYSQL=ghe-import-mysql-xtrabackup
GHE_RESTORE_HOST=$ghe_mysql_master
else
IMPORT_MYSQL="unpigz | ghe-import-mysql-xtrabackup"
GHE_RESTORE_HOST=$ghe_mysql_master
fi
else
IMPORT_MYSQL=ghe-import-mysql-mysqldump
IMPORT_MYSQL="unpigz | ghe-import-mysql-mysqldump"
GHE_RESTORE_HOST=$GHE_HOSTNAME
fi
else
# We do not allow to restore binary backup without "mysql.backup.binary" set
Expand All @@ -57,16 +73,22 @@ else
exit 2
else
# legacy mode
IMPORT_MYSQL=ghe-import-mysql
IMPORT_MYSQL="unpigz | ghe-import-mysql-mysqldump"
GHE_RESTORE_HOST=$GHE_HOSTNAME
fi
fi

ghe-ssh "$GHE_HOSTNAME" -- "sudo mkdir -p '$GHE_REMOTE_DATA_USER_DIR/tmp'" 1>&3
cleanup() {
ghe-ssh "$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

# Transfer MySQL data from the snapshot to the GitHub instance.
cat $snapshot_dir/mysql.sql.gz | ghe-ssh "$GHE_HOSTNAME" -- "sudo dd of=$GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz >/dev/null 2>&1"
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"

# Import the database
echo "gunzip -cd $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz | $IMPORT_MYSQL" | ghe-ssh "$GHE_HOSTNAME" -- /bin/bash 1>&3
echo "cat $GHE_REMOTE_DATA_USER_DIR/tmp/mysql.sql.gz | $IMPORT_MYSQL" | ghe-ssh "$GHE_RESTORE_HOST" -- /bin/bash 1>&3

bm_end "$(basename $0)"