Initial import

This commit is contained in:
2017-02-21 02:31:30 +01:00
commit 9ec6b1c2e1
12 changed files with 2770 additions and 0 deletions

148
OLD/dump_all_mysql_dbs.sh Executable file
View File

@ -0,0 +1,148 @@
#!/usr/bin/env bash
## - *** some defines *** - ##
## - Backup direction
## -
backup_base_dir=$1
backup_base_dir=${backup_base_dir:="/data/backup"}
backup_dir=${backup_base_dir}/mysql
mkdir -p $backup_dir
_local=$2
_local=${_local:=false}
mkdir -p $backup_dir
## - Database connection data
## -
db_user=backup
db_pass=Rgfwcsgth6Zjk4W
db_host=localhost
db_port=3306
## - Some needed binaries
## -
mysql_bin=`which mysql`
mysqldump_bin=`which mysqldump`
mkdir_bin=`which mkdir`
date_bin=`which date`
gzip_bin=`which gzip`
find_bin=`which find`
if [ -z "$mysql" ]; then
mysql="/usr/local/mysql/bin/mysql"
fi
if [ -z "$mysqldump" ]; then
mysqldump="/usr/local/mysql/bin/mysqldump"
fi
YEAR=`date +"%Y"`
MONTH=`date +"%m"`
DAY=`date +"%d"`
HOUR=`date +"%H"`
MINUTE=`date +"%M"`
DATE=${YEAR}${MONTH}${DAY}-${HOUR}${MINUTE}
## - Hold backups at least $days days
## -
days=3
## - ** End: some defines *** - ##
DATABASES=`$mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass -N -s -e 'show databases'`
## - backup all databases
## -
for i in $DATABASES ; do
$mkdir_bin -p ${backup_dir}/${i}
mysqldump_flags="--opt --routines -l"
if [ "$i" = "information_schema" -o "$i" = "performance_schema" ];then
mysqldump_flags="--single-transaction $mysqldump_flags"
fi
echo -e "\tsave database $i ..."
$mysqldump_bin $mysqldump_flags -h$db_host -P$db_port -u$db_user -p$db_pass $i | \
$gzip_bin | cat > ${backup_dir}/${i}/${i}-${DATE}.sql.gz
## - dumptables "user" and "db" from database mysql"
## -
if [ "$i" = "mysql" ]; then
_flags="--add-locks --disable-keys --extended-insert --lock-tables --quick --no-create-info"
_table=user
## - dump table user (database mysql)
## - each row as aseperate sql statement
## -
## - | awk '{gsub(/\),\(/,");\n(")}; 1'
## - | sed 's/^(/INSERT INTO `user` VALUES (/'
## -
## - delete row containig host = "localhost" with empty user and password
## - sed "/^INSERT INTO \`user\` VALUES ('[^']*','root',.\+/d"
## -
## - delete rows containig user "root"
## - sed "/^INSERT INTO \`user\` VALUES ('[^']*','root',.\+/d"
## -
## - delete rows containig user "debian-sys-maint"
## - sed "/^INSERT INTO \`user\` VALUES ('[^']*','debian-sys-maint',.\+/d"
## -
$mysqldump_bin $_flags -h$db_host -P$db_port -u$db_user -p$db_pass $i $_table \
| awk '{gsub(/\),\(/,");\n(")}; 1' \
| sed "s/^(/INSERT INTO \`$_table\` VALUES (/" \
| sed "/^INSERT INTO \`$_table\` VALUES ('localhost','','','.*/d" \
| sed "/^INSERT INTO \`$_table\` VALUES ('[^']*','root','.*/d" \
| sed "/^INSERT INTO \`$_table\` VALUES ('[^']*','debian-sys-maint','.*/d" \
> ${backup_dir}/${i}/${i}-${_table}-${DATE}.sql
_table=db
## - dump table db (database mysql)
## - each row as aseperate sql statement
## -
## - | awk '{gsub(/\),\(/,");\n(")}; 1'
## - | sed 's/^(/INSERT INTO `user` VALUES (/'
## -
## - delete rows for database names "test*"
## - sed "/^INSERT INTO \`$_table\` VALUES ('[^']*','test[^']*','.*/d"
## -
$mysqldump_bin $_flags -h$db_host -P$db_port -u$db_user -p$db_pass $i $_table \
| awk '{gsub(/\),\(/,");\n(")}; 1' \
| sed "s/^(/INSERT INTO \`$_table\` VALUES (/" \
| sed "/^INSERT INTO \`$_table\` VALUES ('[^']*','test[^']*','.*/d" \
> ${backup_dir}/${i}/${i}-${_table}-${DATE}.sql
## - BSD sed is not GNU sed , so we used "awk" for substitution
## - a newline. On GNU sed (like on linux systems), also the
## - following sed statement works
## -
#| sed 's/),(/);\n(/g' \
fi
done
## - Create archive from the whole backup
## -
if ! $_local ; then
_curdir=`pwd`
cd $backup_dir
cd .. > /dev/null 2>&1
tar -czf mysql_dump-${DATE}.tar.gz `find mysql -name "*${DATE}*"`
cd $_curdir
fi
## - remove all files older than $days days..
## -
$find_bin $backup_dir -type f -mtime +${days} -exec rm {} \;
exit 0

212
OLD/restore_all_mysql_dbs.sh Executable file
View File

@ -0,0 +1,212 @@
#!/usr/bin/env bash
## - Database connection data
## -
db_user=root
db_pass=
db_host=localhost
db_port=3306
## - Some needed binaries
## -
mysql_bin=`which mysql`
mysqldump_bin=`which mysqldump`
gunzip_bin=`which gunzip`
find_bin=`which find`
echononl(){
echo X\\c > /tmp/shprompt$$
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
echo "$*\\c" 1>&2
else
echo -n "$*" 1>&2
fi
rm /tmp/shprompt$$
}
fatal(){
echo ""
echo Fehler: $*
echo -e "\n\t\033[31m\033[1mSkript wird abgebrochen\033[m\033[m\n"
exit 1
}
echo ""
echo -n "Give password for database user \"${db_user}\" [$db_pass]: "
stty -echo
read _pass
stty echo
while [ "X" == "X$_pass" ];do
echononl "Enry must not be empty! []: "
stty -echo
read _pass
stty echo
done
db_pass=$_pass
echo ""
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
BACKUP_BASE_DIR="/data/backup/mysql"
if [ ! -d $BACKUP_BASE_DIR ] ; then
echo
echo " Backup directory not found"
echo
exit 1
fi
logfile=restore_db_mysql.log
databases=`$find_bin $BACKUP_BASE_DIR -maxdepth 1 -mindepth 1 -type d -exec basename {} \;`
echo ""
echo "Do you want me restoring also the MySQL intern Database \"mysql\""
echo ""
_opt1="Yes, restore all table of intern database \"mysql\""
_opt2="Only add not present entries to table \"user\" and table \"db\""
_opt3="No, let all tables from MySQL intern database \"mysql\" untouched"
_opt4="QUIT - exit script NOW"
options=("$_opt1" "$_opt2" "$_opt3" "$_opt4")
PS3="Choose (1-4):"
_restore_mysql=3
select opt in "${options[@]}"
do
case $opt in
$_opt1)
_restore_mysql=1
break
;;
$_opt2)
_restore_mysql=2
break
;;
$_opt3)
_restore_mysql=3
break
;;
$_opt4)
exit 2
;;
*)
echo ""
echo "!! INVALID CHOISE !!"
echo ""
echo "1) $_opt1"
echo "2) $_opt2"
echo "3) $_opt3"
echo ""
;;
esac
done
echo -e "\n\tRestoring Databases\n"
for db in $databases ; do
#[ "$db" = "information_schema" ] && continue
_list=`ls -d -t ${BACKUP_BASE_DIR}/$db/*.sql.gz`
file=`echo $_list | awk '{print$1}'`
if [ "$db" = "information_schema" ]; then
echo ""
echononl "Do you want to restore database \"$db\" too? [yes/no]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xja" -a "X$OK" != "XJa" \
-a "X$OK" != "XNo" -a "X$OK" != "Xno" -a "X$OK" != "Xn" -a "X$OK" != "Xnein" -a "X$OK" != "XNein" ]; do
echononl "Incorrect entry! [yes/no]: "
read OK
done
echo ""
if [ $OK = "Yes" -o $OK = "yes" -o "$OK" = "ja" -o "$OK" = "Ja" ]; then
echo -e "\t\trestoring ${db} (`basename $file`) .."
gunzip_bin < $file | mysql_bin -h$db_host -u$db_user -p'$db_pass $db'
fi
elif [ "$db" = "performance_schema" ]; then
echo ""
echononl "Do you want to restore database \"$db\" too? [yes/no]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xja" -a "X$OK" != "XJa" \
-a "X$OK" != "XNo" -a "X$OK" != "Xno" -a "X$OK" != "Xn" -a "X$OK" != "Xnein" -a "X$OK" != "XNein" ]; do
echononl "Incorrect entry! [yes/no]: "
read OK
done
echo ""
if [ $OK = "Yes" -o $OK = "yes" -o "$OK" = "ja" -o "$OK" = "Ja" ]; then
echo -e "\t\trestoring ${db} (`basename $file`) .."
gunzip_bin < $file | mysql_bin -h$db_host -u$db_user -p'$db_pass $db'
fi
elif [ "$db" = "mysql" ]; then
if [ "$_restore_mysql" = "1" ]; then
## - save entry for User "debian-sys-maint"
## -
declare -i num
num=0
num=`$mysql_bin -u$db_user -P$db_port -u$db_user -p$db_pass $db -N -s -e "SELECT count(*) from user Where USER = 'debian-sys-maint'"`
if [ $num -gt 0 ];then
COLUMNS=`$mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass -N -s -e "SHOW COLUMNS FROM user FROM mysql" | awk '{print$1}'`
stmt_update="";
for column in $COLUMNS ; do
val=""
val=`mysql -h$db_host -P$db_port -u$db_user -p$db_pass mysql -N -s -e "SELECT $column FROM user WHERE User = 'debian-sys-maint'"`
stmt_update="UPDATE user SET $column = '$val' WHERE User = 'debian-sys-maint';$stmt_update"
done
fi
echo -e "\t\trestoring ${db} (`basename $file`) .."
$gunzip_bin < $file | $mysql_bin -h$db_host -u$db_user -p$db_pass $db
if [ $num -gt 0 ];then
stmt_insert="INSERT INTO user (Host,User) VALUES ('localhost','debian-sys-maint')"
$mysql_bin -u$db_user -P$db_port -u$db_user -p$db_pass $db -N -s -e "$stmt_insert"
$mysql_bin -u$db_user -P$db_port -u$db_user -p$db_pass $db -N -s -e "$stmt_update"
fi
# FLUSH PRIVILEGES
$mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass -N -s -e "FLUSH PRIVILEGES"
echo ""
echo "If password for database user \"root\" has changed within restoring \"${db}\""
echo -n "database, enter the new one. If not, only type <return>: "
stty -echo
read _pass
stty echo
if [ "X" != "X$_pass" ];then
db_pass=$_pass
fi
echo -e "\n"
elif [ "$_restore_mysql" = "2" ]; then
echo ""
_tables="db user"
for _table in $_tables ; do
_list_table=`ls -d -t ${BACKUP_BASE_DIR}/$db/mysql-${_table}-*.sql`
file_table=`echo $_list_table | awk '{print$1}'`
echo -e "\t\trestoring table \"$_table\" from database ${db} (`basename $file_table`) .."
$mysql_bin -f -h$db_host -P$db_port -u$db_user -p$db_pass $db < $file_table
done
echo ""
fi
else
echo -e "\t\trestoring ${db} (`basename $file`) .."
$mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass -N -s -e "DROP DATABASE IF EXISTS $db"
$mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass -N -s -e "CREATE DATABASE $db CHARACTER SET utf8 COLLATE utf8_general_ci"
$gunzip_bin < $file | $mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass $db
fi
done
echo
$mysql_bin -h$db_host -P$db_port -u$db_user -p$db_pass -N -s -e "FLUSH PRIVILEGES"
exit 0