Бэкапалка таблиц 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
Hello World in different languages !

Hello World And some Examples in different Programming Languages This repository contains a big list of programming languages and some examples for th

AmirHossein Mohammadi 131 Dec 26, 2022
Macros in Python: quasiquotes, case classes, LINQ and more!

MacroPy3 1.1.0b2 MacroPy is an implementation of Syntactic Macros in the Python Programming Language. MacroPy provides a mechanism for user-defined fu

Li Haoyi 3.2k Jan 06, 2023
Gmvault: Backup and restore your gmail account

Gmvault: Backup and restore your gmail account Gmvault is a tool for backing up your gmail account and never lose email correspondence. Gmvault is ope

Guillaume Aubert 3.5k Jan 01, 2023
Get a list of content on your Netflix My List that is expiring in the next month or two.

Netflix My List Expiring Movies Annoyed at Netflix for taking away your movies? Now you don't have to be! Installation instructions Install selenium C

24 Aug 06, 2022
A function decorator for enforcing function signatures

A function decorator for enforcing function signatures

Emmanuel I. Obi 0 Dec 08, 2021
Change ACLs for QNAP LXD unprivileged container.

qnaplxdunpriv If Advanced Folder Permissions is enabled in QNAP NAS, unprivileged LXD containers won't start. qnaplxdunpriv changes ACLs of some Conta

1 Jan 10, 2022
navigation_commander is a ROS package to command the robot to navigate autonomously to each table for food delivery inside a hotel.

navigation_commander navigation_commander is a ROS package to command the robot to navigate autonomously to each table for food delivery inside a hote

ALEENA LENTIN 9 Nov 08, 2021
Batch obfuscator based on the obfuscation method used by the trick bot launcher

Batch obfuscator based on the obfuscation method used by the trick bot launcher

SlizBinksman 2 Mar 19, 2022
A guy with a lot of useful things to do when doing AtCoder in Python

atcoder_python_env Python で AtCoder をやるときに便利な諸々を用意したやつ コンテスト用フォルダの作成 セットアップ 自動テス

2 Dec 28, 2021
Online learning platform

🛠 Status: In Development Teached is currently in development. So we encourage you to use it and give us your feedback, but there are things that have

Mohamed Nesredin 2 Feb 07, 2021
A python script that automatically joins a zoom meeting based on your timetable.

Zoom Automation A python script that automatically joins a zoom meeting based on your timetable. What does it do? It performs the following processes:

Shourya Gupta 3 Jan 01, 2022
本仓库整理了腾讯视频、爱奇艺、优酷、哔哩哔哩等视频网站中,能够观看的「豆瓣电影 Top250 榜单」影片。

Where is top 250 movie ? 本仓库整理了腾讯视频、爱奇艺、优酷、哔哩哔哩等视频网站中,能够观看的「豆瓣电影 Top250 榜单」影片,点击 Badge 可跳转至相应的电影首页。

MayanDev 123 Dec 22, 2022
YBlade - Import QBlade blades into Fusion 360

YBlade - Import QBlade blades into Fusion 360 Simple script for Fusion 360 that takes QBlade blade description and constructs the blade: Usage First,

Jan Mrázek 37 Sep 25, 2022
A software dedicated to automaticaly select the agent of your desire in Valorant

AUTOPICKER A software dedicated to automaticaly select the agent of your desire in Valorant GUIDE Before stariting to use this program check if you ha

p1n00 0 Sep 24, 2022
Covid 19 status. Flask application. CovidAPI. Heroku.

Covid 19 In this project we see total count of people who got this virus and total death. How does it works Written in Python. Web app, Flask. package

AmirHossein Mohammadi 12 Jan 16, 2022
The presented desktop application was made to solve 1d schrodinger eqation

schrodinger_equation_1d_solver The presented desktop application was made to solve 1d schrodinger eqation. It implements Numerov's algorithm (step by

Artem Kashapov 2 Dec 29, 2021
Blender 3.0 Python - Open temporary areas in the Text Editor

PopDrawers When editing text in Blender, it can be handy to have areas like Info, Console, Outliner, etc visible on screen to help with scripting. How

SpectralVectors 7 Nov 16, 2022
Aerospace utilities: flight conditions package, standard atmosphere model, and more.

Aerospace Utilities About Module that contains commonly-used aerospace utilities for problem solving. Flight Condition: input altitude to compute comm

1 Jan 03, 2022
Monitoring of lake dynamics

slamcore_utils Description This repo contains the slamcore-setup-dataset script. It can be used for installing a sample dataset for offline testing an

10 Jun 23, 2022
Earth centric orbit propagation tool. Built from scratch in python.

Orbit-Propogator Earth centric orbit propagation tool. Built from scratch in python. Functionality includes: tracking sattelite location over time plo

Adam Klein 1 Mar 13, 2022