我已经为现有数据库服务器设置了 MySQL 复制。设置似乎没问题,但在我启动复制后,从属服务器上的数据库从未更新。两台服务器都使用 CentOS 5.7 64 位。它们有足够的磁盘空间。
从 MySQL 主服务器
mysql> 显示类似“server_id”的变量;
| server_id | 1 |
mysql> show processlist;
| 391673 | repl| mysqlslave.mydomain.com:47453 | NULL | Binlog Dump | 1453 | 已将所有 binlog 发送给从属;等待 binlog 更新 | NULL
mysql>显示从属主机;
空集(0.00 秒)
mysql>显示主状态;
|mysql-bin.000008|98|db1,db2|
从 MySQL 从属服务器
mysql> 显示类似“server_id”的变量;
server_id | 2
mysql> show slave status \G;
**************************** 1. 行 ***************************
Slave_IO_State:等待主服务器发送事件
Master_Host:192.168.1.2
Master_User:repl
Master_Port:3306
Connect_Retry:60
Master_Log_File:mysql-bin.000008
Read_Master_Log_Pos:98
Relay_Log_File:slave-relay-bin.000004
Relay_Log_Pos:235
Relay_Master_Log_File:mysql-bin.000008
Slave_IO_Running:是
Slave_SQL_Running:是
Replicate_Do_DB:db1;db2
MySQL 日志
在从属服务器中,消息日志显示此信息
111031 10:53:16 [注意] 从属 I/O 线程退出,读取日志'mysql-bin.000008',位置 98
111031 10:53:16 [注意] 读取中继日志事件时出错:从属 SQL 线程已被杀死
111031 10:53:16 [注意] 从属 SQL 线程已初始化,开始在日志'mysql-bin.000008'中复制,位置 98,中继日志'./slave-relay-bin.000001' 位置:4
111031 10:53:16 [注意] 从属 I/O 线程:已连接到主服务器'[电子邮件保护]:3306',复制已在日志'mysql-bin.000008'的位置 98 处开始
更新
如果我在主服务器上创建一个新的数据库,它将被复制到从属服务器,但现有数据库不会更新。
最后更新
我没有一次性转储所有数据库并设置复制,而是逐个进行,现在运行良好。
答案1
我觉得我明白问题所在
您的问题中有以下内容:
Replicate_Do_DB: db1; db2
这不应该是一个用分号分隔的列表。它应该是用逗号分隔的列表。
我猜你的从属系统的 /etc/my.cnf 中有这个
replicate-do-db=db1; db2
正确的设置方法是
replicate-do-db=db1
replicate-do-db=db2
请在从属服务器的 /etc/my.cnf 中调整此项,并在从属服务器上重新启动 mysql
试一试 !!!
更新时间:2011-10-31 15:20 EDT
你可能想通过以下方式清除中继日志
STOP SLAVE;
CHANGE MASTER TO master_log_file='mysql-bin.000008',master_log_pos-98;
START SLAVE;
然后运行SHOW SLAVE STATUS\G
并确保复制正在运行,方法是确保您看到此信息
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
就像你在问题中说的那样