Databases

Восстановление и бэкап MySQL базы используя бинарные логи

Большинство из вас любят делать резервное копирование баз данных используя всеми любимую утилиту mysqldump.
Данная программка крайне популярна среди пользователей веб-хостингов. Читая содержимое таблиц, она создаёт файл с SQL-инструкциями для последующего заполнения. Как правило, при использовании люди забывают про несколько ключевых моментов:

  • Если не использовать блокировку таблиц, вполне можно получить нарушение логических связей между содержимым таблиц(если в процессе создания копии кто-то решит оставить запись в базе). Здесь косвенно может помочь накатывание части bin-log`a после восстановления из дампа. Так что если по каким-то причинам не блокируете таблицы — применяйте ключ —flush-log — при его использовании старый лог будет закрыт и начат новый. Если кто-то что-то запишет в процессе создания бэкапа — это отразится в начале журнала и вы без проблем перенесёте это изменение в базу. Я бы советовал после окончания бэкапа так же выполнить mysqladmin -flush-logs и положить в бэкап помимо dump-файла предпоследний бинарный журнал.
  • При использовании ключа —lock-tables все таблицы получают блокировку записи, запросы встают в очередь. Это может привести к таймаутам на стороне клиента.
  • Стоит так же иметь ввиду, что подъём(как и создание дампа) большой базы, сохраненной таким образом может изрядно затянуться — в первом случае вы сгребаете из базы все записи, а при обратном варианте — скармливаете их ей. Тем не менее, это один из немногих способов сбэкапить базу из консоли, не имея root-доступа.

More →

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Backup MSSQL

Полный бэкап раз в сутки.

@echo off
rem База которую бэкапим
set DB=UPP
rem Куда бэкапим
set bkdir=C:

set bkpath=%bkdir%\%date%

if not exist "%bkpath%" mkdir "%bkpath%"

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %DB% TO DISK='%bkpath%\backup_%DB%.bak';RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%DB%.bak'" -o %bkpath%\backup_%DB%.log

Разностный бэкап через каждые 4 часа

@echo off
rem База которую бэкапим
set DB=UPP
rem Куда бэкапим
set bkdir=C:
set bkpath=%bkdir%\%date%

if not exist "%bkpath%" mkdir "%bkpath%"

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %DB% TO DISK='%bkpath%\backup_%DB%.bak' WITH DIFFERENTIAL;RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%DB%.bak'" -o %bkpath%\backup_%DB%.log

Одним скриптом

@echo off

set db=%1
set bkdir=%2
set type=%3

if "%db%" == "" (

    echo "usage: %0 <dbname> <path> <diff|full>"
        exit /b 1

) else (
    if "%bkdir%" == "" (

        echo "usage: %0 %db% <path> <diff|full>"
            exit /b 1

    ) else (

        if "%type%" == "full" (

            set bkpath=%bkdir%\%date%
            if not exist "%bkpath%" mkdir "%bkpath%"
            "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %db% TO DISK='%bkpath%\backup_%db%.bak';RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%db%.bak'" -o %bkpath%\backup_%db%.log

        ) else (

            if "%type%" == "diff" (

                if not exist "%bkdir%" (

                    echo First run full backup.
                    exit /b 1

                ) else (
                    set bkpath=%bkdir%\%date%
                    "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %db% TO DISK='%bkpath%\backup_%db%.bak' WITH DIFFERENTIAL;RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%db%.bak'" -o %bkpath%\backup_%db%.log
   
                )

            ) else (

                echo "usage: %0 %db% %bkpath% <diff|full>"
                    exit /b 1
            )
        )  
    )
)
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong