URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4431
[ Назад ]

Исходное сообщение
"mysql репликация конкретной таблицы"

Отправлено ping , 17-Окт-06 17:59 
MySQL репликация 1й или нескольких таблиц.


имеем два сервера mysql, версии 4.x.x

нужно реплицировать две таблицы мастера(telebom.gw и telebom.term_area_price) и
вставлять упдейты/инсерты в базу(asterisk.gw и asterisk.term_area_price)
подчиненного.


конфигурация следующая:

выдержки из my.cnf головного сервера:

log-bin
binlog-do-db=telebom
max_binlog_size=312M
server-id       = 1


из my.cnf подчиненного:

replicate-rewrite-db=telebom->asterisk
replicate-do-db=asterisk
replicate-do-table=asterisk.gw
replicate-do-table=asterisk.term_area_price
server-id       = 2

после запуска подчиненного, прописывания корректной позиции и change master
to.. bla-bla, подчиненный сервер вроде бы начинает работать, даже обновляет
relay.log со всеми запросами, сыплящиеся в telebom.%.

61011 15:32:08 [Note] Slave SQL thread initialized, starting replication in log 'x-bin.002' at position 1040405, relay log './saw3-relay-bin.000001' position: 4

061011 15:32:08 [Note] Slave I/O thread: connected to master 'repluser@x.x.x.x:3306', replication started in log 'x-bin.002' at position 1040405

вроде бы работает.

но если попытаться на головном добавить что либо в таблицу telebom.gw, то на
подчиненном сервере ничего в эту таблицу не добавляется.
хотя в relay.log инфа об инсерте есть, но sql-thread'у это по барабану и он
ничего в таблицу не пишет и не ругается никак.

root@saw3:/var/db/mysql# mysqlbinlog saw3-relay-bin.000001 | grep hoi
insert into gw values('','1.1.1.1','hoi','1111','123456','1','144','150','','0','0','0','0','0','0','0','0','0');
insert into gw values('','1.1.1.1','hoi','1111','123456','1','144','150','','0','0','0','0','0','0','0','0','0');

куда копать? и что я сделал неправильно?

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: x.x.x.x
                Master_User: repluser
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: x-bin.002
        Read_Master_Log_Pos: 20045369
             Relay_Log_File: saw3-relay-bin.000001
              Relay_Log_Pos: 19005004
      Relay_Master_Log_File: x-bin.002
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: asterisk
        Replicate_Ignore_DB:
         Replicate_Do_Table: asterisk.term_area_price,asterisk.gw
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 20045369
            Relay_Log_Space: 19005004
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)


к тому же в процессе »репликации« заметил проблему: оказывается нельзя указать мастеру логать в бинарный лог запросы только касательно одной таблицы, можно указать логирование целиком всей базы. а это меня не устраивает, так как в итоге слейв, которому надо реплицировать всего лишь одну табличку, начинает качать весь мастер-бинлог почем зря. или я где-то не прав?

и может быть можно как-то тривиально обойтись без репликации ?
никто не заморачивался подобным?


Содержание

Сообщения в этом обсуждении
"mysql репликация конкретной таблицы"
Отправлено ping , 18-Окт-06 10:06 
что-то все предательски молчат. неужели такая нетривиальная задача репликация пары табличек ?

"mysql репликация конкретной таблицы"
Отправлено openwork , 25-Окт-06 16:27 
такая нетривиальная задача почитать документацию ?
--replicate-do-table=db_name.tbl_name

Tell the slave thread to restrict replication to the specified table. To specify more than one table, use this option multiple times, once for each table. This works for cross-database updates, in contrast to --replicate-do-db. See Section 6.9, “How Servers Evaluate Replication Rules”.

>что-то все предательски молчат. неужели такая нетривиальная задача репликация пары табличек ?
>



"mysql репликация конкретной таблицы"
Отправлено ping , 25-Окт-06 17:12 
>такая нетривиальная задача почитать документацию ?
>--replicate-do-table=db_name.tbl_name
>
>Tell the slave thread to restrict replication to the specified table. To
>specify more than one table, use this option multiple times, once
>for each table. This works for cross-database updates, in contrast to
>--replicate-do-db. See Section 6.9, “How Servers Evaluate Replication Rules”.
>
>>что-то все предательски молчат. неужели такая нетривиальная задача репликация пары табличек ?
>>


я же написал выше, что с таким конфигом не работает.
или вышеприведенные параметры некорректны?
если можно опиши, что лишнего у меня в конфиге

ибо условия таковы:

1. на мастере имя базы данных, в которой находится нужная для репликации табличка, отличается от имени базы данных на слейве, куда нужно эту табличку реплицировать.

2. я хочу чтобы на мастере записи в бинарный лог валились только касательно одной этой реплицируемой таблицы, а не всей базы целиком. т.е. опция bin-log-db, не подходит, т.к.  слейву, который находится физически далеко от мастера, приходится выкачивать кучу не нужных записей и хранить их в своем бин-логе, занимая место на диске.


"mysql репликация конкретной таблицы"
Отправлено gena_s , 16-Июн-07 13:38 
у меня возникла подобная ситуация и только при рестарте slave выдало:

070616 12:22:06 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=chief-relay-bin' to avoid this problem.

мне помогло, и копирует тока одну таблицу, как тебе и надо


"mysql репликация конкретной таблицы"
Отправлено gena_s , 16-Июн-07 13:43 
у меня возникла подобная ситуация и только при рестарте slave выдало:

070616 12:22:06 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=chief-relay-bin' to avoid this problem.

мне помогло, и копирует тока одну таблицу, как тебе и надо