[ОТВЕТИТЬ]
23.11.2016 14:49
yana2609
 
Подскажи, кто как и какими средствами делает ежедневное резервное копирование база укм4 ?
23.11.2016 15:14
УКМ_эксплуатант_2
 
MysqlDump+7zip
Потом сисодмины "выгнали": мы всю машину резервируем!!!

В общем, сейчас раз в неделю делаю дампы для своего спокойствия.
Но только СГО!
СМ-ы не трогаю (они прекарасно восстанавливаются с СГО в приемлемое время).
23.11.2016 15:28
Onesoft
 
Percona XtraBackup и Master-Slave репликация на резервный сервер. БД СГО на движке Percona Server 5.6 на CentOS 7.0 x64.
24.11.2016 09:44
AlgolB
 
Создай папку backup, в нее закидываешь файлы: 7z.exe, sleep.exe, cp.exe (можно найти в сети), создаешь файлы dumpdb-internal.cmd, fbackup.cmd, fbackup-internal.cmd, в диспечере задач прописываете запускать fbackup.cmd когда нужно делать бэкап.

Что в файлах:
fbackup.cmd

@echo off

SET FBACKUPLOG=fbackup.log
SET UKMFBACKUPCMD=fbackup-internal.cmd

echo -----------------------------------
echo Starting UKM backup
echo -----------------------------------

IF NOT EXIST %UKMFBACKUPCMD% GOTO file_not_found

call %UKMFBACKUPCMD% >> %FBACKUPLOG% 2>&1

IF %ERRORLEVEL% NEQ 0 GOTO error

echo ===================================
echo SUCCESS: backup complete
echo ===================================
exit 0

:file_not_found
echo ERROR: file not found
echo %UKMFBACKUPCMD%
echo ERROR: file not found >> %FBACKUPLOG%
echo %UKMFBACKUPCMD% >> %FBACKUPLOG%


:error
echo ===================================
echo ERROR: backup failed
echo ===================================
exit 1

dumpdb-internal.cmd

echo === %0 starting work ===
echo = %DATE% %TIME%

SET DBHOST=localhost
SET DBNAME=ukmserver
SET DBUSER=root
SET DBPASSWORD=CtHDbCGK.C
SET DBBACKUPFILE=d:\Backup\UKM\ukmserver-dump.sql
SET UKM_FULL_BACKUP_PATH=d:\Backup\UKM



echo -----------------------------------
echo DBHOST=%DBHOST%
echo DBNAME=%DBNAME%
echo DBUSER=%DBUSER%
echo DBPASSWORD=%DBPASSWORD%
echo DBBACKUPFILE=%DBBACKUPFILE%
echo -----------------------------------

echo SET FOREIGN_KEY_CHECKS = 0; > %DBBACKUPFILE%
echo CREATE DATABASE %DBNAME%; >> %DBBACKUPFILE%
echo use %DBNAME%; >> %DBBACKUPFILE%
c:\mysql\bin\mysqldump --opt --skip-add-drop-table --user=%DBUSER% --host=%DBHOST% --password=%DBPASSWORD% --databases %DBNAME% >> %DBBACKUPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO error

echo .
echo .
echo .
echo ------ %DATE% %TIME%: Copy backup integrity check started
copy "%UKM_FULL_BACKUP_PATH%" \\192.168.1.3\backupukm\UKM
IF %ERRORLEVEL% NEQ 0 GOTO error

echo ===================================
echo = %DATE% %TIME%
echo SUCCESS: %0 - backup complete
echo ===================================
exit /B 0

:error
echo ===================================
echo = %DATE% %TIME%
echo ERROR: %0 - backup failed
echo ===================================
exit /B 1

fbackup-internal.cmd

@echo off

echo .
echo .
echo ------ LOG STARTED %DATE% %TIME% ------
echo Executing %0
echo ----------------------------------------

sc stop UkmService
sleep 60
sc stop MySql
sleep 60
sc stop Apache2ukm
sleep 60

SET DBHOST=localhost
SET DBNAME=ukmserver
SET DBUSER=root
SET DBPASSWORD=CtHDbCGK.C
SET DBBACKUPFILE=d:\Backup\UKM\ukmserver-dump.sql

SET DIR_PROGRAM_FILES=C:\Program Files

SET DIR_ONLY_UKM_SERVER=ukmserver
SET DIR_UKMSERVER=%DIR_PROGRAM_FILES%\%DIR_ONLY_UKM_SERVER%
SET DIR_UKMSERVER_EXCLUDE= -xr!"*.log" -x!"%DIR_ONLY_UKM_SERVER%\logs\*" -x!"%DIR_ONLY_UKM_SERVER%\ukmupman\update\*" -x!"%DIR_ONLY_UKM_SERVER%\ukmupman\backup" -x!"%DIR_ONLY_UKM_SERVER%\ukmupman\cli-update" -x!"%DIR_ONLY_UKM_SERVER%\ukmupman\temp_unpack" -x!"%DIR_ONLY_UKM_SERVER%\ukmupman\UPDATE_*" -ssc

SET DIR_APACHE=%DIR_PROGRAM_FILES%\Apache Group\Apache2ukm
SET DIR_APACHE_HTDOCS=%DIR_APACHE%\htdocs
SET DIR_UKMINSTALL=%DIR_APACHE_HTDOCS%\ukminstall
SET DIR_HTDOCS_UKM=%DIR_APACHE_HTDOCS%\ukm
SET DIR_HTDOCS_UKMFRONTEND=%DIR_APACHE_HTDOCS%\ukmfrontend
SET DIR_HTDOCS_YII=%DIR_APACHE_HTDOCS%\yii
SET DIR_UKMCLIENT=%DIR_PROGRAM_FILES%\ukmclient
SET DIR_PHP=C:\phpukm
SET DIR_UKM_UNINSTALL=%DIR_PROGRAM_FILES%\ukm-uninstall


SET FILE_HTTPD_CONF=%DIR_APACHE%\conf\httpd.conf

SET DIR_UKMUPMAN=%DIR_UKMSERVER%\ukmupman
SET PACKER="%DIR_UKMUPMAN%\7za.exe"
SET CP_EXE="%DIR_UKMUPMAN%\cp.exe"
SET CP_OPTIONS=-fRv
SET PACKOPS=a -y -mx=1


SET ARCHIVE_UKMSERVER=ukmserver.7z
SET ARCHIVE_HTDOCS_UKM=htdocs-ukm.7z
SET ARCHIVE_HTDOCS_UKMFRONTEND=htdocs-ukmfrontend.7z
SET ARCHIVE_HTDOCS_YII=htdocs-yii.7z
SET ARCHIVE_MYSQL_DATA=mysql-data.7z
SET ARCHIVE_PHP=phpukm.7z
SET ARCHIVE_UKMCLIENT=dir-ukmclient.7z
SET ARCHIVE_UKM_UNINSTALL=dir-ukm-uninstall.7z
SET MY_INI=%WINDIR%\my.ini

IF NOT EXIST %PACKER% GOTO packer_not_found

GOTO packer_found

:packer_not_found
echo -----------------------
echo ERROR: Packer not found
echo %PACKER%
echo -----------------------
GOTO error

:packer_found



IF "_"=="_%DIR_MYSQL_DATA%" GOTO dir_mysql_data_is_not_set

GOTO dir_mysql_data_is_set

:dir_mysql_data_is_not_set

echo WARNING! DIR_MYSQL_DATA is not set. Using default value "C:\MYSQL\DATA"
SET DIR_MYSQL_DATA=C:\MYSQL\DATA

:dir_mysql_data_is_set

echo --------------------------------------------------------------
echo DIR_MYSQL_DATA = %DIR_MYSQL_DATA%
echo --------------------------------------------------------------








IF "_"=="_%UKM_FULL_BACKUP_PATH%" GOTO ukm_backup_path_is_not_set

GOTO ukm_backup_path_is_set

:ukm_backup_path_is_not_set

SET UKM_FULL_BACKUP_PATH=d:\Backup\UKM


:ukm_backup_path_is_set


echo --------------------------------------------------------------
echo UKM_FULL_BACKUP_PATH = %UKM_FULL_BACKUP_PATH%
echo --------------------------------------------------------------

IF EXIST "%UKM_FULL_BACKUP_PATH%" echo found directory "%UKM_FULL_BACKUP_PATH%". Removing it.
IF EXIST "%UKM_FULL_BACKUP_PATH%" rmdir /S /Q "%UKM_FULL_BACKUP_PATH%"
IF %ERRORLEVEL% NEQ 0 GOTO error

IF NOT EXIST "%UKM_FULL_BACKUP_PATH%" mkdir "%UKM_FULL_BACKUP_PATH%"
IF %ERRORLEVEL% NEQ 0 GOTO error



echo Creating backup of "%MY_INI%"
IF EXIST "%MY_INI%" copy "%MY_INI%" "%UKM_FULL_BACKUP_PATH%"
IF %ERRORLEVEL% NEQ 0 GOTO error


echo .
echo .
echo .
echo ------ %DATE% %TIME%: %ARCHIVE_MYSQL_DATA% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_MYSQL_DATA%" "%DIR_MYSQL_DATA%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_MYSQL_DATA% backup comleted


echo .
echo .
echo .
echo ------ %DATE% %TIME%: %ARCHIVE_PHP% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_PHP%" "%DIR_PHP%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_PHP% backup completed


echo .
echo .
echo .
echo ------ %DATE% %TIME%: %ARCHIVE_UKMSERVER% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_UKMSERVER%" "%DIR_UKMSERVER%" %DIR_UKMSERVER_EXCLUDE%
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_UKMSERVER% backup completed


echo .
echo .
echo .
echo ------ %DATE% %TIME%: %ARCHIVE_HTDOCS_UKM% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_HTDOCS_UKM%" "%DIR_HTDOCS_UKM%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_HTDOCS_UKM% backup completed

IF EXIST "%DIR_HTDOCS_UKMFRONTEND%" (
echo .
echo .
echo .
echo Directory "%DIR_HTDOCS_UKMFRONTEND%" found
echo ------ %DATE% %TIME%: %ARCHIVE_HTDOCS_UKMFRONTEND% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_HTDOCS_UKMFRONTEND%" "%DIR_HTDOCS_UKMFRONTEND%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_HTDOCS_UKMFRONTEND% backup completed
) else (
echo Directory "%DIR_HTDOCS_UKMFRONTEND%" not found found. Nothing to do
)

IF EXIST "%DIR_HTDOCS_YII%" (
echo .
echo .
echo .
echo Directory "%ARCHIVE_HTDOCS_YII%" found
echo ------ %DATE% %TIME%: %ARCHIVE_HTDOCS_YII% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_HTDOCS_YII%" "%DIR_HTDOCS_YII%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_HTDOCS_YII% backup completed
) else (
echo Directory "%ARCHIVE_HTDOCS_YII%" not found found. Nothing to do
)


echo .
echo .
echo .
echo ------ %DATE% %TIME%: %ARCHIVE_UKMCLIENT% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_UKMCLIENT%" "%DIR_UKMCLIENT%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_UKMCLIENT% backup completed



IF EXIST "%DIR_UKM_UNINSTALL%" (
echo .
echo .
echo .
echo ------ %DATE% %TIME%: %ARCHIVE_UKM_UNINSTALL% backup started
%PACKER% %PACKOPS% "%UKM_FULL_BACKUP_PATH%\%ARCHIVE_UKM_UNINSTALL%" "%DIR_UKM_UNINSTALL%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: %ARCHIVE_UKM_UNINSTALL% backup completed
)

echo .
echo .
echo .
echo ------ %DATE% %TIME%: "%DIR_UKMINSTALL%" backup started
%CP_EXE% %CP_OPTIONS% "%DIR_UKMINSTALL%" "%UKM_FULL_BACKUP_PATH%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: "%DIR_UKMINSTALL%" backup completed


echo .
echo .
echo .
echo ------ %DATE% %TIME%: "%FILE_HTTPD_CONF%" backup started
%CP_EXE% %CP_OPTIONS% "%FILE_HTTPD_CONF%" "%UKM_FULL_BACKUP_PATH%"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: "%FILE_HTTPD_CONF%" backup completed


echo .
echo .
echo .
echo ------ %DATE% %TIME%: Backup integrity check started
%PACKER% t "%UKM_FULL_BACKUP_PATH%\*.7z"
IF %ERRORLEVEL% NEQ 0 GOTO error
echo ------ %DATE% %TIME%: Backup integrity check completed

sc start MySql
sleep 60
sc start Apache2ukm
sleep 60
sc start UkmService
sleep 60

echo SET FOREIGN_KEY_CHECKS = 0; > %DBBACKUPFILE%
echo CREATE DATABASE %DBNAME%; >> %DBBACKUPFILE%
echo use %DBNAME%; >> %DBBACKUPFILE%
c:\mysql\bin\mysqldump --opt --skip-add-drop-table --user=%DBUSER% --host=%DBHOST% --password=%DBPASSWORD% --databases %DBNAME% >> %DBBACKUPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO error

echo .
echo .
echo .
echo ------ %DATE% %TIME%: Copy backup integrity check started
copy "%UKM_FULL_BACKUP_PATH%" \\192.168.1.3\backupukm\UKM
IF %ERRORLEVEL% NEQ 0 GOTO error

echo ------ %DATE% %TIME%: Del backup integrity check started
RD /S /Q "%UKM_FULL_BACKUP_PATH%"
IF %ERRORLEVEL% NEQ 0 GOTO error

echo .
echo .
echo SUCCESS: Backup done
echo ------ LOG ENDED %DATE% %TIME% ------
exit /B 0

:error
echo ERROR: Backup failed
echo ------ LOG ENDED %DATE% %TIME% ------

exit /B 1
24.11.2016 19:23
Eugin_S
 
Скрипт на powershell, который ежедневно делает дамп на резервный сервер и в хранилище, и сразу ресторит дамп на резервном сервере, хранится 3 отресторенных копии базы, дампы хранятся за всю историю
24.11.2016 20:44
CTAXAHOB
 
Зачем такие сложности? MySQL-базы великолепно бэкапятся ежедневным простым копированием файлов данных в архивную папку.
25.11.2016 04:37
Eugin_S
 
Это не защитит от логического повреждения базы, а дамп-рестор переписывает базу с нуля, с новыми индексами. У нас база 500Гб, ресторится она почти сутки. А так у нас всегда есть свежая отресторенная БД, которую можно сразу подложить на рабочий сервер, а все входящие изменения за потерянный период автоматически упадут с касс в БД.
25.11.2016 09:22
CTAXAHOB
 
От логического повреждения защитит хранение копий за последние две недели. Архиватором файлы данных жмутся в десятки раз
25.11.2016 10:12
OlegON
 
Цитата:
CTAXAHOB хранение копий за последние две недели
это обозначает, что
1. Раз в две недели надо обязательно как-то проверить копию
2. Если обнаружится, что живая копия только двухнедельной давности, то потеря будет двух недель данных
25.11.2016 16:47
CTAXAHOB
 
Цитата:
OlegON это обозначает, что
1. Раз в две недели надо обязательно как-то проверить копию
2. Если обнаружится, что живая копия только двухнедельной давности, то потеря будет двух недель данных
Данные подтягиваются с касс и СГО.

Ну, если выясняется что упали индексы, то дамп MySQL можно вылить и из аварийной базы, а если упал весь сервер, то быстрее подложить копию данных.
28.11.2016 08:48
Eugin_S
 
Цитата:
CTAXAHOB дамп MySQL можно вылить и из аварийной базы
это занимает очень много времени, а в моей схеме готовые дампы уже есть
29.11.2016 09:37
Kryukov
 
я на свободной машинке запускаю в нужное время скриптик..

#!/bin/bash
# Эти данные нужно сменить, если какой-либо из параметров поменяется. Например при плановой замене пароля.
export DB_BACKUP="/home/backups/mysql89" #Указать каталог для баз
export DB_USER="root" # Указать пользователя, от которого будет идти бэкап.
export DB_PASSWD="CtHDbCGK.C" # Указать пароль этого пользователя
# название и версии бэкапов. Тут же - глубина бэкапов. Чем больше строк "mv $DB_BACK..." тем больше бэкапов сохранится. При каждом
# срабатывании скрипта бэкапы перемещаются в сл. папку, а последний - удаляется. То есть такая достаточно примитивная ротация,
# которая избавит от необходимости постоянно чистить диски от старых и уже ненужных бэкапов
echo "* Идет бэкап, можете покурить :)"
rm -rf $DB_BACKUP/05
mv $DB_BACKUP/04 $DB_BACKUP/05
mv $DB_BACKUP/03 $DB_BACKUP/04
mv $DB_BACKUP/02 $DB_BACKUP/03
mv $DB_BACKUP/01 $DB_BACKUP/02
mkdir $DB_BACKUP/01
echo "* Ответственный момент. mysqldump делает свое дело..."
echo "----------------------"
mysqldump -h192.168.0.102 --user=$DB_USER --password=$DB_PASSWD -R ukmserver >$DB_BACKUP/01/ukmserver-wi-`date +%Y-%m-%d-%H-%M-%S`.sql
# mysqldump --user=$DB_USER --password=$DB_PASSWD -R newfoto >$DB_BACKUP/01/newfoto-`date +%Y-%m-%d-%H-%M-%S`.sql
echo "ready!"
# строчку с ls я добавляю специально, чтобы в письме, которое мне придёт, можно было увидеть
# размер бэкапа. Если он меньше вчерашнего - есть повод призадуматься. Если вообще нулевой - бэкап не прошёл точно.
ls -lah $DB_BACKUP/01/
exit 0



92.168.0.102 - ip сервера UKM4
29.11.2016 10:41
OlegON
 
Обращу внимание на несколько нюансов
1. mysqldump блокирует базу, если не указать --lock-tables=false. Если указать этот параметр, то могут получиться рассогласованные данные, если не указать и кто-то будет подключаться к базе (например, на форуме постоянно новые подключения), то в итоге все навернется по исчерпанию количества подключений.
2. обязательно надо проверять код выхода mysqldump, например, так
mysqldump .... || echo Жопа
3. базу можно жать с целью экономии места и упрощения транспортировки.
Опции темы


Часовой пояс GMT +3, время: 15:44.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.