Бэкапалка таблиц mysql 8 через брокер сообщений nats

Overview

nats-mysql-tables-backup

Бэкап таблиц mysql 8 через брокер сообщений nats (проверено и работает в ubuntu 20.04, при наличии python 3.8)

ПРИМЕРЫ: Ниже приводятся примеры, которые приводятся на примере использования набора утилит nats-examples (https://github.com/nats-io/go-nats-examples/releases/download/0.0.50/go-nats-examples-v0.0.50-linux-amd64.zip)


Получение списка ранее созданных файлов архивов резервных копий:

    ./nats-req backup.listbackups "listfiles"

Результат выполнения:

    Published [backup.listbackups] : 'listfiles'
    Received  [_INBOX.NCUWVOrx7SHW05sSy4xVWo.K60eWp7p] : '{"0": "somebackup.7z"}'

В случае невозможности получения списка:

    ./nats-req backup.listbackups "listfiles"

Результат выполнения:

    Published [backup.listbackups] : 'listfiles'
    Received  [_INBOX.Boy8V1VInXgyEl1dkjmpcy.Jisakt3I] : '{}'

^ пустой список


Создание бэкапа:

Создать архив с резервными копиями таблиц можно двумя способами:

  1. При запросе необходимо передать параметр headers={json}, где формат json объекта должен представлять из себя {'tables':'table1,table2...'}.В json объекте передаются имена таблиц, которые необходимо поместить в архив резервной копии. Соответствующий запрос на языке python выглядеть будет так:
nc.request("backup.makebackup", 'makebackup'.encode(), headers={'tables':'table1,table2,table3'})

Формирование подобного запроса на других языках необходимо уточнять.

  1. Список файлов можно передать в сообщении через знак =. К примеру запрос, выполняемый через nats-req:
./nats-req backup.makebackup "makebackup=table1,table2,table3"

Результат выполнения:

Published [backup.makebackup] : 'makebackup=table1,table2,table3'
Received  [_INBOX.GFb3Zj69O4ieT3CTo6NIrs.Nzz5ApkM] : '{"status": "ok", "futurefilename": "/opt/backups/2021-11-28_17-59-19-backup.7z"}'

В случае достижения успешного результата в ответе будет получен json в виде {"status": "ok", "futurefilename": "/opt/backups/2021-11-28_17-59-19-backup.7z"}, где status - ok (процесс был запущен; futurefilename - /opt/backups/2021-11-28_17-59-19-backup.7z (обещаемое имя файла после успешного завершения процесса резервного копирования)).

В случае краха процесса будет возвращён json в виде {'status':'bad','futurefilename':''}, где status - bad (ой всё плохо); futurefilename - '' (пустая строка с обещанным файлом). Процесс создания архива производится в отдельном потоке, дабы быстрее отдать статус запрашиваемому, не удерживая соединения (дабы не отвалилось по таймауту).


Получение содержимого архива резервной копии:

Получить можно двумя способами:

  1. Разместить имя запрашиваемого архива в заголовке headers в теле запроса. Пример на языке python ниже, для остальных языков необходимо уточнение:
nc.request("backup.archive", 'archive'.encode(), headers={'archivename':'2021-11-28_20-30-39-backup.7z'})
  1. Разместить имя архива в теле сообщения через знак =. Пример с клиентом nats-req:
./nats-req backup.archive "archivename=wrong.7z"

В случае успешного получения информации будет возвращён список файлов, содержащихся в архиве. Пример:

./nats-req backup.archive "archivename=2021-11-28_20-30-39-backup.7z"
Published [backup.archive] : 'archivename=2021-11-28_20-30-39-backup.7z'
Received  [_INBOX.RJtuKZcqC65JAEWy8gMV6A.RQ5cYzMA] : '{"2021-11-28_20-30-39-backup.7z": "table1.sql,table2.sql,table3.sql"}'

В случае если архив невозможно прочитать (его не существует, он повреждён или он не является 7z архивом) будет возвращено:

./nats-req backup.archive "archivename=2021-11-28_20-30-39-backupf.7z"
Published [backup.archive] : 'archivename=2021-11-28_20-30-39-backupf.7z'
Received  [_INBOX.CnPNfscvrTQjoMlakfzVJe.15UZxvuk] : '{"2021-11-28_20-30-39-backupf.7z": "bad"}'

Восстановление таблиц в БД из резервных копий

Восстановить таблицы возможно двумя способами:

  1. Разместить имя запрашиваемого архива и перечень таблиц, необходимых для восстановления в заголовке headers. Пример на языке python, для остальных языков необходимо уточнять:
nc.request("backup.restore", 'archive'.encode(), headers={'archivename':'2021-11-28_23-49-44-backup.7z','tables':'table1.sql,table2.sql,table3.sql'})
  1. Разместить имя архива и имена таблиц в теле сообщения. В качестве разделителя между именем файла и перечнем таблиц служит - ; , а для указания имени архива и имён таблиц - = . Пример с клиентом nats-req:
./nats-req backup.restore "archive=2021-11-28_23-49-44-backup.7z;tables=table1.sql,table2.sql,table3.sql"

Восстановление производится в отдельном потоке, т.к. процесс может занять приличное время, поэтому ответ производится как можно раньше. В случае успешного запуска процесса восстановления будет получено (пример):

">
Received  [_INBOX.tNRLxow09f16DSeyRXYf6A.tNRLxow09f16DSeyRXYfAG]: '{"status": "ok"}'

   

   
./nats-req backup.restore "archive=2021-11-28_23-49-44-backup.7z;tables=table1.sql,table2.sql,table3.sql"
Published [backup.restore] : 'archive=2021-11-28_23-49-44-backup.7z;tables=table1.sql,table2.sql,table3.sql'
Received  [_INBOX.Y3K4HT267jQS6xDsI26F3z.6oVGfVpL] : '{"status": "ok"}'

В случае невозможности восстановления в выводе будет фигурировать {'status':'bad'}. Пример:

./nats-req backup.restore "archive=2021-11-28_23-49-44-backup.7z;tables=table1.sql,table2.sql,table3.sqld"
Published [backup.restore] : 'archive=2021-11-28_23-49-44-backup.7z;tables=table1.sql,table2.sql,table3.sqld'
Received  [_INBOX.DzRdPAG7u1Ew3ueQ8M6b0C.lOgyRqBl] : '{"status": "bad"}'

При использовании, в коде где будет использоваться данное решение лучше прописать исключение, что может быть получено что то неожиданное в плане вывода.

Owner
Constantine
Constantine
Python script for changing the SSH banner content with other content

Banner-changer-py Python script for changing the SSH banner content with other content. The Script will take the content of a specified file range and

2 Nov 23, 2021
This project is about for notifying moderators about uploaded photos on server.

This project is about for notifying moderators (people who moderate data from photos) about uploaded photos on server.

1 Nov 24, 2021
Trusted sessions for falcon using itsdangerous.

Falcon signed sessions This project allows you to easily add trusted cookies to falcon, it works by storing a signed cookie in the client's browser us

Ward 1 Feb 08, 2022
Flight Reservation App With Python

Flight Reservation App With Python

victor-h. 1 Nov 21, 2021
Automate the boilerplate while initializing your Python project

Rubric Automate the boilerplate while initializing your Python project Preface Rubric is an opinionated project initializer for Python. It assum

Redowan Delowar 23 Dec 16, 2022
A Microsoft reward automator, designed to work headless on a raspberry pi

MsReward A Microsoft reward automator, designed to work headless on a raspberry pi. Tested with a pi 3b+ and a pi 4 2Gb . Using a discord bot to log e

10 Dec 21, 2022
How to access and display MyEnergi data

MyEnergi-Python-Example How to access and display MyEnergi data Windows PC Install a version of Python typically 3.10 The Python code here needs addit

G6EJD 8 Nov 28, 2022
A collection of Workflows samples for various use cases

Workflows Samples Workflows allow you to orchestrate and automate Google Cloud and HTTP-based API services with serverless workflows.

Google Cloud Platform 76 Jan 07, 2023
A Pythonic Data Catalog powered by Ray that brings exabyte-level scalability and fast, ACID-compliant, change-data-capture to your big data workloads.

DeltaCAT DeltaCAT is a Pythonic Data Catalog powered by Ray. Its data storage model allows you to define and manage fast, scalable, ACID-compliant dat

45 Oct 15, 2022
Palestra sobre desenvolvimento seguro de imagens e containers para a DockerCon 2021 sala Brasil

Segurança de imagens e containers direto na pipeline Palestra sobre desenvolvimento seguro de imagens e containers para a DockerCon 2021 sala Brasil.

Fernando Guisso 10 May 19, 2022
An extremely configurable markdown reverser for Python3.

🔄 Unmarkd A markdown reverser. Unmarkd is a BeautifulSoup-powered Markdown reverser written in Python and for Python. Why This is created as a StackS

ThatXliner 5 Jun 27, 2022
Python bindings for `ign-msgs` and `ign-transport`

Python Ignition This project aims to provide Python bindings for ignition-msgs and ignition-transport. It is a work in progress... C++ and Python libr

Rhys Mainwaring 3 Nov 08, 2022
carrier.py is a Python package/module that's used to save time when programming

carrier.py is a Python package/module that's used to save time when programming, it helps with functions such as 24 and 12 hour time, Discord webhooks, etc

Zacky2613 2 Mar 20, 2022
Organize seu linux - organize your linux

OrganizeLinux Organize seu linux - organize your linux Organize seu linux Uma forma rápida de separar arquivos dispersos em pastas. formatos a serem c

Marcus Vinícius Ribeiro Andrade 1 Nov 30, 2021
Demo content - Automate your automation!

Automate-AAP2 Demo Content - Automate your automation! A fully automated Ansible Automation Platform. Context Installing and configuring Ansible Autom

0 Oct 27, 2022
This is a simple bank management system based on Python.

Python Bank Management This is a simple bank management system based on Python. It's able to do basic operations of simple bank management. Outcome: W

Md. Rakibul Islam 3 Jan 06, 2022
Passenger Car Unit (PCU) Calculator

This is a streamlit web application which can be used to calculate Passenger Car Unit (PCU) values for a selected road section.

Dineth Dhananjaya 1 Apr 26, 2022
Programmatic interface to Synapse services for Python

A Python client for Sage Bionetworks' Synapse, a collaborative, open-source research platform that allows teams to share data, track analyses, and collaborate

Sage Bionetworks 54 Dec 23, 2022
Configure request params such as text, color, size etc. And then download the image

Configure request params such as text, color, size etc. And then download the image

6 Aug 18, 2022
A carrot-based color palette you didn't know you needed.

A package to produce a carrot-inspired color palette for python/matplotlib. Install: pip install carrotColors Update: pip install --upgrade carrotColo

10 Sep 28, 2021