Содержание

Настройка внутренней репликации

основная дока по этому поводу

https://github.com/FirebirdSQL/firebird/blob/master/doc/README.replication.md

настройка основной БД

ALTER DATABASE ENABLE PUBLICATION
ALTER DATABASE INCLUDE ALL TO PUBLICATION

после этого настроиваем файл реплики пример -

database = /db/ac.fdb
{
        journal_directory = /db/replic/journal
        journal_archive_directory = /db/replic/journal_archive
}

папки должны быть уже созданы, после этого сервер надо перезапустить.

копирование БД

с рабочей БД лучше всего через блокировку файла и ручное копирование

вызываем

ALTER DATABASE BEGIN BACKUP

Копируем, вызываем

ALTER DATABASE END BACKUP

настройка принимающего сервера

nbackup -f /db/ac.fdb -seq

и одно из двух ниже -

  gfix -replica read_only /db/ac.fdb -- set up database as read-only replica
  gfix -replica read_write /db/ac.fdb -- set up database as read-write replica

вторая нужна если там отчетность и она должна писать в БД.

в конфиг -

database = /db/ac.fdb
{
  journal_source_directory = /db/replic/in
}

синхронизация

на реплике -

adduser replic
adduser replic firebird

убеждаемся что у группы есть право на запись в /db/repic/in

на сервере генерим ключ -

ssh-keygen  

копируем на реплику -

ssh-copy-id replic@192.168.0.257

upload.sh

#!/bin/sh

# Цикл для обработки каждого файла в директории /db/replic/journal_archive
for file in /db/replic/journal_archive/*
do
  # Использование rsync для копирования файла на удаленный сервер
  # -a : Архивный режим, сохраняет разрешения, владельцев и временные метки
  # -v : Вывод подробной информации о процессе копирования
  # -z : Сжатие данных во время передачи
  # --remove-source-files : Удаляет исходный файл после успешной передачи
  rsync -az --remove-source-files "$file" replic@1.6.1.10:/db/replic/in/

  # Проверка статуса выполнения rsync
  if [ $? -eq 0 ]; then
    # Удалите символ комментария ниже для вывода сообщения во время отладки
    # echo "Успешное копирование и удаление: $file"
    :
  else
    echo "Ошибка при копировании файла: $file" >> /db/upload_error.log
  fi
done

в крон -

# upload replic
* * * * * flock -n /db/upload.sh /db/upload.sh

проверка

в случае успешной работы, будет выполняться 3 условия

1 - на основном сервер пустая папка /db/replic/journal_archive

2 - на реплике пустая папка /db/replic/in/

3 - можно сравнивать кол-во записей в bill

Converting the replica to a regular database

As simple as this:

  gfix -replica none /db/ac.fdb