====== Настройка внутренней репликации ====== ===== основная дока по этому поводу ===== https://github.com/FirebirdSQL/firebird/blob/master/doc/README.replication.md ===== настройка основной БД ===== если все в докере то стоит созадть локального пользователя firebird sudo groupadd -g 84 firebird sudo useradd -u 84 -g firebird -M -s /usr/sbin/nologin firebird если в консоли то isql -user SYSDBA -password $FIREBIRD_ROOT_PASSWORD localhost:/db/ac.fdb 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 ===== Для того чтоб БД вернуть в рабочий режим надо выполнить на отключеной БД: gfix -replica none /db/ac.fdb т.е. выключить отчеты, ядро, кассы и выполнить. если это в рабочей суматохе то это надо делать до того как сменили адрес на сервере на основной если уже сменили, то есть вот такой быстрый хак - mv ac.fdb ac_tmp.fdb reboot gfix -replica none /db/ac_tmp.fdb mv ac_tmp.fdb ac.fdb т.е. переименовать, ребутнуть, выполнить команду, вернуть обратно