|
|
|
Изменение имени базы при репликации
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Столкнулся с такой проблемой: Есть mysql сервер, на котором есть 2 базы dictionary и crm. Настроил репликацию таблиц из первой базы во вторую. Вот данные из my.cnf: [mysqld] server-id = 1 report-host = master-is-slave-host log_bin= /var/log/mysql/mysql-bin.log relay-log = /var/log/mysql/mysql-relay.log replicate-same-server-id = 1 binlog_do_db= dictionary replicate-rewrite-db=dictionary->crm replicate-do-table=crm.continent Репликация работает и при выполнении вставок в таблицу continent базы dictionary записи реплицируются в эту таблицу в базе crm. Но в случае если запрос на вставку содержит явно имя базы, то репликация не происходит, хотя бинарный лог и для master и для slave сдвигается. Тоесть запрос просто игнорируется. Пример: insert into continent (title) value ('test'); - реплицируется insert into dictionary.continent (title) value ('test'); - не реплицируется На сколько я понял из мануалов, причина в том, что replicate-rewrite-db игнорируется для кроссбазовых запросов. Можно ли как либо указать mysql, что нужно транслировать имя базы в запросе, чтобы оба приведенных запроса реплицировались? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 15:35:18 |
|
||
|
Изменение имени базы при репликации
|
|||
|---|---|---|---|
|
#18+
Настроил репликацию таблиц из первой базы во вторую. Неправда. Вы настроили репликацию в mysql по хабрахабру. А в нормальной литературе описываются опасности использования фильтров репликации, на которые вы сейчас попали. Теперь попробуйте выкинуть replicate-do-table. Если не заработает, потом вообще все варианты do выкинуть, а оставить только rewrite. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 16:57:47 |
|
||
|
Изменение имени базы при репликации
|
|||
|---|---|---|---|
|
#18+
авторНа сколько я понял из мануалов, причина в том, что replicate-rewrite-db игнорируется для кроссбазовых запросов. Решил перечитать этот момент. Да, похоже именно такой сценарий вообще никак не получится, если пользоваться только средствами самого сервера mysql. Но раз вы настроили репликацию, значит вы контролируете оба сервера. Тут уже есть простор для маневра. На подчиненном сервере те другие приложения не могут "подвинуться" и освободить первоначальное имя базы? В таком случае вы сможете, например, создать таблицы для всех баз с движком BLACKHOLE и затаскивать все изменения, но накатываться будут только нужные изменения на тех таблицах которые не BLACKHOLE. Тут уже вообще не нужно использовать все варианты фильтров репликации и, соответственно, любые сделанные изменения обязательно применятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 17:08:43 |
|
||
|
Изменение имени базы при репликации
|
|||
|---|---|---|---|
|
#18+
авторТеперь попробуйте выкинуть replicate-do-table. Если не заработает, потом вообще все варианты do выкинуть, а оставить только rewrite Спасибо - попробовал, но как и ожидалось это привело к ошибке репликации при выполнении инсерта: Error 'Duplicate entry '19' for key 'PRIMARY'' on query. Default database: 'crm'. Query: 'insert into `dictionary`.`currency` (title) value ('12300002')' Судя по всему slave при получении запроса теперь выполнил его (а не проигнорировал по фильтру как раньше), однако он все равно обратился к базе dictionary, что привело к ошибке. авторНа подчиненном сервере те другие приложения не могут "подвинуться" и освободить первоначальное имя базы? Увы нет. Идея была в том, чтобы держать все справочники в отдельной базе и реплицировать их частично в базы других приложений (для упрощения запросов и возможности сделать ключи на справочники). Все равно спасибо за ответ, буду искать обходные решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 17:16:46 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38543968&tid=1835311]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
14ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 256ms |

| 0 / 0 |
