Настройка издателя для репликации транзакций
В этом разделе с помощью среды SQL Server Management Studio создается публикация транзакций для публикации фильтрованного подмножества таблицы Продукт из примера базы данных AdventureWorks2012. Также в список доступа к публикации (PAL) добавляется имя входа SQL Server, используемое агентом распространителя.
Создание публикации и определение статей
-
Подключитесь к издателю в среде SQL Server Management Studio, а затем раскройте узел сервера.
-
Щелкните правой кнопкой мыши элемент Агент SQL Server и выберите пункт Запустить. Прежде чем приступить к созданию публикации, необходимо запустить агент SQL Server. Если при выполнении этого действия агент не запускается автоматически, его нужно запустить вручную с помощью диспетчера конфигурации SQL Server.
-
Разверните папку Репликация, щелкните правой кнопкой мыши папку Локальные публикации и выберите пункт Создать публикацию. После этого запустится мастер создания публикации:
-
На странице База данных публикации выберите AdventureWorks2012 и нажмите кнопку Далее.
-
На странице Тип публикации выберите Публикация транзакций и нажмите кнопку Далее:
-
На странице Статьи разверните узел Таблицы и установите флажок Продукт. Затем разверните узел Продукт и снимите флажки ListPrice и StandardCost. Выберите Далее.
-
На странице Фильтрация строк таблицы нажмите кнопку Добавить.
-
В диалоговом окне Добавление фильтра выберите столбец SafetyStockLevel. Щелкните стрелку вправо, чтобы добавить столбец в предложение WHERE инструкции фильтра запроса. После этого вручную введите следующий модификатор предложения WHERE:
WHERE < 500
-
Нажмите кнопку ОК, а затем кнопку Далее.
-
Установите флажок Создать моментальный снимок немедленно и обеспечить доступ к нему для инициализации подписок и нажмите кнопку Далее:
-
На странице Безопасность агентов снимите флажок Использовать настройки безопасности агента моментальных снимков.
Выберите Настройки безопасности для агента моментальных снимков. Введите <имя_компьютера_издателя> repl_snapshot в поле Учетная запись процесса, укажите пароль этой учетной записи и нажмите кнопку ОК.
-
Повторите предыдущий шаг, чтобы указать <имя_компьютера_издателя> repl_logreader в качестве учетной записи процесса для агента чтения журнала. Нажмите кнопку ОК.
-
На странице Завершение работы мастера введите AdvWorksProductTrans в поле Имя публикации и нажмите кнопку Готово:
-
После создания публикации нажмите кнопку Закрыть, чтобы закрыть мастер.
Если при попытке создать публикацию обнаруживается, что агент SQL Server не запущен, может возникнуть следующая ошибка. Она указывает на то, что публикация создана успешно, но при этом агент моментальных снимков запустить не удалось. В этом случае необходимо запустить агент SQL Server, а затем вручную запустить агент моментальных снимков. Инструкции приведены в следующем разделе.
Просмотр состояния создания моментального снимка
-
Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.
-
В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите пункт Просмотр состояния агента моментальных снимков:
-
Отобразятся сведения о текущем состоянии задания агента моментальных снимков для публикации. Перед тем как перейти к следующему разделу, убедитесь, что задание моментального снимка выполнено успешно.
Если агент SQL Server не был запущен при создании публикации, в сведениях о состоянии агента моментальных снимков для публикации будет указано, что он никогда не запускался. В таком случае выберите Запустить, чтобы запустить агент моментальных снимков:
Если отображается сообщение об ошибке, ознакомьтесь с разделом Устранение неполадок с агентом моментальных снимков.
Добавление имени входа агента распространения в список доступа к публикации
-
Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.
-
В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите пункт Свойства. Откроется диалоговое окно Свойства публикации.
а. Выберите страницу Список доступа к публикации и нажмите кнопку Добавить.
b. В диалоговом окне Добавление доступа к публикации выберите <имя_компьютера_издателя> repl_distribution и нажмите кнопку ОК.
Дополнительные сведения см. статье Основные понятия программирования репликации.
Поиск ошибок, связанных с агентом распространения
Агент распространения находит данные в базе данных распространителя и применяет их к подписчику.
-
Подключитесь к издателю в SQL Server Management Studio. Разверните узел сервера, щелкните правой кнопкой мыши папку Репликация и выберите пункт Запустить монитор репликации.
-
В Мониторе репликации выберите публикацию AdvWorksProductTrans и перейдите на вкладку Все подписки. Щелкните подписку правой кнопкой мыши и выберите пункт Просмотреть сведения:
-
Откроется диалоговое окно журнала От распространителя к подписчику, в котором будут приведены подробные сведения о возникшей с агентом ошибке:
-
Эта ошибка указывает, что агент распространения выполняет повторную попытку. Дополнительные сведения см. в журнале заданий для агента распространения.
a. В обозревателе объектов разверните узел Агент SQL Server и откройте элемент Монитор активности заданий.
b. Выполните сортировку заданий по категории.
c. Определите агент распространения по категории REPL: распространение. Щелкните агент правой кнопкой мыши и выберите пункт Просмотреть журнал.
-
Выберите одну из записей ошибок и просмотрите текст ошибки в нижней части окна:
-
Эта ошибка указывает на то, что агент распространения использует неверный пароль. Чтобы устранить ошибку, выполните указанные ниже действия.
a. В обозревателе объектов разверните узел Репликация.
b. Щелкните подписку правой кнопкой мыши и выберите пункт Свойства.
c. Нажмите кнопку с многоточием (…) рядом с элементом Учетная запись процесса агента и измените пароль.
-
Снова проверьте монитор репликации, щелкнув правой кнопкой мыши элемент Репликация в обозревателе объектов. Красный значок X рядом с элементом Все подписки указывает, что ошибка агента распространения по-прежнему не устранена.
Откройте журнал От распространителя к подписчику, для чего выберите Монитор репликации > Просмотреть подробности и щелкните подписку правой кнопкой мыши. В этом случае ошибка будет несколько иной:
-
Эта ошибка указывает, что агенту распространения не удалось подключиться к подписчику из-за ошибки входа для пользователя NODE2\repl_distribution. Чтобы более детально проанализировать причины ошибки, подключитесь к подписчику и откройте текущий журнал ошибок SQL Server в узле Управление в обозревателе объектов.
Если отображается эта ошибка, значит, в подписчике не было предоставлено имя для входа. Сведения об устранении этой ошибки см. в разделе Разрешения для репликации.
-
После устранения ошибки со входом снова проверьте монитор репликации. Если все ошибки устранены, рядом с именем публикации появится зеленая стрелка, а также будет показано состояние Выполняется в разделе Все подписки.
Щелкните подписку правой кнопкой мыши, чтобы открыть журнал От распространителя к подписчику еще раз и проверить успешность выполненных действий. Если агент распространения запущен впервые, вы увидите, что было выполнено массовое копирование моментального снимка в подписчик.
Шаг 2. Права на репликацию
Далее необходимо создать профиль пользователя, из под которого будет происходить репликация. Для этого запускаем консоль:
mysql -u root -p
Далее создаем и назначаем права пользователю для реплики:
- REPLICATION SLAVE — привилегия позволяющая подключиться к серверу т запросить обновлённые на мастере данные;
-
REPLICATION CLIENT — привилегия, позволяющая использовать статистику:
-
SHOW MASTER STATUS
-
SHOW SLAVE STATUS
-
SHOW BINARY LOGS
-
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_user'@'10.1.%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
Далее блокируем все таблицы в нашей базе данных:
USE newdatabase; FLUSH TABLES WITH READ LOCK;
Проверяем статус Мастер-сервера:
SHOW MASTER STATUS;
Мы увидим что-то похожее на:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | newdatabase | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
Фильтруй базар
Возможно, для публикации вам нужен поднабор таблицы как отдельной статьи. Это называется фильтрацией данных. Фильтрация данных позволяет избавиться от конфликтов репликации, когда несколько сайтов имеют право обновлять данные. Ты можешь фильтровать таблицы вертикально, горизонтально или смешанно для создания отфильтрованной порции данных.
Вертикальный фильтр содержит поднабор колонок таблицы. Только реплицированные колонки отображаются подписчику. Для примера, можно использовать вертикальный фильтр для публикации всех колонок кроме «Заработная плата» в таблице «Работники».
Горизонтальный фильтр содержит поднабор строк таблицы. Подписчик получает только этот поднабор строк. Если ненужно реплицировать информацию о левых доходах, то ее можно отфильтровать запросом.
Возможно подписание на публикацию с помощью Push или Pop метода. Метод Push обычно используется в приложениях, которые должны отправлять изменения подписчику как можно быстрее после изменения. Этот метод более предпочтителен для публикаций требующих высокую защищенность и где высокая загрузка процессора у дистрибьютора не влияет на производительность.
Метод Pop более подходит в публикациях с меньшей защищенностью и может поддерживать большое количество подписчиков, например подписчики Internet.
Настройка репликации между контроллерами домена
Сообщения: 360 Благодарности: 12
Сообщения: 4677 Благодарности: 1090
——- в личке я не консультирую и не отвечаю на профессиональные вопросы. для этого есть форум.
Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.
Сообщения: 360 Благодарности: 12
Сообщения: 4677 Благодарности: 1090
——- в личке я не консультирую и не отвечаю на профессиональные вопросы. для этого есть форум.
Сообщения: 360 Благодарности: 12
Сообщения: 4677 Благодарности: 1090
——- в личке я не консультирую и не отвечаю на профессиональные вопросы. для этого есть форум.
Сообщения: 25778 Благодарности: 7508
Сообщения: 360 Благодарности: 12
cameron, Iska, если на КД (на котором была создана организационная единица) через ADUC подключиться к другому КД (на который нужно синхронизировать) или на КД (на который нужно синхронизировать) подключиться к КД (на котором была создана организационная единица), то организационная единица синхронизируется мгновенно.
Но все таки почему она не синхронизируется без подключения через ADUC к другому КД? Выставление расписания синронизации на четыре раза в час не помогает. Принудительная синхронизация тоже не помогает.
Сообщения: 4677 Благодарности: 1090
——- в личке я не консультирую и не отвечаю на профессиональные вопросы. для этого есть форум.
Сообщения: 360 Благодарности: 12
cameron, есть на виртульных машинах два контроллера домена на Windows 2012 R2 Standard. Теперь опишу пошагово действия: 1. Создаю на КД1 организационную единицу. 2. На КД2 эта организационная единица не появляется ни через час ни через сутки. 3. КД2 уходит в принудительный lock. Вхожу заново; нет этой организационной единицы. 4. Все через тот же ADSS добираюсь до Replicate Now; организационной единицы как не было так и нет. 5. Выхожу из системы и повторно вхожу (как альтернатива перегружаю КД2) и только после этого появляется та самая организационная единица, которая сутки назад была создана на соседнем КД1.
Вот так и выяснил. Ну я честное не знаю как еще это можно было заметить или не заметить.
Как я уже писал пробовал и repadmin /syncall и также не помогало. Вдобавок к выходу/входу из системы и перезагрузке КД, смена КД в ADUC оказалось тоже помогает реплицировать организационные единицы. Но ведь так быть не должно я полагаю.
Репликация Active Directory (AD)
Active Directory, которая активно используется серверами Windows – это тоже база данных. Она может быть распределенной, когда в работе участвуют несколько серверов, и при этом, пользователь должен иметь возможность войти на любой из них с одним и тем же паролем. Как это сделать? Зарегистрироваться на каждом сервере в отдельности? Глупо и бессмысленно. И тут на помощь приходит репликация. Достаточно зарегистрироваться на одном сервере и прописать необходимые права доступа и вся информация будет реплицирована куда надо.
Репликация в AD происходит автоматически и чаще всего не требует особого вмешательства, но требует хорошего понимания основной идеи. Если бы с Active Directory было бы все так просто, то я не рассматривал бы эту технологию отдельно. Для начала нужно понимать, что для аутентификации используется протокол Kerberos и ответственность за подлинность берет на себя контроллер домена. Когда ты заходишь на сервер, то имя и пароль направляются серверу, который проверяет эти данные и в случае удачи выдает белый билет. Нет, билет конечно не белый, но на его основе пользователь получает те или иные права. Если есть желание и нет знаний, то советую поближе познакомиться с Active Directory и Kerberos, а наша задача – репликация.
Если до Windows 2000 в сети мог быть только один контроллер домена, который хранил все самое важное и управлял репликацией (тогда не было и Kerberos), то в нынешних версиях может быть несколько контроллеров. При этом все они будут равноправными
Это усложняет задачу по управлению процессом репликацию и разрешению возможных конфликтов, но окна нашли простое решение. Контроллеры домена наблюдают друг за другом, определяя, какой из них в данный момент будет дистрибутором, т.е. одарит других изменениями.
Настраивать вручную соединения между контроллерами доменов в сети нет необходимости, хотя и есть такая возможность. Сервера сами через определенные промежутки времени отслеживают доступные контроллеры и хранят в памяти всю необходимую информацию.
По умолчанию, репликация происходит каждые пятнадцать минут. Через эти промежутки времени сервер направляет контроллерам домена сообщения о том, что есть изменения и конечно же становиться дистрибутором. Остальные участники репликации, получив подобное сообщение, подключаются к серверу и вытягивают данные. Сам дистрибутор без запроса свои изменения в сеть не выплюнет, чтобы злые хакеры не смогли перехватить подобный пакет. Просто нет смысла без надобности кидать в сеть такие важные данные, вдруг остальные контроллеры домена упали (пусть земля им будет пухом и прахом).
Создание связанного сервера в Microsoft SQL Server
Создать связанный сервер в Microsoft SQL Server можно следующим образом:
- Используя инструкции T-SQL;
- Используя графический интерфейс среды SQL Server Management Studio.
Сегодня мы рассмотрим оба способа.
Исходные данные для примеров
Давайте представим, что у нас есть файл Excel, к которому нам нужно периодически обращаться в своих запросах, поэтому мы решили создать связанный сервер для удобства.
Файл Excel мы сохранили на диск D и он содержит следующие данные.
Подготовка к созданию связанного сервера
Чтобы подключаться к внешним источникам данных и выполнять распределенные запросы, на сервере должен быть установлен соответствующий провайдер.
В нашем случае мы будем использовать провайдер Microsoft.ACE.OLEDB.12.0 x64.
Поэтому перед тем как переходить к созданию связанного сервера, нам необходимо убедиться в том, что данный провайдер у нас установлен, так как в противном случае примеры, которые мы рассмотрим ниже, работать не будут.
Чтобы проверить, есть ли у нас этот провайдер, мы можем запустить следующую процедуру или в обозревателе объектов открыть контейнер «Объекты сервера -> Связанные серверы -> Поставщики» и посмотреть там.
EXEC sp_enum_oledb_providers;
В случае если у Вас в списке нет нужного провайдера, Вам необходимо скачать его с официального сайта Microsoft и установить.
Создание связанного сервера на T-SQL
Для создания и управления связанными серверами в Microsoft SQL Server существуют специальные хранимые процедуры:
- sp_addlinkedserver – процедура создания связанного сервера;
- sp_addlinkedsrvlogin – процедура настройки безопасности связанного сервера.
Таким образом, чтобы создать связанный сервер, нам необходимо выполнить следующие инструкции.
--Создание связанного сервера EXEC sp_addlinkedserver @server = 'TEST_EXCEL', @srvproduct = 'Excel', @provider = 'Microsoft.ACE.OLEDB.12.0', @datasrc = 'D:\TestExcel.xlsx', @provstr = 'Excel 12.0;IMEX=1;HDR=YES;'; --Настройки безопасности (авторизации) EXEC sp_addlinkedsrvlogin @rmtsrvname='TEST_EXCEL', @useself= 'False', @locallogin=NULL, @rmtuser=NULL, @rmtpassword=NULL;
В результате выполнения данных инструкций будет создан связанный сервер, источником которого будет выступать файл Excel, а также будут выполнены определённые настройки для авторизации на данном сервере.
В обозревателе объектов отобразится данный сервер.
Описание параметров процедуры sp_addlinkedserver
- @server – название связанного сервера;
- @srvproduct – название продукта;
- @provider – провайдер (поставщик);
- @datasrc – источник данных;
- @provstr – строка поставщика для подключения.
Описание параметров процедуры sp_addlinkedsrvlogin
- @rmtsrvname – название связанного сервера;
- @useself – указывает, как будет происходить авторизация, с указанием логина и пароля, либо с использованием сопоставления с контекстом безопасности;
- @locallogin – имя входа на локальный сервер;
- @rmtuser – удаленное имя входа, используемое для подключения к связанному серверу;
- @rmtpassword – пароль для удаленного имени входа.
Создание связанного сервера с помощью SQL Server Management Studio
Все то же самое, что мы сделали чуть выше с помощью инструкций T-SQL, мы можем выполнить и в графическом интерфейсе среды SQL Server Management Studio.
Для этого нажмите на контейнер «Связанные серверы» правой кнопкой мыши и выберите «Создать связанный сервер».
Затем в открывшемся окне внесите соответствующие данные для подключения (данные соответствуют параметрам процедуры sp_addlinkedserver).
Чтобы сделать точно такую же авторизацию, которую мы сделали в примере с использованием процедуры sp_addlinkedsrvlogin, необходимо перейти на вкладку «Безопасность» и выбрать пункт «Устанавливать с использованием текущего контекста безопасности имени для входа».
После этого нажать «ОК», и точно такой же связанный сервер с файлом Excel будет создан.
Configuring the Master
- Enable binary logging if it’s not already enabled. See Activating the Binary Log and Binary log formats for details.
- Give the master a unique . All slaves must also be given a server_id. This can be a number from 1 to 232-1, and must be unique for each server in the replicating group.
- Specify a unique name for your replication logs with . If this is not specified your host name will be used and there will be problems if the hostname ever changes.
- Slaves will need permission to connect and start replicating from a server. Usually this is done by creating a dedicated slave user, and granting that user permission only to replicate (REPLICATION SLAVE permission).
Example Enabling Replication for MariaDB
Add the following into your my.cnf file and restart the database.
log-bin server_id=1 log-basename=master1 binlog-format=mixed
The server id is a unique number for each MariaDB/MySQL server in your network.
binlog-format specifies how your statements are logged. This mainly affects the size of the binary log that is sent between the Master and the Slaves.
Then execute the following SQL with the command line client:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'bigs3cret'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
Example Enabling Replication for MySQL
If you want to enable replication from MySQL to MariaDB, you can do it in almost the same way as between MariaDB servers. The main difference is that MySQL doesn’t support .
log-bin server_id=1
Настройка распространителя в SQL Server
Для начала нужно настроить экземпляр распространителя. В разделе Replication, в контекстном меню нажмите Configure Distribution…
Так как мы хотим использовать этот экземпляр в качестве распространителя, выбираем первый пункт (testnove2 will act as its own Distributor; SQL Server will create a distribution databasse and log).
Указываем директорию для моментальных снимков. Я оставлю стандартный путь.
Указываем директорию для базы данных Distribution. Если есть такая возможность, то лучше разместить файлы базы данных distribution на отдельном массиве дисков
Особенно это важно, если планируется большой объём реплицируемых данных
На этом шаге можно указать экземпляры, которые смогут использовать данный сервер как распространитель. Я сразу добавлю testnode1\node1. Это можно сделать и позже, после начальной конфигурации.
Укажите пароль для связи с экземплярами, которые будут связываться с распространителем.
После этого можно жать Finish. На этом настройка распространителя завершена.
Если вы хотите изменить пароль распространителя или разрешить другим издателям использовать этот распространитель, то можно это сделать через Distributor Properties…
Configuring a Distributor
Before
trying to get insights about each of the replications and how to configure it,
it’s important to setup a distributor.
Select the
server which is to act as the distributor and the right click on the
replication folder and then click configure Distribution.
This will lead to the below screen, click next.
The next screen as below will as to either configure the
current server as the Distributor or connect to the different desired server
and configure it to be a distributor. Let’s select the current server and click
next.
The next screen point to the folder path where the snapshots
of the publications will be kept by the snapshot agent, we will keep the
default value and click next.
The Next screen configures the Distribution database its
data (.MDF) and Log (.ldf) files. Bear in mind once the distribution has been
configured on a server, the system databases will have an additional database
added to it “Distribution”. Click next.
On clicking next it brings you to the screen where you can
add all the servers which will be the publishers and use the currently being
configured distributor to distribute its publications. By default the current
server will be added as the publisher once could add more servers. Click next.
Click next on the below screen and proceed.
This will bring you to the last screen which will have the
summary of the configurations. Click finish to complete the Distributor
configuration.
Alternatively please watch the distribution configuration video below.
Настройка издателя репликации в SQL Server
Теперь переходим к настройкам издателя репликации. Запустите тот же мастер Configure Distributuin.
Выберите второй пункт, указываем сервер распространитель – testnode2\node2
После этого введите пароль, который вы указывали при настройке распространителя и нажмите Finish.
Теперь можно создать новую публикацию: Replication -> Local Publication -> New Publication.
Укажите базу данных, которая будет участвовать в репликации.
Выберите тип репликации. Доступны:
- Snapshot publication;
- Transactional publication (выберите этот тип репликации);
- Peer-to-Peer publication;
- Merge publication.
Выберите таблицы, которые нужно реплицировать. С помощью транзакционной репликации так же можно реплицировать пользовательские процедуры, функции и представления. Реплицируемые объекты называются Articles (Статьи).
На следующем шаге можете указать фильтр для публикации.
Чтобы мастер сразу создал моментальный снимок, выберите опцию “Create a snapshot immediately and keep the snapshot available to initialize subscriptions”.
Укажите аккаунты, из-под которых будут выполняться агенты. Нажмите Security Settings и выберите “Run under SQL Server Agent service account”.
В имени публикации я указываю названия сервера-подписчика. Так легче ориентироваться если публикаций на другие сервера будет много.