sh 从备份中简单还原cms db

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh 从备份中简单还原cms db相关的知识,希望对你有一定的参考价值。

#!/bin/sh

echo " -- Restore CMS DB // JoomlaWordpress."

#var list: backup dir, site doc_root, conf dir, cur dir
restorepath="`realpath $1`"
sitepath="`realpath $2`"
joomname="$sitepath/configuration.php"
wpname="$sitepath/wp-config.php"

#error syntax
syntax() {
        echo " ** cms_dbrestore <путь_до_директории_бекапа> <путь_до_корневой_директории_сайта>" >&2
}

#define CMS:
detect() {
        if [ -f "$joomname" ]; then
            cms="joomla"
                else
                if [ -f "$wpname" ]; then
                    cms="wordpress"
                        else
                        cms="not_found"
                fi
        fi
}

#parsing CMS Joomla config 
jparse () {
        DB_NAME=`php -r 'include("configuration.php"); $j = new JConfig; echo $j->db;'` || return 1
        DB_USER=`php -r 'include("configuration.php"); $j = new JConfig; echo $j->user;'`
        DB_PASSWORD=`php -r 'include("configuration.php"); $j = new JConfig; echo $j->password;'`
        echo " -- $DB_NAME $DB_USER $DB_PASSWORD"
}

#parsing CMS WordPress config

wparse () {
        DB_NAME=`php -r 'include("wp-config.php"); echo DB_NAME;'` || return 1
        DB_USER=`php -r 'include("wp-config.php"); echo DB_USER;'`
        DB_PASSWORD=`php -r 'include("wp-config.php"); echo DB_PASSWORD;'`
        echo " -- $DB_NAME $DB_USER $DB_PASSWORD"
}

#backup current db

curdump () {
        now=`date '+%d.%m.%g-%X'`;
        dumpdir="$HOME/backups/pre/$now/db"
        mkdir -p "$dumpdir"
        dumpname="$dumpdir/$DB_NAME.sql"
        mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$dumpname" || return 1
        gzip "$dumpname"
        echo " -- Дамп текущей базы данных сохранен по пути: $dumpname"
}

#clear cur db
cleardb () {
            echo " -- Стираю содержимое базы."
            MYSQL_RESULT=`mysql -e 'drop database '"$DB_NAME" -u "$DB_USER" --password="$DB_PASSWORD"` || return 1
            MYSQL_RESULT=`mysql -e 'create database '"$DB_NAME" -u $DB_USER --password="$DB_PASSWORD"` || return 1
}
#restore DB from backup
restoredb () {
        echo " -- Перехожу в директорию с бекапом таблиц."
        cd "$restorepath"
        for i in *.sql.gz ; do gzcat "$i" ; done | mysql -u "$DB_USER" --password="$DB_PASSWORD" "$DB_NAME" || return 1
}

#checking exist of args paths
if [ ! -e "$restorepath" ];
    then

    syntax
    exit 1
fi
if [ ! -e  "$sitepath" ]; then
    syntax
    exit 1
fi

#main script

#detect CMS
detect
echo " -- Определение CMS: $cms"
#переходим в директорию сайта для того, чтобы парсить данные
cd "$sitepath"
echo " -- Определяем параметры подключения к базе данных."
case "$cms" in
    "joomla")
    jparse
    ;;
    "wordpress")
    wparse
    ;;
    *)
    echo " !! Не удалось определить CMS." >&2
    exit 1
    ;;
esac

#if *sql.gz exist in backup dir
if !(ls "$restorepath" | grep -qm 1 ".sql.gz") ; then
    echo " !! Не удалось найти файлы *.sql.gz" >&2
    exit 1
fi

#dumping cur db
curdump || {
    echo " !! Не удалось создать дамп текущей базы данных." >&2
    exit 1
}

#clear cur db
cleardb || {
    echo " !! Не удалось очистить базу данных." >&2
    exit 1
}

#change dir
restoredb || {
    echo " !! Не удалось выполнить восстановление базы данных." >&2
    exit 1
}

echo " -- Восстановление завершено. Проверьте, пожалуйста."

以上是关于sh 从备份中简单还原cms db的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver怎么还原备份数据

DB2数据库在线备份还原笔记

DB2备份还原中常用的sql语句

迁移MSSql Db - 来自SQL Server 2008 R2 Enterprise备份可以在SQL Server 2008 R2 Express版本中还原

ORA-01152: 文件 1 没有从过旧的备份中还原

sh 备份或还原单个数据库表