#!/bin/bash armb_ver='4_090617' log_file=/var/log/${0##*/}.log lock_file=/tmp/${0##*/}.lock dumps_dir='/var/backups/mysql/daily_from_vs05' mysql_data_dir='/var/lib/mysql' db_name='' db_user='' db_pass='' db_connection_host='' mysql_bin="`which mysql` -u root -h localhost -p`cat /root/.mysql`" latest_dump=`find $dumps_dir -maxdepth 1 -type f -name "*.snapshot.sql.*" -printf '%T@ %p\n' | sort -n | tail -1 | cut -d' ' -f 2` function update_date() { test -f $latest_dump || { echo "`date '+%Y/%m/%d:%H:%M:%S'` Error. File $latest_dump doesn't exist!"; return 1; } latest_date=`date '+%Y-%m-%d %H:%M:%S' -r $latest_dump` echo "`date '+%Y/%m/%d:%H:%M:%S'` Starting update date in table." $mysql_bin -B -N -e "UPDATE db_date SET mydate=\"${latest_date}\";" $db_name && \ echo "`date '+%Y/%m/%d:%H:%M:%S'` Update date in table finished." || \ { echo "`date '+%Y/%m/%d:%H:%M:%S'` Error. Something go wrong on update date in table."; return 1; } } function init_db() { echo "`date '+%Y/%m/%d:%H:%M:%S'` Starting function init_db" $mysql_bin -B -N -e "USE $db_name; CREATE TABLE db_date (mydate DATETIME); INSERT INTO db_date SET mydate=NOW();" && \ echo "`date '+%Y/%m/%d:%H:%M:%S'` Table \"db_date\" created in $db_name. Starting function update_date" && \ update_date echo "`date '+%Y/%m/%d:%H:%M:%S'` Create privileges" $mysql_bin -B -N -e "GRANT ALL PRIVILEGES ON $db_name.* TO db_user@$db_connection_host IDENTIFIED BY \"$db_pass\";" } function stop_mysql() { echo "`date '+%Y/%m/%d:%H:%M:%S'` Starting function stop_mysql" /etc/init.d/mysql stop if pgrep -x mysqld >/dev/null then echo "`date '+%Y/%m/%d:%H:%M:%S'` Error. Something go wrong, Mysql process still running!!!" return 1 fi } function start_mysql() { echo "`date '+%Y/%m/%d:%H:%M:%S'` Starting function start_mysql" /etc/init.d/mysql start if ! pgrep -x mysqld >/dev/null then echo "`date '+%Y/%m/%d:%H:%M:%S'` Error. Something go wrong, Mysql process don't start!!!" return 1 fi } function extract_dump() { echo "`date '+%Y/%m/%d:%H:%M:%S'` Extract dump-file $latest_dump to $mysql_data_dir" test -d $mysql_data_dir || mkdir -p $mysql_data_dir tar -xvzf $latest_dump -C $mysql_data_dir && \ echo "`date '+%Y/%m/%d:%H:%M:%S'` Extract dump-file $latest_dump to $mysql_data_dir finished" || \ { echo "`date '+%Y/%m/%d:%H:%M:%S'` Error. Something go wrong on extract dump-file $latest_dump to $mysql_data_dir!"; return 1; } } function change_datadir() { echo "`date '+%Y/%m/%d:%H:%M:%S'` Starting function move_datadir" which innobackupex > /dev/null 2>&1 || { echo "`date '+%Y/%m/%d:%H:%M:%S'`Error. No innobackupex installed!"; return 1; } stop_mysql && \ test -d $mysql_data_dir -a "$mysql_data_dir" != '/' && { echo "`date '+%Y/%m/%d:%H:%M:%S'` Remove $mysql_data_dir" chattr -i $mysql_data_dir/my.cnf rm -rf $mysql_data_dir && \ extract_dump && \ chattr -i $mysql_data_dir/my.cnf && \ chown -R mysql:mysql $mysql_data_dir } && \ start_mysql } which flock > /dev/null || { echo "No flock installed. You need to install flock first."; exit 1;} { flock -n 9 || { echo "Another copy of ${0##*/} is still running on $myhostname. Lock file $lock_file locked.\n"; exit 1; } test -f $log_file && mv $log_file $log_file.1 { echo "`date '+%Y/%m/%d:%H:%M:%S'` Importing dump-file $latest_dump" change_datadir && \ init_db echo "`date '+%Y/%m/%d:%H:%M:%S'` Importing dump-file $latest_dump finished." } >> $log_file 2>> >(tee -a $log_file >&2) } 9> $lock_file test -f $lock_file && rm -f $lock_file