«

xtrabackup恢复数据库脚本

指尖二进制 • 1 年前 • 839 次点击 • XTRABACKUP


xtrbackup恢复数据库脚本
恢复数据库采用脚本恢复,默认只需要修改new target mysql conf个和ource old mysql info变量

#!/bin/bash
#### setting ####
MYSQL_CMD=/usr/bin/mysql
MYSQL_ADMIN_CMD=/usr/bin/mysqladmin
MYSQL_UPGRADE=/usr/bin/mysql_upgrade
########### new target mysql conf ##############
host='172.16.0.147'
port=3306
user='root'
passwd='123456'
conf='/etc/mysql/mysql.conf.d/mysqld.cnf'
socket='/var/run/mysqld/mysqld.sock'
# this is your mysql data dir
data_dir='/var/lib/mysql'
log_file='./log_restore.log'

######### source old mysql info ###########
# this is target_dir in backup.sh
source_dir='/root/xfull'
# this is passwd in backup.sh
source_passwd='123456'

#### run ####
echo "[start restore]"
echo "[start restore]" > ${log_file}
date >> ${log_file}

if [ ! -d ${source_dir} ]; then
    echo "[ERROR] exit with error: no source_dir ${source_dir}"
    echo "[ERROR] exit with error: no source_dir ${source_dir}" >> ${log_file}

    exit 1
fi

cmd="[INFO] check if innobackupex installed..."
if [ `command -v innobackupex | wc -l` -eq 0 ]; then
    cmd="[ERROR] no innobackupex available, bye"
    echo ${cmd}
    echo ${cmd} >> ${log_file}
    exit 1
fi

# shutdown mysql if need
A=`ps -ef | grep 'mysql' | grep ${port} | grep -v 'grep' | wc -l`
if [ $A -ne 0 ]; then
    cmd="[WARNING] there is a mysql run on port ${port}, I will shutdown it"
    echo ${cmd}
    echo ${cmd} >> ${log_file}

    cmd="${MYSQL_ADMIN_CMD} -u ${user} --socket=${socket} --port=${port} -p${passwd} shutdown"
    echo ${cmd}
    echo ${cmd} >> ${log_file}
    sleep 2
    ${cmd}
    sleep 5
fi

# test if mysql  still run
A=`ps -ef | grep 'mysql' | grep ${port} | grep -v 'grep' | wc -l`
if [ $A -ne 0 ]; then
    cmd="# sorry I cannot stop mysql ${host}:${port}, your conf info is wrong, bye"
    echo ${cmd}
    echo ${cmd} >> ${log_file}
    exit 1
fi

# restore bin log
cmd="innobackupex --defaults-file=${conf} --user=${user} --password=${passwd} --use-memory=2G --port=${port} --apply-log ${source_dir}"
echo ${cmd}
echo ${cmd} >> ${log_file}
sleep 2
${cmd}

# backup old data_dir
if [ -d ${data_dir} ]; then
    cmd="[WARNING] found old data dir: ${data_dir}, I will mv it"
    echo ${cmd}
    echo ${cmd} >> ${log_file}

    old_data_dir="${data_dir}.`date "+%Y_%m_%d_%H_%M_%S"`"
    cmd="mv ${data_dir} ${old_data_dir}"
    echo ${cmd}
    echo ${cmd} >> ${log_file}
    sleep 2
    ${cmd}

fi

# move new data_dir to right place
cmd="mv ${source_dir} ${data_dir}"
echo ${cmd}
echo ${cmd} >> ${log_file}
sleep 2
${cmd}

# test if data dir restore ok
if [ ! -d ${data_dir} ]; then
    cmd="[ERROR] sorry I cannot restore data dir: ${data_dir}, your conf info is wrong, bye"
    echo ${cmd}
    echo ${cmd} >> ${log_file}
    exit 1
fi

# chown for mysql
cmd="chown -R mysql:mysql ${data_dir}"
echo ${cmd}
echo ${cmd} >> ${log_file}
sleep 2
${cmd}

cmd="[INFO] restore down, next you should try start mysql, eg: \n
service mysql${port} start \n \n

# and run mysql_upgrade: \n
${MYSQL_UPGRADE} -u${user} --socket=${socket} -p${source_passwd} --port=${port} \n \n

# and test login: \n
${MYSQL_CMD} -u ${user} --port=${port} --socket=${socket} -p${source_passwd} \n \n

# and change passwd if needed:\n
${MYSQL_ADMIN_CMD} -u ${user} -p${source_passwd} password '${passwd}' --port=${port} --socket=${socket} \n \n

# and test login again with new passwd: \n
${MYSQL_CMD} -u ${user} --port=${port} --socket=${socket} -p${passwd} \n \n

# and clear history cmd: \n
history -c \n
"
echo -e ${cmd}
echo -e ${cmd} >> ${log_file}
date >> ${log_file}
还没收到回复