#!/usr/bin/env bash
set +o errexit
set -o nounset
set -o pipefail
# set -o xtrace
printf "\n## Full backup databases begins ... \n"
printf "\n## Current date is %s \n" "$(date)"
currentDate=$(date +%Y%m%d)
rootpath="/data/fullbackup/"
backuppath=$rootpath$currentDate
database1="^cbs*"
database2="^nl_*"
database_dumpdir1="CBS"
database_dumpdir2="NL"
tidbHost="10.26.2.1"
tidbPort=8000
tidbUser="mydumper"
tidbPassword="mydumper"
mydumperExePath="/home/tidb/bin/mydumper"

#. /home/tidb/.bash_profile
#. /home/tidb/.bashrc

function err_exit() {
  echo "ERROR: $1" 1>&2
  exit 1
}
function pre_checks() {
  which mysql >/dev/null 2>&1 || err_exit "mysql client not installed"
  which printf >/dev/null 2>&1 || err_exit "printf not found"
  which $mydumperExePath >/dev/null 2>&1 || err_exit "mydumper not found"
}
pre_checks
# prepare environment
mkdir -p $backuppath/



printf "\n## Increase TiKV GC life time to 3h\n"
        mysql -h$tidbHost -P$tidbPort -u$tidbUser -p$tidbPassword -Nse"update mysql.tidb set variable_value='3000h' where variable_name='tikv_gc_life_time';"
        mysql -h$tidbHost -P$tidbPort -u$tidbUser -p$tidbPassword -Nse"select variable_name,variable_value from mysql.tidb where variable_name='tikv_gc_life_time';"
printf "\nNow time is %s\n" "$(date)"
printf "\n## Backup all databases to %s \n" "${backuppath}" 
if [ ! -d "$backuppath" ]; then
        mkdir -p "${backuppath}"
fi
cd "$rootpath"
printf "********************* \n"
printf "backup elapsed time\n"
printf "\n$database_dumpdir1"
        time $mydumperExePath -h $tidbHost -P $tidbPort -u $tidbUser -p $tidbPassword -x $database1 -F 16 -t 10 --skip-tz-utc --long-query-guard 36000 --tidb-force-priority LOW_PRIORITY -o "$backuppath/$database_dumpdir1" 2>&1 |grep -Ev '^$|tidb_force_priority'
printf "\n$database_dumpdir2"
        time $mydumperExePath -h $tidbHost -P $tidbPort -u $tidbUser -p $tidbPassword -x $database2 -F 16 -t 10 --skip-tz-utc --long-query-guard 36000 --tidb-force-priority LOW_PRIORITY -o "$backuppath/$database_dumpdir2" 2>&1 |grep -Ev '^$|tidb_force_priority'
printf "********************* \n"
printf "\n## Reset TiKV GC life time to 1 hour\n"
        mysql -h$tidbHost -P$tidbPort -u$tidbUser -p$tidbPassword -Nse"update mysql.tidb set variable_value='1h' where variable_name='tikv_gc_life_time';"
        mysql -h$tidbHost -P$tidbPort -u$tidbUser -p$tidbPassword -Nse"select variable_name,variable_value from mysql.tidb where variable_name='tikv_gc_life_time';"

printf "\n## Today's backup directory volume is:\n"
du -sh $currentDate
