From 3cfd912784a19ff9f5240012be9b26b72e315eac Mon Sep 17 00:00:00 2001 From: george Date: Thu, 3 Nov 2022 10:03:30 -0400 Subject: [PATCH] 2022-11-03 10:03:30 --- README.md | 3 +++ install_fmprivbin | 8 ++++++ mysql1_tunnel_helper | 10 ++++++++ restore-mysql-daily | 58 ++++++++++++++++++++++++++++++++++++++++++++ showslavestats | 2 ++ 5 files changed, 81 insertions(+) create mode 100644 README.md create mode 100644 install_fmprivbin create mode 100644 mysql1_tunnel_helper create mode 100644 restore-mysql-daily create mode 100644 showslavestats diff --git a/README.md b/README.md new file mode 100644 index 0000000..438c295 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +uhh... + +some scripts i want to keep handy diff --git a/install_fmprivbin b/install_fmprivbin new file mode 100644 index 0000000..6a45412 --- /dev/null +++ b/install_fmprivbin @@ -0,0 +1,8 @@ +#!/bin/bash +apt install -y python3-pip +pip3 install pbincli +mkdir -p ~/.config/pbincli/ && echo "server=https://bin.fmdevteam.com +short=true +short_api=custom +short_url=https://sh.fmdevteam.com/rest/v1/short-urls/shorten?apiKey=0ed64da7-9c67-4fcc-8d77-32923e5729c0&format=txt&longUrl=" >> ~/.config/pbincli/pbincli.conf +ln -s /usr/local/bin/pbincli /usr/local/bin/pb diff --git a/mysql1_tunnel_helper b/mysql1_tunnel_helper new file mode 100644 index 0000000..02562f8 --- /dev/null +++ b/mysql1_tunnel_helper @@ -0,0 +1,10 @@ +#!/bin/bash +NAME=$(logname); read -i "$NAME" -p 'username: ' -e NAME +IPADDR=$(curl -s ifconfig.me); read -i "$IPADDR" -p 'IP address: ' -e IPADDR +KEYFILE=$(find . -type f -name $NAME.key); read -i "$KEYFILE" -p 'SSH identity key: ' -e KEYFILE +if \[ -d "/usr/local/bin" \]; then WRITEPATH="/usr/local/bin" +elif \[ -d "/usr/bin" \]; then WRITEPATH="/usr/bin" +else WRITEPATH=$(pwd -P); fi +echo "'my1tun' will be written to $WRITEPATH" +echo "ssh -i $KEYFILE -v -N -M -S ~/.$NAME.mysql\_socket -L3306:mysql1.green-applications.com:3306 $NAME@$NAME.fmdevteam.com -o ServerAliveInterval=30" | tee "$WRITEPATH/my1tun" +chmod +x "$WRITEPATH/my1tun" diff --git a/restore-mysql-daily b/restore-mysql-daily new file mode 100644 index 0000000..fee323e --- /dev/null +++ b/restore-mysql-daily @@ -0,0 +1,58 @@ +#!/bin/bash +ARCHPATH='/path/to/backup/daily/*' +SKIPDBS=('mysql' 'tables' 'to' 'skip') +FULLRESTORE=true +SKIPDBS=('mysql') +SETPOSDB=null +#--- + +START=$(date +%s) +echo -e "\n--START: $(date +%F\ %T)\nrestoring most recent backups from $ARCHPATH\n\n" +mysql -e "STOP SLAVE;" + + +if [[ $FULLRESTORE == false ]]; then + OLDDATE=$(ls -1d $ARCHPATH | head -1) +fi + +NEWDATE=$(ls -1rd $ARCHPATH | head -1) +for FILE in $NEWDATE/backup_data/*.gz; do + FILE=$(basename $FILE) + if [[ "${SKIPDBS[*]}" =~ ${FILE%%.*} ]]; then echo "--$FILE";continue; fi; + if [[ "${SETPOSDB}" =~ ${FILE%%.*} ]]; then SETPOSFILE=$FILE;continue; fi; + if [[ -z $OLDDATE ]]; then + OLDSIZE=$(stat -c %s $OLDDATE/backup_data/$FILE) + else + OLDSIZE=0 + fi + + NEWSIZE=$(stat -c %s $NEWDATE/backup_data/$FILE) + + if [[ $OLDSIZE != $NEWSIZE ]]; then + STARTLOOP=$(date +%s) + echo $(date +%F\ %T) + echo "$FILE:" + DB=$(echo $FILE | cut -f1 -d'.') + echo -e "\tmysql -e 'DROP DATABASE IF EXISTS $DB' + mysql -e 'CREATE DATABASE $DB' + gunzip < $NEWDATE/backup_data/$FILE | mysql $DB" + mysql -e "DROP DATABASE IF EXISTS $DB" + mysql -e "CREATE DATABASE $DB" + gunzip < $NEWDATE/backup_data/$FILE | mysql $DB + ENDLOOP=$(date +%s) + EXCTIME=$(expr $ENDLOOP - $STARTLOOP) + printf '\t%02dh:%02dm:%02ds\n' $((EXCTIME/3600)) $((EXCTIME%3600/60)) $((EXCTIME%60)) + fi +done + +if [[ -z $SETPOSFILE ]]; then + SETPOSSTMT =$(zcat $ARCHPATH$SETPOSFILE|head -40|rg MASTER|sed 's/-- //') + echo "\n$SETPOSSTMT\n" + mysql -e $SETPOS +fi + +mysql -e "START SLAVE" +END=$(date +%s) +EXCTIME=$(expr $END - $START) +printf 'total runtime: %02dh:%02dm:%02ds\n' $((EXCTIME/3600)) $((EXCTIME%3600/60)) $((EXCTIME%60) +echo "--END: $(date +%F\ %T)\n\n" diff --git a/showslavestats b/showslavestats new file mode 100644 index 0000000..886e2e6 --- /dev/null +++ b/showslavestats @@ -0,0 +1,2 @@ +#!/bin/bash +mysql -e 'SHOW SLAVE STATUS\G' | tee /dev/stderr | grep 'Seconds_Behind_Master' | cut -d':' -f2 | read seconds && eval "echo $(date -ud "@$seconds" +'$((%s/3600/24)) days %H hours %M minutes %S seconds')"