-
Notifications
You must be signed in to change notification settings - Fork 23
PBM-1294 selective logical backup/restore with Users & Roles #337
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
3ed4f4d
b6bd051
efec242
f3da6b0
177299b
ced7f48
ff13963
8b8dd40
22c1fbf
278ea85
0b3ea71
4a58295
1a9d6ce
05ca0c5
021bc12
7eaed25
30e165e
ae84767
5647f04
2432b9e
ee82d4b
9320cf0
5d20502
101265e
ba8d71f
b927d60
469d3bf
f54d06e
6efddb8
2389c25
2230e6d
5cad6ca
cc85b24
ccca64c
16e4930
491e4ad
7e8d9ad
56ca7b8
d11d18d
4006d18
1271360
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,103 +1,104 @@ | ||
| {# | ||
| MkDocs template for builds with Material Theme to customize docs layout | ||
| by adding marketing-requested elements | ||
| #} | ||
|
|
||
| {# Import the theme's layout. #} | ||
| {% extends "base.html" %} | ||
| {# Custom layout extending Material Theme base #} | ||
| {% extends "base.html" %} | ||
|
|
||
| {% block scripts %} | ||
| <script src="https://cmp.osano.com/Azqe5vTyLOSbN3OuT/49ad85b5-0418-4794-ab81-7599dddd534c/osano.js"></script> | ||
| {{ super() }} | ||
| <script src="https://cmp.osano.com/Azqe5vTyLOSbN3OuT/49ad85b5-0418-4794-ab81-7599dddd534c/osano.js"></script> | ||
| {{ super() }} | ||
| {% endblock %} | ||
|
|
||
| {% block extrahead %} | ||
| {{ super() }} | ||
| {% set title = config.site_name %} | ||
| {% if page and page.meta and page.meta.title %} | ||
| {% set title = title ~ " - " ~ page.meta.title %} | ||
| {% elif page and page.title and not page.is_homepage %} | ||
| {% set title = title ~ " - " ~ page.title %} | ||
| {% endif %} | ||
| <meta property="og:type" content="website" /> | ||
| <meta property="og:title" content="{{ title }}" /> | ||
| <meta property="og:image" content="https://docs.percona.com/percona-backup-mongodb/_images/mongodb.png"> | ||
| <meta property="og:url" content="https://docs.percona.com/percona-backup-mongodb/"> | ||
| </head> | ||
| <body> | ||
| </body> | ||
| </html> | ||
| {% endblock %} | ||
|
|
||
|
|
||
| {% block site_nav %} | ||
| {% if nav %} | ||
| {% if page.meta and page.meta.hide %} | ||
| {% set hidden = "hidden" if "navigation" in page.meta.hide %} | ||
| {% endif %} | ||
| <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" {{ hidden }}> | ||
| <div class="md-sidebar__scrollwrap"> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/nav.html" %} | ||
| <br> | ||
| <label class="md-nav__title" for="__drawer"> | ||
| <a href="https://learn.percona.com/download-percona-backup-for-mongodb-manual-2" onclick="_gaq.push(['b._trackEvent', 'Percona Backup for MongoDB', 'Download', 'Download Manual Backup for MongoDB']);" class="md-nav__link md-nav__link--active" style="font-size: .7rem;"> | ||
| Download PDF | ||
| </a> | ||
| </label> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "toc.integrate" not in features %} | ||
| {% if page.meta and page.meta.hide %} | ||
| {% set hidden = "hidden" if "toc" in page.meta.hide %} | ||
| {% endif %} | ||
| <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" {{ hidden }}> | ||
| <div class="md-sidebar__scrollwrap"> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/rating.html" %} | ||
| </div> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/edit.html" %} | ||
| </div> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/banner.html" %} | ||
| </div> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/toc.html" %} | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% endblock %} | ||
| {% block extrahead %} | ||
| {{ super() }} | ||
| {% set title = config.site_name %} | ||
| {% if page and page.meta and page.meta.title %} | ||
| {% set title = title ~ " - " ~ page.meta.title %} | ||
| {% elif page and page.title and not page.is_homepage %} | ||
| {% set title = title ~ " - " ~ page.title %} | ||
| {% endif %} | ||
| <meta property="og:type" content="website" /> | ||
| <meta property="og:title" content="{{ title }}" /> | ||
| <meta property="og:image" content="https://docs.percona.com/percona-backup-mongodb/_images/mongodb.png" /> | ||
| <meta property="og:url" content="https://docs.percona.com/percona-backup-mongodb/" /> | ||
| {% endblock %} | ||
|
|
||
| {% block content%} | ||
| {% block site_nav %} | ||
| {% if nav %} | ||
| {% if page.meta and page.meta.hide %} | ||
| {% set hidden = "hidden" if "navigation" in page.meta.hide %} | ||
| {% endif %} | ||
| <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" {{ hidden|default("") }}> | ||
| <div class="md-sidebar__scrollwrap"> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/nav.html" %} | ||
| <br> | ||
| <label class="md-nav__title" for="__drawer"> | ||
| <a href="https://learn.percona.com/download-percona-backup-for-mongodb-manual-2" | ||
| onclick="_gaq.push(['b._trackEvent', 'Percona Backup for MongoDB', 'Download', 'Download Manual Backup for MongoDB']);" | ||
| class="md-nav__link md-nav__link--active" | ||
| style="font-size: .7rem;"> | ||
| Download PDF | ||
| </a> | ||
| </label> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
|
|
||
| {{ super() }} | ||
| {% if "toc.integrate" not in features %} | ||
| {% if page.meta and page.meta.hide %} | ||
| {% set hidden = "hidden" if "toc" in page.meta.hide %} | ||
| {% endif %} | ||
| <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" {{ hidden|default("") }}> | ||
| <div class="md-sidebar__scrollwrap"> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/rating.html" %} | ||
| </div> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/edit.html" %} | ||
| </div> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/banner.html" %} | ||
| </div> | ||
| <div class="md-sidebar__inner"> | ||
| {% include "partials/toc.html" %} | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% endblock %} | ||
|
|
||
| <script> | ||
| window.addEventListener('beforeprint', (event) => { | ||
| for (const detailEl of document.querySelectorAll('details')) { | ||
| if (detailEl.getAttribute('open') == null) { | ||
| detailEl.setAttribute('data-was-closed', 'true') | ||
| } | ||
| detailEl.setAttribute('open', '') | ||
| } | ||
| }) | ||
| window.addEventListener('afterprint', (event) => { | ||
| for (const detailEl of document.querySelectorAll('details')) { | ||
| if (detailEl.getAttribute('data-was-closed') != null) { | ||
| detailEl.removeAttribute('data-was-closed') | ||
| detailEl.removeAttribute('open') | ||
| } | ||
| } | ||
| }) | ||
| </script> | ||
| {% block content %} | ||
| {{ super() }} | ||
|
|
||
| <script> | ||
| !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys onSessionId".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); | ||
| posthog.init('phc_7unoI9J6Fm0SMrfDp35xNOpCRTkOAibbffQwdGWbHnL',{api_host:'https://eu.posthog.com'}) | ||
| </script> | ||
| <script> | ||
| window.addEventListener('beforeprint', () => { | ||
| for (const detailEl of document.querySelectorAll('details')) { | ||
| if (detailEl.getAttribute('open') == null) { | ||
| detailEl.setAttribute('data-was-closed', 'true'); | ||
| } | ||
| detailEl.setAttribute('open', ''); | ||
| } | ||
| }); | ||
| window.addEventListener('afterprint', () => { | ||
| for (const detailEl of document.querySelectorAll('details')) { | ||
| if (detailEl.getAttribute('data-was-closed') != null) { | ||
| detailEl.removeAttribute('data-was-closed'); | ||
| detailEl.removeAttribute('open'); | ||
| } | ||
| } | ||
| }); | ||
| </script> | ||
|
|
||
| {% endblock %} | ||
| <script> | ||
| !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){ | ||
| function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]), | ||
| t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}} | ||
| (p=t.createElement("script")).type="text/javascript",p.async=!0, | ||
| p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r); | ||
| var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[], | ||
| u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e}, | ||
| u.people.toString=function(){return u.toString(1)+".people (stub)"}, | ||
| o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys onSessionId".split(" "), | ||
| n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); | ||
| posthog.init('phc_7unoI9J6Fm0SMrfDp35xNOpCRTkOAibbffQwdGWbHnL',{api_host:'https://eu.posthog.com'}); | ||
| </script> | ||
| {% endblock %} |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -32,6 +32,62 @@ | |||||
| pbm restore <backup_name> --ns <database.*> --with-users-and-roles | ||||||
| ``` | ||||||
|
|
||||||
| ### Selective restore with users and roles | ||||||
|
|
||||||
| #### Overview | ||||||
|
|
||||||
| Percona Backup for MongoDB allows you to perform selective restore of databases and collections. Additionally, you can choose to include **users and roles defined** in the database in your selective backup, ensuring that access control is restored along with the data. | ||||||
|
||||||
| Percona Backup for MongoDB allows you to perform selective restore of databases and collections. Additionally, you can choose to include **users and roles defined** in the database in your selective backup, ensuring that access control is restored along with the data. | |
| Percona Backup for MongoDB allows you to perform selective restore of databases and collections. Additionally, you can choose to include **users and roles defined** in the database in your selective restore, ensuring that access control is restored along with the data. |
Check warning on line 44 in docs/usage/restore-selective.md
GitHub Actions / vale
[vale] docs/usage/restore-selective.md#L44
[Google.Will] Avoid using 'will'.
Raw output
{"message": "[Google.Will] Avoid using 'will'.", "location": {"path": "docs/usage/restore-selective.md", "range": {"start": {"line": 44, "column": 33}}}, "severity": "WARNING"}
Check warning on line 46 in docs/usage/restore-selective.md
GitHub Actions / vale
[vale] docs/usage/restore-selective.md#L46
[Vale.Spelling] Did you really mean 'namespace'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'namespace'?", "location": {"path": "docs/usage/restore-selective.md", "range": {"start": {"line": 46, "column": 23}}}, "severity": "WARNING"}
Check warning on line 54 in docs/usage/restore-selective.md
GitHub Actions / vale
[vale] docs/usage/restore-selective.md#L54
[Vale.Spelling] Did you really mean 'mydb'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'mydb'?", "location": {"path": "docs/usage/restore-selective.md", "range": {"start": {"line": 54, "column": 8}}}, "severity": "WARNING"}
Check warning on line 60 in docs/usage/restore-selective.md
GitHub Actions / vale
[vale] docs/usage/restore-selective.md#L60
[Vale.Spelling] Did you really mean 'Namespace'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'Namespace'?", "location": {"path": "docs/usage/restore-selective.md", "range": {"start": {"line": 60, "column": 3}}}, "severity": "WARNING"}
Check warning on line 62 in docs/usage/restore-selective.md
GitHub Actions / vale
[vale] docs/usage/restore-selective.md#L62
[Vale.Spelling] Did you really mean 'namespace'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'namespace'?", "location": {"path": "docs/usage/restore-selective.md", "range": {"start": {"line": 62, "column": 73}}}, "severity": "WARNING"}
Check failure on line 66 in docs/usage/restore-selective.md
GitHub Actions / vale
[vale] docs/usage/restore-selective.md#L66
[Google.Latin] Use 'that is' instead of 'i.e.'.
Raw output
{"message": "[Google.Latin] Use 'that is' instead of 'i.e.'.", "location": {"path": "docs/usage/restore-selective.md", "range": {"start": {"line": 66, "column": 59}}}, "severity": "ERROR"}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The restore page documents important constraints for
--with-users-and-roles(e.g., requiring a collection wildcard likemydb.*, excluding cluster/global users/roles, and overwrite behavior on restore). This backup page currently doesn’t call out the wildcard requirement or explicitly clarify the same scope limitation (db-scoped only). Suggest adding a short warning/note here for consistency so users don’t try--ns=\"db.collection\"or assume cluster-wide users/roles are included.