1 Востаннє редагувалося fed_lviv (24.02.2015 10:10:37)

Тема: BAT файл для копіювання БД

Створюю bat файл для автоматичного резервування БД (ставлю його на виконання кожного дня о 12:00). Ось, що на разі маю:

@echo off

rem Змінні
set PATHDIR="C:\Documents and Settings\Admin\MySQL"
set MYDATE=%date:~6,4%-%date:~3,2%-%date:~0,2%

echo *****CREATE DIRECTORY IF NOT EXIST*****
if not exist %PATHDIR% mkdir %PATHDIR%

echo *****DELETE ALL SQL FILES*****
del %PATHDIR%\*.sql

echo *****DUMP DATABASE my_database*****
mysqldump -h127.0.0.1 -uroot -p1111 my_database > %PATHDIR%\DB_my_database_%MYDATE%.sql

echo *****DUMP ROUTINES FORM DATABASE my_database*****
mysqldump -h127.0.0.1 -uroot -p1111 --routines --no-create-info --no-data --no-create-db --skip-opt my_database > %PATHDIR%\ROUTINES_my_database_%MYDATE%.sql

Проблема в тому, що я СПОЧАТКУ видаляю всі файли.sql, а потім створюю копії (2 файла: всі таблиці БД та процедури БД). Підкажіть будь-ласка, як правильно написати в файлі.bat таку послідовність: Спочатку створюється два нових файла.sql, потім перевіряється в папці кількість файлів.sql і якщо кількість файлів.sql більша за 2, видаляються всі файли.sql, окрім двох найновіших (створених найпізніше)

Подякували: Chemist-i1

2 Востаннє редагувалося fed_lviv (25.02.2015 10:22:30)

Re: BAT файл для копіювання БД

читання+муки+спроби=

@echo off

rem Ініціалізація змінних
set HOST=127.0.0.1
set USER=root
set PASSWORD=1111
set DBNAME=my_database
set PATHDIR="C:\Documents and Settings\Admin\MySQL"
set MYDATE=%date:~6,4%-%date:~3,2%-%date:~0,2%
set COUNTFILES=2

if not exist %PATHDIR% (
    echo *****CREATE DIRECTORY*****
    mkdir %PATHDIR%
)

echo *****CHANGE DIRECTORY*****
cd %PATHDIR%

echo *****DUMP DATABASE*****
mysqldump -h%HOST% -u%USER% -p%PASSWORD% %DBNAME% > DB_%DBNAME%_%MYDATE%.sql

echo *****DUMP ROUTINES FORM DATABASE*****
mysqldump -h%HOST% -u%USER% -p%PASSWORD% --routines --no-create-info --no-data --no-create-db --skip-opt %DBNAME% > ROUTINES_%DBNAME%_%MYDATE%.sql

echo *****DELETE OLD DUMPS*****
for /F "skip=%COUNTFILES%" %%i in ('dir /o:-d /a:-d /b *.sql') do del %%i

Можливо комусь знадобиться

Подякували: Анатолій2

3

Re: BAT файл для копіювання БД

fed_lviv написав:

читання+муки+спроби=
....
Можливо комусь знадобиться

Можливо,.. мені знадобиться,... а можна детальніше, для початківців, якщо не складно, структуру резервування БД, хто виконує резервування і яким чином?
Exe-файлик чи можливо якась опція є в самій Системі керування БД чи ще якимсь чином?
Я взагалі то планую дома поставити БД та СКБД, але ще до того не дійшов....

Збираю знання і... роздаю знання :)

4

Re: BAT файл для копіювання БД

У мене на минулій роботі дампи в SVN заливалися. Плюс був у тому, що навіть якщо у базі з'явиться якась помилка, яку знайдуть лише через тиждень/місяць, цю помилку буде дуже легко знайти та виправити. Мінус у тому, що якщо в базу щодня вноситься багато змін, і сам дамп досить великий, то репозиторій SVN буде дуже швидко рости. В моєму випадку із цим проблем не було, бо усі об'ємні дані зберігалися не у базі, а окремо, у спеціальних папках. Ну й бекапилися також окремо.

Подякували: Анатолій1

5

Re: BAT файл для копіювання БД

Анатолій написав:

Можливо,.. мені знадобиться,... а можна детальніше, для початківців, якщо не складно, структуру резервування БД, хто виконує резервування і яким чином?
Exe-файлик чи можливо якась опція є в самій Системі керування БД чи ще якимсь чином?
Я взагалі то планую дома поставити БД та СКБД, але ще до того не дійшов....

Для резервування БД в MySQL є mysqldump.exe, за допомогою неї проводиться бекап БД, можна через Workbench, але в принципі він теж робить резервування через mysqldump.exe просто не треба в cmd це все прописувати. Для автоматичного резервування, я зробив bat файл, який закинув в "Назначения задания". В Linux для цього застосовується cron.