| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/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
|