Настройка MS SQL Server Database Mirroring

Ваши легаси-системы на SQL Server нуждаются в отказоустойчивости, но лицензии не позволяют использовать современные решения? Мы настраиваем Database Mirroring — надёжный механизм синхронной или асинхронной репликации, который обеспечивает защиту данных даже на устаревших редакциях. Наша команда реализует проект под ключ: от выбора режима до настройки автоматического переключения, с последующей поддержкой и гарантией стабильной работы.
Часто задаваемые вопросы

Вы получили задачу — обеспечить отказоустойчивость для легаси БД на устаревших редакциях SQL Server, где Always On AG недоступен из-за лицензии. Мы часто сталкиваемся с такими запросами у заказчиков, у которых в продакшне до сих пор крутятся системы на легаси-версиях. Database Mirroring — рабочее решение, хотя Microsoft и пометила его как deprecated. Ниже — практические детали, которые помогут обойти подводные камни.

Почему Database Mirroring до сих пор востребован?

Несмотря на возраст технологии, mirroring остаётся единственным вариантом для старых редакций SQL Server (Standard, Web) без лицензии Enterprise. Он не требует дополнительных компонентов вроде кластеризации Windows, а настройка занимает 2–3 дня. При этом синхронный режим обеспечивает RPO = 0, что критично для финансовых систем и ERP. Кроме того, mirroring не зависит от версии ОС и может быть развёрнут на изолированных серверах без общего хранилища.

Как выбрать режим: синхронный или асинхронный?

Выбор режима определяется требованиями к RPO и производительности. Синхронный режим (High Safety) гарантирует нулевую потерю данных, но увеличивает время отклика на 10–30% из-за ожидания подтверждения от mirror. Асинхронный (High Performance) не ждёт подтверждения, что даёт максимальную пропускную способность, но при сбое возможна потеря данных за последние несколько секунд. Автоматический failover работает только в синхронном режиме при наличии witness-сервера.

Режим RPO RTO Производительность Автоматический failover
High Safety (synchronous) 0 Секунды Снижается на 10–30% Да (с witness)
High Performance (asynchronous) Несколько секунд (возможна потеря) Минуты Максимальная Нет (только ручной)

Как настроить Database Mirroring через T-SQL?

Настройка состоит из трёх шагов: создание endpoint'ов, инициализация mirror-базы, запуск сессии. В среднем процедура занимает около 30–40 минут при наличии чистых серверов.

Создание endpoint'ов

На обоих серверах и witness (опционально) создаются endpoint'ы на TCP-порту 5022:

-- На PRINCIPAL и MIRROR
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = REQUIRED ALGORITHM AES);

-- На WITNESS (можно SQL Express)
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED);

Инициализация mirror-базы

Выполняете полный бэкап + лог-бэкап на principal, восстанавливаете на mirror в режиме NORECOVERY:

-- На principal: бэкап
BACKUP DATABASE AppDB TO DISK = 'D:\Backup\AppDB_mirror_init.bak' WITH COMPRESSION;
BACKUP LOG AppDB TO DISK = 'D:\Backup\AppDB_mirror_log.bak';
-- На mirror: восстановление
RESTORE DATABASE AppDB FROM DISK = 'D:\Backup\AppDB_mirror_init.bak' WITH NORECOVERY, REPLACE, MOVE 'AppDB' TO 'E:\SQLData\AppDB.mdf', MOVE 'AppDB_log' TO 'E:\SQLLog\AppDB_log.ldf';
RESTORE LOG AppDB FROM DISK = 'D:\Backup\AppDB_mirror_log.bak' WITH NORECOVERY;

Запуск сессии и проверка

Сначала на mirror, затем на principal:

-- На MIRROR:
ALTER DATABASE AppDB SET PARTNER = N'TCP://SQL01.corp.local:5022';
-- На PRINCIPAL:
ALTER DATABASE AppDB SET PARTNER = N'TCP://SQL02.corp.local:5022';
-- Добавление witness (если нужен автоfailover):
ALTER DATABASE AppDB SET WITNESS = N'TCP://SQL03.corp.local:5022';
-- Проверка состояния:
SELECT mirroring_state_desc, mirroring_role_desc, mirroring_safety_level_desc FROM sys.database_mirroring WHERE database_id = DB_ID('AppDB');

Нормальное состояние — SYNCHRONIZED (synchronous) или SYNCHRONIZING (asynchronous). SUSPENDED говорит о проблеме.

Как избежать типичных ошибок?

Классическая ситуация: после настройки endpoint'ов связь есть (проверено telnet'ом на порт 5022), но ALTER DATABASE SET PARTNER зависает с ошибкой 1418. Причина — сервисные учётные записи SQL Server не имеют права CONNECT на endpoint'ы друг друга. Решение — явный GRANT:

-- На SQL01 разрешить SQL02
GRANT CONNECT ON ENDPOINT::Mirroring TO [CORP\SQL02SvcAccount];
-- На SQL02 разрешить SQL01
GRANT CONNECT ON ENDPOINT::Mirroring TO [CORP\SQL01SvcAccount];

Если SQL работает под Local System или Network Service — используйте сертификаты вместо Windows-аутентификации. Другая распространённая ошибка — забывают настроить DNS или добавить записи в hosts, что приводит к сбоям при попытке соединения.

Ошибка Причина Решение
Ошибка 1418 при SET PARTNER Нет CONNECT на endpoint GRANT CONNECT
SUSPENDED после сети Потеря связи, переполнение журнала Проверить logs, ALTER ... RESUME
Автоfailover не срабатывает Нет witness или асинхронный режим Добавить witness, переключить в synchronous

Что входит в работу по настройке mirroring

Наши инженеры выполняют полный цикл: аудит текущей конфигурации (версия SQL Server, редакция, сетевая связность), проектирование схемы (выбор режима, решение о witness), настройка endpoint'ов и прав доступа, инициализация mirror-базы с переносом на новые LUN'ы, тестирование всех сценариев failover (ручного и автоматического), разработка runbook'а и скриптов мониторинга с оповещением в Telegram/Slack. Среднее время настройки — 2–3 дня, включая тестирование. При миграции на Always On AG сроки увеличиваются до 5–7 дней, но downtime не превышает 10 минут.

Сроки и стоимость

Сроки настройки mirroring — от 2 до 3 рабочих дней. Если требуется миграция на Always On AG — от 5 до 7 дней. Стоимость рассчитывается индивидуально после аудита: учитываются версия SQL Server, сложность схемы и требования к RPO/RTO. Свяжитесь с нами для аудита вашей инфраструктуры — наша команда реализовала такие переходы для 30+ заказчиков. Получите консультацию по выбору оптимальной стратегии отказоустойчивости.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139