====== Настройка внутренней репликации ====== ===== основная дока по этому поводу ===== 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