InnoDB Slave没有更新

时间:2012-10-10 15:08:05

标签: mysql replication innodb

我有一个主MySQL服务器,我正在尝试为InnoDB数据库设置复制 我执行主站和从站配置,创建主站DB的转储,在从站上恢复它并运行复制。一切看起来都不错,但没有更新反映在Slave上。 Slave正在运行,Master和Slave上的Read_Master_Log_Pos是相同的。我甚至查找了mysql-relay-bin.00000X文件,还有来自Master的更新。但是当我运行“SELECT * FROM db.table;”时没有变化 如果我将BD引擎改为MyISAM,一切正常 我还尝试创建一个空数据库(InnoDB引擎),转储它并从Slave上恢复,启动复制,然后在Master上创建表并填充它们。在这种情况下,复制运行良好。但我还需要一种方法来复制已创建和填充的数据库 我该怎么办?

我有:
my.cnf on Master:

[mysqld]
bind-address=0.0.0.0
port=3306
replicate-do-db=gcm_data
log-bin=/var/lib/mysql/mysql-bin
server-id=8217
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

奴隶的my.cnf:

[mysqld]
bind-address=0.0.0.0
port=3306
replicate-do-db=gcm_data
relay-log-index=/var/lib/mysql/mysql-relay-bin.index
relay-log=/var/lib/mysql/mysql-relay-bin
server-id=50890
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

SHOW MASTER STATUS \ G

File: mysql-bin.000001
Position: 657
Binlog_Do_DB:
Binlog_Ignore_DB:

显示失败状态\ G

Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.13.52
Master_User: slave1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 657
Relay_Log_File: mysql-relay-bin.000004
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: gcm_data
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 2
Exec_Master_Log_Pos: 657
Relay_Log_Space: 551
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:

在Master上显示PROCESSLEIST:

| Id | User   | Host              | db   | Command     | Time | State                                                          | Info             |
| 16 | slave1 | 10.0.13.140:54683 | NULL | Binlog Dump | 2062 | Has sent all binlog to slave; waiting for binlog to be updated | NULL             |

Slave上的SHOW PROCESSLIST:

| Id | User        | Host      | db   | Command | Time | State                                                                 | Info             |
| 14 | system user |           | NULL | Connect | 2203 | Waiting for master to send event                                      | NULL             |
| 15 | system user |           | NULL | Connect | 2203 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |

如果它有点重要我从虚拟CentOS 6.0,MySQL 5.1.61运行主站和从站。

更新

我实现了一点行为测试:我在Master创建了一个空数据库,运行一个复制脚本(一切顺利 - MasterSlave正在运行)。然后我创建了一个InnoDB

CREATE TABLE tbl (id INT, data VARCHAR(10)) engine=InnoDB;

这张桌子出现在奴隶身上。然后我用数据填充表格

INSERT tbl values (1, "1");

数据已在Slave上更新。

然后我停止了Master(service mysqld stop)并且Slave IO也停止了

SHOW SLAVE STATUS - Slave_IO_Running: No, Slave_SQL_Running: Yes

然后我在Master上启动了MySQL,Slave IO也在一段时间内启动了。但由于Slave上没有更新,因此它们出现在Slave上的mysql-relay-bin.00000X中。

1 个答案:

答案 0 :(得分:0)

嗯..我以某种方式解决了这个问题。似乎问题恰恰在于从虚拟机运行Master和Slave。我在真机上运行相同的复制脚本,一切正常。

<强>更新
前段时间在真机上出现了同样的问题 最终我找到了这个问题的根源:
我正在使用INSERT / SELECT命令测试我的复制,如下所示:
INSERT db.table(ID,VALUE)值(ID,2);
在硕士和检查:
SELECT * FROM db.table;
在奴隶。而id没有告诉我更新。
但后来我尝试了:
USE db;
INSERT表(ID,VALUE)值(ID,2);
奴隶台上有更新。