mysql复制成功,但是slave没有复制


8

我已经创建了mysql主从配置,并且一切正常。“显示主状态”;在奴隶上不显示任何错误。这是输出

 Slave_IO_State: Waiting for master to send event
                  Master_Host: 109.123.100.58
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 106
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 

但是,当主服务器发生更改时,似乎不会在从服务器上进行复制

论高手。显示主状态

+------------------+----------+--------------+-------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB        |
+------------------+----------+--------------+-------------------------+
| mysql-bin.000001 |   639495 |              | mysql,informationschema |
+------------------+----------+--------------+-------------------------+

在从属SHOW PROCESSLIST上产生

+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id  | User        | Host      | db   | Command | Time  | State                                                                 | Info             |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| 174 | system user |           | NULL | Connect | 25777 | Waiting for master to send event                                      | NULL             |
| 175 | system user |           | NULL | Connect | 25777 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| 199 | root        | localhost | NULL | Query   |     0 | NULL                                                                  | show processlist |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

我错过了什么吗


两个问题。您是否在主服务器和从服务器上运行相同版本的MySQL?您在主/从配置中是否设置了其他服务器ID?编辑:我们也可以看到完整的内容SHOW MASTER STATUS吗,我认为最上面的部分丢失了。

抱歉,我的错误的最高位是SHOW SLAVE STATUS \ G的输出。显示从机产量的主机状态+ ------------------ + ---------- + ------------- -+ ------------------------- + | 档案| 职位| Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + ---- --------------------- + | mysql-bin.000004 | 106 | | mysql,信息格式| + ------------------ + ---------- + -------------- + ---- --------------------- +
Soyeed

别看SHOW MASTER STATUS奴隶。除非从站也充当下游其他从站的主站,否则此信息无关紧要。
Michael-sqlbot

如果您SHOW PROCESSLIST在主机上,您是否看到从机的传入连接?你应该。另外,我会尝试STOP SLAVE IO_THREAD;,然后START SLAVE IO_THREAD;在从服务器上看到的输出如何SHOW SLAVE STATUS(在从服务器上)的变化,如果在所有。
Michael-sqlbot

Answers:


5

您呈现的输出非常令人困惑。一方面,主人显示:

mysql-bin.000001   639495 

从属服务器PROCESSLIST指示复制有效(IO线程已连接到主服务器,SQL线程正在等待)。

奴隶SHOW SLAVE STATUS再次宣称一切都很好,而主人的地位是106

是否所有这些输出都大致同时发出?如果没有,那么它们就没有价值。

我将检查以下内容:

  • 显而易见:109.123.100.58真的是您的主人吗?
  • SHOW PROCESSLIST在主机上是否列出了从机在replica用户下的连接?
  • server-id对主站和从站有不同的设置吗?
  • 你有什么replicate-do-*或者replicate-ignore-*在你的设置mysql.cnf文件?

是的,输出是同时的。1.是109.123.100.58是主人。2.否3.是4.否。在主节目上显示处理列表' +-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 23243 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +-------+------+-----------+------+---------+------+-------+------------------+
-Soyeed

3
2-没有?? 一分钟就怪异。我非常不确定您的从站是否实际上已连接到正确的主站。
Shlomi Noach 2013年

1
谢谢你的提示!就我而言,我具有M-> S1-> S2复制,并且我的S2服务器ID与我的M服务器ID相匹配。
亚伦R.

1

比使用binlog-ignore-db更好的是使用从属端过滤。我陷入了类似的情况,是的,我花了整整一天的时间来弄清楚:

我错过了一件大事!!!

和...之间的不同

--replicate-do-db=
--replicate-do-table=

在奴隶方面。和

--replicate-do-table='mydb.%'

在-do-table上对我不起作用。我不得不用

--replicate-do-db='mydb'

我想这对通配符有用

--replicate-wild-do-table='mydb.%'

...现在继续弄清楚如何从多个主服务器复制同一张表。好的,我知道了,MySQL本身不支持它。MariaDB 10做到了。

最初我还有另一个问题:我的密码超过了32个字符。!


1

我也遇到了这个问题。根本原因是拥有主人的server_id=0。MariaDB具有特殊的行为server_id=0不允许复制工作。

对于复制组中的每个服务器,server_id必须是唯一的。如果保留为0(默认值,直到MariaDB 10.2.1为止),从服务器将不连接到主服务器,而主服务器将拒绝所有从服务器连接。

当我开始基于1建立索引时,一切正常。


-2

您没有告诉从站要复制哪个数据库:变量Replicate_Do_DB为空。

尝试添加线

plicate-do-db = name_of_db(其中“ name_of_db”是要复制的数据库的名称)

在my.cnf中(在从属服务器上)并重新启动从属服务器。

编辑:同时,我认为我的答案不是正确的解决方案;-)

也许看看该页面:http : //dev.mysql.com/doc/refman/5.1/en/replication-problems.html


我认为那是不对的。你可以看到,639495个字节都被记录到主的二进制日志

问题是为什么复制不起作用-如果将某些内容写入二进制日志,则不行。通常,命令和SHOW MASTER STATUS不会显示更多信息。

对不起,我不好..显示主人地位+------------------+----------+--------------+-------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+-------------------------+ | mysql-bin.000004 | 106 | | mysql,informationschema | +------------------+----------+--------------+-------------------------+
Soyeed

也有人告诉我,如果我不打算使用plicate-do-db,它将复制所有数据库。相反,我有entry binlog_ignore_db = mysql binlog_ignore_db = informationschema
Soyeed

1
不要遵循此答案中的建议,因为您不需要告诉数据库要复制哪个模式(默认为所有模式),这很可能会破坏您的复制,并且很可能不是您要查找的内容。您希望(99.999%)复制所有架构。
Shlomi Noach 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.