This commit is contained in:
@ -1,308 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
|
||||
<head>
|
||||
<title>Резервное копирование внешними средствами</title>
|
||||
<meta name="generator" content="Help+Manual" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Резервное копирование ELMA365 должно выполняться в составе:" />
|
||||
<meta name="picture" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Cправка по Low-code платформе ELMA365" />
|
||||
<meta property="og:url" content="https://elma365.com/ru/help" />
|
||||
<meta property="og:image" content="" />
|
||||
<meta property="og:site_name" content="ELMA365" />
|
||||
<link rel="icon" href="favicon.png" type="image/png" />
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="./jquery-ui.min.css" />
|
||||
<link rel="stylesheet" href="default.css" />
|
||||
<link rel="stylesheet" href="./search-yandex.css" />
|
||||
<link rel="stylesheet" href="./article.css" />
|
||||
<link rel="stylesheet" href="./glossary.css" />
|
||||
<link rel="stylesheet" href="./theme.css" />
|
||||
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="helpman_settings.js"></script>
|
||||
<script type="text/javascript" src="helpman_topicinit.js"></script>
|
||||
|
||||
<script type="text/javascript" src="highlight.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){highlight();});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-M6ETBEC1R9"></script><script>window.dataLayer=window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag('js', new Date()); gtag('config', 'G-M6ETBEC1R9');</script>
|
||||
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
|
||||
|
||||
<header class="header elma-365">
|
||||
<div class="container">
|
||||
<a class="header__logo" href="https://elma365.com/ru/help">
|
||||
<img src="./logo.svg" alt="header logo">
|
||||
</a>
|
||||
<!-- <div class="hero__search-form" id="search-panel">
|
||||
<form class="search-form" onsubmit="ym(83179930,'reachGoal','poisk')">
|
||||
<label class="search-form__label">
|
||||
<span id="reset-search" class="search__icon"></span>
|
||||
<input class="search-form__input" type="text">
|
||||
</label>
|
||||
<input class="search-form__submit" type="submit" value="Submit">
|
||||
</form>
|
||||
</div> -->
|
||||
|
||||
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
|
||||
<div class="hero__search">
|
||||
<a href="#" id="search-icon" class="hero__search-icon">
|
||||
<img src="search-icon-white.svg" alt="search string">
|
||||
</a>
|
||||
<a href="#" id="side-menu-icon" class="hero__side-icon">
|
||||
<img src="side_menu.svg" alt="side menu">
|
||||
</a>
|
||||
</div>
|
||||
<div class="header__navi">
|
||||
|
||||
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a class="project-link" href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li><li><a class="project-link" href="https://elma365.com/ru/help/business_solutions/-elma365-store.html">Бизнес-решения</a></li></ul></span></li><li><a href="https://api.elma365.com/ru/"target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/"target="_blank">SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/" target="_blank">Академия</a></li><li><a href="https://elma365.com/ru/" target="_blank">Сайт ELMA365</a></li></ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<main class="main container">
|
||||
|
||||
<aside class="sidebar" id="sidebar">
|
||||
<div class="sidebar__header">
|
||||
<a class="header__logo" href="https://elma365.com/ru/help">
|
||||
<img src="./logo-light.svg">
|
||||
</a>
|
||||
<span class="sidebar__close elma-365-close" id="close"></span>
|
||||
</div>
|
||||
<div class="sidebar__wrapper" id="side-menu">
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<article class="article" id="article">
|
||||
<div class="article-inner">
|
||||
<div class="content">
|
||||
<header class="article__header">
|
||||
<div class="article__bread" style="display:flex; gap:10px;">
|
||||
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
|
||||
|
||||
<div class="topic__breadcrumbs">
|
||||
<p><a href="elma365-on-premises.html">ELMA365 On-Premises</a> > <a href="elma365-enterprise.html">ELMA365 On-Premises Enterprise</a> / Резервное копирование внешними средствами</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Резервное копирование внешними средствами</span></h1>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
<section class="article__content">
|
||||
<div class="scroll-top-inner">
|
||||
<a href="#h1-article" class="scroll-top"></a>
|
||||
</div>
|
||||
<!-- Placeholder for topic body. -->
|
||||
<p class="p_Normal">Резервное копирование ELMA365 должно выполняться в составе:</p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">PostgreSQL — в базе данных хранятся основные данные системы: пользователи, элементы приложений, настройки приложений, разделов, процессы, страницы, виджеты, задачи, события и другие настройки конфигурации;</li><li class="p_Normal">MongoDB — в базе данных хранятся неструктурированные системные настройки, данные чатов и ленты;</li><li class="p_Normal">S3 Object Storage — в объектном хранилище находятся загружаемые и создаваемые в ELMA365 файлы любого типа и объема, такие как документы, фотографии, аудио и видео файлы.</li></ul>
|
||||
<p class="p_Normal">Для получения доступа к базам данных внутри кластера необходимо пробросить порт соответствующих сервисов:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl port-forward postgres-0 5432:5432 --address 0.0.0.0</span><br />
|
||||
<span class="f_CodeExample">kubectl port-forward mongo-0 27017:27017 --address 0.0.0.0</span><br />
|
||||
<span class="f_CodeExample">kubectl port-forward minio-<name-pod> 9000:9000 --address 0.0.0.0</span></p>
|
||||
<p class="p_Normal">Для получения информации о строках подключения к базам данных выполните следующую команду. Для выполнения команды необходимо установить пакет <span style="font-weight: bold;">jq</span>:</p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">для установки ELMA365 Helm-пакетом в Kubernetes-кластер:</li></ul>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl get secrets/elma365-db-connections -o json | jq '.data | map_values(@base64d)'</span></p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">для установки ELMA365 в Kubernetes-in-Docker:</li></ul>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">docker exec elma365 kubectl get secrets/elma365-db-connections -o json | jq '.data | map_values(@base64d)'</span></p>
|
||||
<h2 class="p_Heading2"><a id="backup" class="hmanchor"></a><span class="f_Heading2">Резервное копирование</span></h2>
|
||||
<h3 class="p_Heading3"><a id="backup-posgresql" class="hmanchor"></a><span class="f_Heading3">Резервное копирование PostgreSQL</span></h3>
|
||||
<p class="p_Normal">Имеется несколько вариантов создания резервных копий баз данных PostgreSQL.</p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">Вариант 1. Физическое копирование</span></p>
|
||||
<p class="p_Normal">Утилита <code><b>pg_basebackup</b></code> позволяет делать резервную копию на уровне файловой системы. Её можно использовать для восстановления на определённый момент времени, предварительно настроив <span style="font-weight: bold;">Point-in-time-recovery</span> (PITR), обеспечивающий непрерывное резервное копирование данных таблиц. Резервные копии всегда создаются для всего кластера базы данных, резервное копирование отдельных баз данных невозможно.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало внимание</span></p>
|
||||
<p class="p_Normal">Резервное копирование выполняется через обычное соединение PostgreSQL и использует протокол репликации. Соединение должно быть выполнено с правами суперпользователя или пользователя с разрешениями REPLICATION.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец внимание</span></p>
|
||||
<p class="p_Normal">Полная резервная копия создается следующей командой:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">pg_basebackup -h <postgresql-server-address> -p 5432 -U postgres -D /backup/<backup-postgresql-folder-name> -Ft -z -Xs -P</span></p>
|
||||
<p class="p_Normal">Чтобы выполнить команду <code><b>pg_basebackup</b></code> с удаленного сервера (например, адрес сервера 192.168.1.10), нужно разрешить это подключение. Для этого в файл <code><b>pg_hba.conf</b></code> добавьте строку: </p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">host replication all 192.168.1.10/32 md5</span></p>
|
||||
<p class="p_Normal">После внесения изменений в <code><b>pg_hba.conf</b></code> перезапустите PostgreSQL для их применения.</p>
|
||||
<p class="p_Normal">Для непрерывного (<span style="font-weight: bold;">PiTR</span>) архивирования PostgreSQL требуется включить архивирование <span style="font-weight: bold;">WAL</span>. Для этого в конфигурационном файле <code><b>/etc/postgresql/10/main/postgresql.conf</b></code> настройте следующие параметры:</p>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">wal_level</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">replica</span><br />
|
||||
<span class="f_CodeExample">archive_mode</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">on</span><br />
|
||||
<span class="f_CodeExample">archive_command</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">'test ! -f /backup/<backup-postgresql-folder-name>/postgresql_archives/%f && cp %p /backup/<backup-postgresql-folder-name>/postgresql_archives/%f'</span><br />
|
||||
<span class="f_CodeExample">archive_timeout</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">300</span></p>
|
||||
<p class="p_Normal">Там же необходимо установить значение параметра <code><b>data_directory</b></code>, если оно не определено. Иначе модуль резервного копирования не сможет определить местоположение файлов СУБД, например для PostgreSQL 10:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">data_directory = '/var/lib/postgresql/10/main' </span></p>
|
||||
<p class="p_Normal">После внесения изменений перезапустите PostgreSQL при помощи команды:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">service postgresql restart</span></p>
|
||||
<p class="p_Normal">Значение параметра <code><b>archive_command</b></code> должно содержать в файловой системе сервера PostgreSQL каталог, в который будут копироваться архивируемые сегменты <span style="font-weight: bold;">WAL</span>.</p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">Вариант 2. Логическое копирование</span></p>
|
||||
<p class="p_Normal">Утилита <code><b>pg_dump</b></code><span style="font-weight: bold;"> </span>создает за один раз резервную копию только одной базы данных, и она не включает информацию о ролях и табличных пространствах. Во время работы <code><b>pg_dump</b></code> будут заблокированы только операции, требующие эксклюзивной блокировки. В итоге изменения, вносимые в базу во время работы <code><b>pg_dump</b></code>, не будут добавляться в выходной файл архива.</p>
|
||||
<p class="p_Normal">Резервная копия создается следующей командой:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">pg_dump <postgresqlURL> -C -c --if-exists -F directory -f /backup/<backup-postgresql-folder-name></span></p>
|
||||
<h3 class="p_Heading3"><a id="backup-mongo" class="hmanchor"></a><span class="f_Heading3">Резервное копирование MongoDB</span></h3>
|
||||
<p class="p_Normal">Утилита <code><b>mongodump</b></code> — это базовый инструмент логического резервного копирования, входящий в состав MongoDB, который создает двоичный экспорт содержимого базы данных или коллекций.</p>
|
||||
<p class="p_Normal">Резервная копия создаётся следующей командой:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mongodump --uri <mongodbURL> --gzip --quiet --out /backup/<backup-mongodb-folder-name></span></p>
|
||||
<p class="p_Normal">Можно также включить флаг <code><b>--oplog</b></code> в случае резервного копирования набора реплик. Преимущество этого заключается в том, что выходные данные также будут включать в файл <code><b>oplog.bson</b></code> записи <code><b>oplog</b></code>, которые фиксируют данные, возникающие во время операции <code><b>mongodump</b></code>.</p>
|
||||
<p class="p_Normal">Файл <code><b>oplog.bson</b></code> создаётся как часть вывода <code><b>mongodump</b></code>. Файл содержит записи, которые произошли во время операции <code><b>mongodump</b></code>. Это обеспечивает эффективный моментальный снимок состояния экземпляра mongod на момент времени. Эта опция работает только для узлов, поддерживающих oplog, т. е. для всех членов набора реплик.</p>
|
||||
<h3 class="p_Heading3"><span class="f_Heading3">Резервное копирование S3</span></h3>
|
||||
<p class="p_Normal">Копирование файлов можно выполнять при помощи любой утилиты, которая подключается к S3, например <code><b>mc</b></code>.</p>
|
||||
<p class="p_Normal">Добавьте хост в конфигурации <code><b>mc</b></code>:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mc alias set <alias> <s3-endpoint> <access-key> <secret-key> --api <api-signature></span></p>
|
||||
<p class="p_Normal">Синхронизируйте содержимое корзины в каталог локальной файловой системы.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mc mirror <alias>/<bucket> /backup/<backup-s3-folder-name></span></p>
|
||||
<h2 class="p_Heading2"><a id="recovery" class="hmanchor"></a><span class="f_Heading2">Восстановление из резервной копии</span></h2>
|
||||
<p class="p_Normal">Перед восстановлением баз данных необходимо остановить все сервисы приложения и дождаться их завершения, например, при помощи следующих команд:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl scale deploy --replicas=0 --all -l 'app notin (minio)' [--namespace <elma365-namespace>]</span><br />
|
||||
<span class="f_CodeExample">kubectl [--namespace <elma365-namespace>] patch daemonset billing -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'</span></p>
|
||||
<p class="p_Normal">Пересоздать базы PostgreSQL и MongoDB. Подробнее об этом читайте в статьях <a href="postgresql.html#prepare-to-recovery" class="topiclink">«PostgreSQL»</a> и <a href="mongodb.html#prepare-to-recovery" class="topiclink">«MongoDB»</a>.</p>
|
||||
<p class="p_Normal">После этого выполните восстановление баз данных.</p>
|
||||
<h2 class="p_Heading2"><a id="recovery-posgresql" class="hmanchor"></a><span class="f_Heading2">Восстановление PostgreSQL</span></h2>
|
||||
<h3 class="p_Heading3"><span class="f_Heading3">Восстановление физической копии PostgreSQL</span></h3>
|
||||
<p class="p_Normal">Для восстановления или запуска на новом месте резервной копии, полученной в результате работы <code><b>pg_basebackup</b></code>, достаточно остановить PostgreSQL-сервер, распаковать и подменить содержимое его директории данных базовой резервной копией и архивом <span style="font-weight: bold;">WAL</span>. Например, для PostgreSQL версии 10: </p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">systemctl stop postgresql</span><br />
|
||||
<span class="f_CodeExample">mv /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql/10/main /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql/10/main.old</span><br />
|
||||
<span class="f_CodeExample">mkdir /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql/10/main</span><br />
|
||||
<span class="f_CodeExample">tar xvf /backup/<backup-postgresql-folder-name>/base.tar.gz -C /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql/10/main</span><br />
|
||||
<span class="f_CodeExample">tar xvf /backup/<backup-postgresql-folder-name>/pg_wal.tar.gz -C /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql/10/main/pg_wal</span><br />
|
||||
<span class="f_CodeExample">chown -R postgres:postgres /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql </span><br />
|
||||
<span class="f_CodeExample">chmod -R go-rwx /</span><span class="f_CodeExample" style="font-weight: bold;">var</span><span class="f_CodeExample">/lib/postgresql/</span><br />
|
||||
<span class="f_CodeExample">systemctl </span><span class="f_CodeExample" style="font-weight: bold;">start</span><span class="f_CodeExample"> postgresql</span></p>
|
||||
<p class="p_Normal">Для восстановления кластера PostgreSQL до состояния, в котором он находился в определённый момент времени, необходимо остановить сервер PostgreSQL, восстановить последнюю полную резервную копию, смонтировать файловую систему с архивными файлами <span style="font-weight: bold;">WAL</span> и создать файл<span style="font-weight: bold;"> </span><code><b>/var/lib/postgresql/10/main/recovery.conf</b></code> со следующим содержимым:</p>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">restore_command</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">'cp /backup/<backup-postgresql-folder-name>/postgresql_archives/%f%p'</span><br />
|
||||
<span class="f_CodeExample">recovery_target_time</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">'2022-02-08 11:20:00 UTC'</span><br />
|
||||
<span class="f_CodeExample">recovery_target_inclusive</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample" style="font-weight: bold;">false</span></p>
|
||||
<p class="p_Normal">Затем запустите сервер PostgreSQL. При запуске он будет неоднократно вызывать <code><b>restore_command</b></code> скрипт получения файлов <span style="font-weight: bold;">WAL</span> для восстановления базы данных на определенный момент времени.</p>
|
||||
<h3 class="p_Heading3"><span class="f_Heading3">Восстановление логической копии PostgreSQL</span></h3>
|
||||
<p class="p_Normal">Утилита <code><b>pg_restore</b></code> восстанавливает резервную копию, созданную утилитой <code><b>pg_dump</b></code>.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">pg_restore -d <postgresqlURL> -j 1 -F directory /backup/<backup-postgresql-folder-name></span></p>
|
||||
<h2 class="p_Heading2"><a id="recovery-mongo" class="hmanchor"></a><span class="f_Heading2">Восстановление MongoDB</span></h2>
|
||||
<p class="p_Normal">Для восстановления базы данных используется утилита <code><b>mongorestore</b></code>. Восстановление выполняется следующим образом:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mongorestore --uri <mongodbURL> --dir /backup/<backup-mongodb-folder-name> --drop --gzip --preserveUUID --excludeCollection=head.settings.view</span></p>
|
||||
<p class="p_Normal">Для восстановления базы данных на момент времени применяется Oplogs. Скопируйте в каталог для восстановления только файл <code><b>oplog.bson</b></code>, полученный ранее с помощью команды:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mongodump --oplog</span></p>
|
||||
<p class="p_Normal">Запустите <code><b>mongorestore</b></code> с параметром <code><b>--oplogReplay</b></code><span style="font-weight: bold;"> </span>(убедитесь, что каталог содержит только <code><b>oplog.bson</b></code>)</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mongorestore --uri <mongodbURL> --oplogReplay --dir /backup/<backup-mongodb-olplog-folder-name></span></p>
|
||||
<h2 class="p_Heading2"><span class="f_Heading2">Восстановление S3</span></h2>
|
||||
<p class="p_Normal">Восстановление файлов можно выполнять при помощи любой утилиты, которая подключается к S3, например <code><b>mc</b></code>.</p>
|
||||
<p class="p_Normal">Добавьте хост в конфигурации <code><b>mc</b></code>:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mc alias set <alias> <s3-endpoint> <access-key> <secret-key> --api <api-signature></span></p>
|
||||
<p class="p_Normal">Синхронизируйте содержимое корзины в каталог локальной файловой системы.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">mc mirror /backup/<backup-s3-folder-name> <alias>/<bucket></span></p>
|
||||
<p class="p_Normal">После восстановления резервной копии баз данных необходимо запустить все сервисы приложения, используя следующие команды:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl scale deploy --replicas=1 --all [--namespace <elma365-namespace>]</span><br />
|
||||
<span class="f_CodeExample">kubectl [--namespace <elma365-namespace>] patch daemonset billing --type json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]'</span></p>
|
||||
<p class="p_Normal"><span class="f_CodeExample"> </span></p>
|
||||
|
||||
<div class="bottom-nav">
|
||||
|
||||
<a id="prev-link" class="topic__navi_prev" href="backup-and-recovery-with-wal-g-and-rclone.html">
|
||||
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
|
||||
class="bottom-nav__link">backup-and-recovery-with-wal-g-and-rclone.html</span>
|
||||
</a>
|
||||
|
||||
|
||||
<a id="next-link" class="topic__navi_next" href="embedded-to-external-database-enterprise.html">
|
||||
<span class="bottom-nav__link">embedded-to-external-database-enterprise.html</span> <span
|
||||
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
|
||||
<div class="feedback-wrap"><div class="feedback" id="feedback"><span><b>Была ли статья полезной?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx">Спасибо за ваш отзыв!</div><div id="feedback-success-popup"><div class="wrap"><button type="button" class="feedback-popup-close">×</button><svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_212_2187)"><path d="M22 0.6875C10.2294 0.6875 0.6875 10.2294 0.6875 22C0.6875 33.7706 10.2294 43.3125 22 43.3125C33.7706 43.3125 43.3125 33.7706 43.3125 22C43.3125 10.2294 33.7706 0.6875 22 0.6875ZM22 40.5625C11.8023 40.5625 3.4375 32.3078 3.4375 22C3.4375 11.8024 11.6922 3.4375 22 3.4375C32.1977 3.4375 40.5625 11.6922 40.5625 22C40.5625 32.1976 32.3078 40.5625 22 40.5625ZM34.1713 16.933L18.6613 32.3186C18.257 32.7197 17.604 32.7171 17.203 32.3128L9.82283 24.873C9.42176 24.4686 9.42434 23.8157 9.82867 23.4146L10.5609 22.6884C10.9652 22.2873 11.6181 22.2899 12.0192 22.6942L17.9468 28.6697L31.9926 14.7366C32.3969 14.3356 33.0498 14.3382 33.4509 14.7425L34.1772 15.4747C34.5783 15.879 34.5757 16.532 34.1713 16.933Z" fill="#27AE60"></path></g><defs><clipPath id="clip0_212_2187"><rect width="44" height="44" fill="white"></rect></clipPath></defs></svg><p>Ваш отзыв успешно отправлен!</p><span>Спасибо за обратную связь.</span></div></div><div class="feedback__popup" id="feedback__popup_why"><button type="button" class="feedback-popup-close">×</button><div class="feedback__popup-header">Уточните, почему:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Рекомендации не помогли</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Текст трудно понять</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Нет ответа на мой вопрос</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Содержание статьи не соответствует заголовку</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Другая причина</label></div><div class="feedback__popup" id="feedback__popup-other"><button type="button" class="feedback-popup-close">×</button> <div class="feedback__popup-header">Расскажите, что вам не понравилось в статье:</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Отправить"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg"/><span class="feedback-form__btn-group_yes-btn">Да</span></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg"/><span class="feedback-form__btn-group_no-btn">Нет</span></label></div><select name="category"><option disabled>Выберите вариант</option><option value="bad_recommendation" selected>Рекомендации не помогли</option><option value="difficult_text">Текст трудно понять</option><option value="no_answer">Нет ответа на мой вопрос</option><option value="bad_header">Содержание статьи не соответствует заголовку</option><option value="other_reason">Другая причина</option></select><input type="submit"></form></div></div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
<aside class="article__sidebar" style="display:none">
|
||||
<input type="checkbox" />
|
||||
<div class="article__arrow"></div>
|
||||
<div class="table-of-contents elma365-right" id="toc2Content">
|
||||
<h3 class="h3-toc">В этой статье</h3>
|
||||
<nav id="toc2"></nav>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</article>
|
||||
</main>
|
||||
<footer class="footer">
|
||||
<div class="footer-container">
|
||||
<div class="footer-mobile">
|
||||
|
||||
<ul class="footer-mobile__list"><li><a href="https://api.elma365.com/ru/" target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/" target="_blank">TS SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/elma365" target="_blank">Академия</a></li></ul><ul class="footer-mobile__list"><li><a href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li></ul>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="footer-wrap">
|
||||
|
||||
<div><span class="mobile-question-popup">Отправить фидбэк</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Задать вопрос</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Отправить"></div></form><div class="hidden fade-in question-success-xs">Ваш фидбэк отправлен.</div></div>
|
||||
|
||||
<div class="footer-flex-b">
|
||||
<div class="footer-top">
|
||||
<span class="footer-copy">© 2025
|
||||
ELMA365
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
|
||||
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div class="footer-line">
|
||||
|
||||
<div class="footer-line-copy">
|
||||
<span class="footer-copy">© 2025
|
||||
ELMA365
|
||||
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<ul class="footer-list">
|
||||
|
||||
<li class="footer-item"><a href="https://elma365.com/ru/" target="_blank" class="footer-link" style="color: #0D4A75;"><img src="browse.svg" alt="browse icon" class="footer-img">elma365.com</a></li><li class="footer-item"><a href="https://www.youtube.com/user/ELMABPM" target="_blank" class="footer-link"><img src="yt.svg" alt="youtube icon" class="footer-img"></a></li><li class="footer-item"><a href="https://vk.com/elma_bpm" target="_blank" class="footer-link"><img src="vk.svg" alt="vk icon" class="footer-img"></a></li><li class="footer-item"><a href="https://t.me/elmaday" target="_blank" class="footer-link"><img src="tg.svg" alt="telegram icon" class="footer-img"></a></li><li class="footer-item"><a href="https://dzen.ru/elma" target="_blank" class="footer-link"><img src="dzen.svg" alt="dzen icon" class="footer-img"></a></li>
|
||||
|
||||
|
||||
<li class="footer-item">
|
||||
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
|
||||
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="arrow-top"></a>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
<!-- <script type="text/javascript" src="jquery1.min.js"></script>-->
|
||||
<iframe name="hmnavigation" style="display:none!important"></iframe>
|
||||
<!--<script src="./jquery-ui.js"></script> -->
|
||||
<script src="./jquery-ui.min.js"></script>
|
||||
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
|
||||
<script src="./jquery.tocify.min.js"></script>
|
||||
<script src="./TypoReporter.min.js"></script>
|
||||
<script src="./google-search.js"></script>
|
||||
<script src="./main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
Reference in New Issue
Block a user