整天都在为这个问题“努力”。
我有一个可以正常工作的主/从设置,但是当我尝试复制到从服务器上的其他数据库名称时,它会失败。my.cnf 如下所示:
server-id=101
report-host=Slave01
replicate_do_db='DB1'
replicate-rewrite-db=DB1->DB2
replicate-ignore-table=DB2.SOME_TABLE_NAME
如果我删除 replicate-rewrite-db 行,它会完美运行并将 DB1 数据库从主服务器复制到从服务器。我在从服务器上使用的主日志位置是在主服务器上的 CREATE DATABASE DB1 调用之后。在该日志位置之后,将在主服务器上创建表并导入数据。在创建 DB2 数据库之后,我才配置和启动从服务器。
有任何想法吗?
更新:在 mysql 错误日志中看到此信息:
120531 15:48:19 [Note] Slave I/O thread: connected to master 'slave_user@master_server:3306', replication started in log 'mysql-bin.000001' at position 107
120531 15:48:20 [ERROR] Slave: Error 'Unknown database 'DB1'' on query. Default database: 'DB1'. Query: 'CREATE TABLE `ANOTHER_TABLE` (
答案1
我在评论中收到了提示,但用户后来将其删除了。
诀窍是不使用 replicate-do-db 而只使用 replicate-rewrite-db:
#replicate_do_db='DB1'
replicate-rewrite-db=DB1->DB2
注释掉 my.cnf 中的 replicate_do_db 行帮我解决了这个问题。
感谢那位为我指明正确方向的神秘用户,无论您是谁。
答案2
重要提示:您必须添加重写数据库的名称。在 my.cnf 中添加此行:
replicate-do-db=DB2
所以你的配置文件最终必须是这样的:
server-id=101
report-host=Slave01
replicate_do_db = DB2
replicate-rewrite-db = DB1->DB2
replicate-ignore-table=DB2.SOME_TABLE_NAME
我测试过了,它有效