我有一个主 MySQL 服务器,正在尝试为 InnoDB 数据库设置复制。
我执行主从配置,创建主站数据库的转储,在从站上恢复它并运行复制。一切看起来都很好,但没有更新反映在 Slave 上。Slave 正在运行,Master 和 Slave 上的 Read_Master_Log_Pos 相同。我什至查找了 mysql-relay-bin.00000X 文件,并且有来自 Master 的更新。但是当我运行“SELECT * FROM db.table;”时没有任何变化。
如果我将 BD 引擎更改为 MyISAM,一切正常。
我还尝试创建一个空数据库(InnoDB 引擎),将其转储并在 Slave 上从中恢复,开始复制,然后在 Master 上创建表并填充它们。在这种情况下,复制做得很好。但我还需要一种方法来复制已经创建和填充的数据库。
我应该怎么办?
我有:
my.cnf 在 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
显示主状态\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 上显示 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 |
在 Slave 上显示 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
,运行一个复制脚本(一切顺利 -Master
并且Slave
正在运行)。然后我创建了一个InnoDB
表
CREATE TABLE tbl (id INT, data VARCHAR(10)) engine=InnoDB;
该表出现在 Slave 上。然后我用数据填充表格
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 上不可用,因此它们存在于mysql-relay-bin.00000X
Slave 上。