簡體   English   中英

MySQL復制不能與replicate-wild-do-table一起正常使用

[英]MySql Replication not working properly with replicate-wild-do-table

我正在CentOS 7上創建MySQL主從復制,下面是這兩個服務器的配置文件詳細信息:

主服務器的my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0


sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

從服務器的my.cnf

[mysqld]
server-id=2
replicate-wild-do-table=db1%.%

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock


symbolic-links=0

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

數據庫詳細信息如下:

主服務器

create database db1;
create table db1.dbtb1(name varchar(100));

從服務器

create database db1slave;
create table db1slave.dbtb1(name varchar(100));

如您所見,兩個服務器上的數據庫名稱是不同的,因為我已將以下語句用於從屬服務器進行復制。

replicate-wild-do-table=db1%.%

但是,當我嘗試將數據插入主數據庫服務器時,出現以下錯誤或從屬服務器狀態:

Error 'Table 'db1.dbtb1' doesn't exist' on query. Default database: ''. Query: 'insert into db1.dbtb1 values ('Punu')'

從服務器狀態:

Slave_IO_State: Waiting for master to send event
Master_Host: IP address
              Master_User: repl
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: mysql-bin.000003
      Read_Master_Log_Pos: 971
           Relay_Log_File: mysqld-relay-bin.000002
            Relay_Log_Pos: 283
    Relay_Master_Log_File: mysql-bin.000003
         Slave_IO_Running: Yes
        Slave_SQL_Running: No
          Replicate_Do_DB:
      Replicate_Ignore_DB:
       Replicate_Do_Table:
   Replicate_Ignore_Table:
  Replicate_Wild_Do_Table: db1%.%
Replicate_Wild_Ignore_Table:
               Last_Errno: 1146
               Last_Error: Error 'Table 'db1.dbtb1' doesn't exist' on query. Default database: ''. Query: 'insert into db1.dbtb1 values ('Punu')'
             Skip_Counter: 0
      Exec_Master_Log_Pos: 760
          Relay_Log_Space: 668
          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: NULL
    Master_SSL_Verify_Server_Cert: No
            Last_IO_Errno: 0
            Last_IO_Error:
           Last_SQL_Errno: 1146
           Last_SQL_Error: Error 'Table 'db1.dbtb1' doesn't exist' on   query. Default database: ''. Query: 'insert into db1.dbtb1 values ('Punu')'
 Replicate_Ignore_Server_Ids:
         Master_Server_Id: 1
              Master_UUID: 2fc2ef76-c87a-11e6-ae22-000d3aa2da57
         Master_Info_File: /var/lib/mysql/master.info
                SQL_Delay: 0
      SQL_Remaining_Delay: NULL
  Slave_SQL_Running_State:
       Master_Retry_Count: 86400
              Master_Bind:
  Last_IO_Error_Timestamp:
 Last_SQL_Error_Timestamp: 161227 18:40:36
           Master_SSL_Crl:
       Master_SSL_Crlpath:
       Retrieved_Gtid_Set:
        Executed_Gtid_Set:
            Auto_Position: 0

如果我使用相同的數據庫名稱,它將正常工作。 但是根據我的要求,我不能在兩個服務器上都使用相同的數據庫名稱。

我只是想在主服務器數據庫中更新表“ dbtb1”時將其復制到從屬數據庫表中。

我也嘗試在從屬my.cnf文件中嘗試以下選項:

1個

   replicate-wild-do-table=db1%.dbtb1

2

   replicate-rewrite-db="db1->db1slave"

如果我插入記錄,則上述選項可以正常工作,但刪除或更新記錄時不會反映出來。

3

 replicate-wild-do-table=%.dbtb1

您的選項plicate-wild-do-table = db1%。%將從db1%開始復制所有模式中的所有表,並且也復制以開始所有表。 因此它將復制所有表。 多數民眾贊成在一個錯誤的配置。

使用plicate-rewrite-db選項進行配置。 請在下面閱讀。

https://mariadb.com/resources/blog/multisource-replication-how-resolve-schema-name-conflicts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM