2012-10-10 43 views
2

我有一個主MySQL服務器,並且正在嘗試爲InnoDB數據庫設置複製。
我執行主站和從站配置,創建主站DB的轉儲,將其恢復到從站並運行復制。一切看起來不錯,但沒有更新反映在奴隸。從站正在運行,主站和從站上的Read_Master_Log_Pos是相同的。我甚至查找了mysql-relay-bin.00000X文件,並且有Master的更新。但是當我運行「SELECT * FROM db.table;」時沒有改變。
如果我將BD引擎更改爲MyISAM,一切正常。
我也嘗試創建一個空的數據庫(InnoDB引擎),轉儲它並從它恢復它,開始複製,然後創建主表並填寫它們。在這種情況下,複製進展順利。但我也需要一種方法來複制已經創建和填充的數據庫。
我該怎麼辦?
InnoDB從未更新

我有:在主
的my.cnf:對從

[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: 

SHOW SLAVE STATUS \ 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: 

SHOW PROCESSLIST:對從

| 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    | 

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的同時運行主從站莫名其妙重要61年5月1日。

UPDATE

我實現了一個小測試的行爲:我在Master上午創建空數據庫,運行復制腳本(一切都很順利 - MasterSlave正在運行)。然後我創建了一個InnoDB

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

該表出現在從站上。然後我填充表格中的數據

INSERT tbl values (1, "1"); 

數據在從站上更新。

然後我停下碩士(service mysqld stop)和從IO也停止

SHOW SLAVE STATUS - Slave_IO_Running: No, Slave_SQL_Running: Yes 

然後我就開始主MySQL和從IO也開始在一段時間。但由於從站上沒有更新,所以它們出現在從站上的mysql-relay-bin.00000X

+1

切換到myisam使其工作使它聽起來像你沒有提交事務之前檢查奴隸的變化。 –

+0

我現在沒有實際使用交易。我正在使用「INSERT db.table(C1,C2)VALUES(V1,V2)」進行測試;「在主和「選擇*從db.table;」在主站和從站上跟蹤更新。主站更新可用,在從站 - 不是。有趣的是,現在MyISAM db在Slave上也沒有更新。 –

+0

爲什麼Skip_Counter設置爲2? – ethrbunny

回答

0

呃..我以某種方式解決了這個問題。看起來問題在於從虛擬機運行Master和Slave。我在真機上運行相同的複製腳本,一切正常。
所以現在的問題是爲什麼它沒有正確地在虛擬機上工作。

UPDATE
前一段時間在真機上出現了同樣的問題。我最終發現這個問題的來源:
我正在測試我的複製使用這樣的插入/選擇命令:
INSERT db.table(ID,VALUE)values(ID,2);
on Master and checking:
SELECT * FROM db.table;從站上的
。而id沒有告訴我更新。
但後來我試過了:
USE db; INSERT表(ID,VALUE)值(ID,2);
並且更新在從站上可用。