MySQL Replication:努力使用replicate-rewrite-db来更改数据库名称

问题描述 投票:3回答:3

我有我的主数据库,其中有一个表,产品(稍后会有更多,这只是开发)。

操作系统:CentOS 6.4

我使用它将其设置为复制主机:

在/etc/my.cnf中:

server-id = 1
binlog-do-db=product_database
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

在master上我用这个命令创建了用户:

GRANT REPLICATION SLAVE ON *.* TO 'hcp_slave'@'%' IDENTIFIED BY 'password_here';

然后在奴隶上:

server-id = 2
master-host=HOST_IP_ADDRESS
master-connect-retry=60
master-user=hcp_slave
master-password=PASSWORD
replicate-do-db=product_database
#The below line is what causes issues
replicate-rewrite-db=product_database->product_database2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

在我添加“replicate-rewrite-db”行(并删除它)之前,复制在具有相同数据库名称的服务器之间完美地工作。但是,出于测试目的,我需要它进入具有不同名称的数据库“product_database2”。

从我在mysql手册和一些随机论坛(以及stackoverflow)中读到的所有内容,我认为我正在使用复制命令,但显然,我不是,所以我非常感谢帮助找出我的问题所在谎言,或者如果我试图以完全错误的方式解决这个问题!

对于那些好奇的人,我实际上要做的是,如果我在这里遇到XY问题:

我正在尝试创建一个主数据库,以便将产品提供给少数网站,而不必手动更新所有网站。我认为最好的方法是创建1个主数据库,并将所有站点配置为从属设备,以自动从中提取产品。

编辑:

我尝试在slave配置文件中注释掉'replicate-do-db'这一行,至少现在它给出了一些知道product_database2存在的指示,但它是以错误的形式出现的:

Last_Error: Error 'Error on rename of './product_database/asdf.frm' to     './product_database2/asdf.frm' (Errcode: 2)' on query. Default database: 'product_database2'. Query: 'RENAME TABLE `product_database`.`asdf`
mysql database-replication
3个回答
1
投票

在奴隶方面你需要设置

replicate-do-db=product_database2

因为你重写了像product_database->product_database2这样的数据库名称。


0
投票

来自refman

只有涉及表的语句才会受到影响(不是诸如CREATE DATABASE,DROP DATABASE和ALTER DATABASE之类的语句),并且仅当from_name是主服务器上的默认数据库时才会受到影响。

所以试试吧。使用上面的配置,但尝试在master上运行的查询之前添加USE。

USE product_database;
INSERT INTO product_database (c1,c2) VALUES (1,2);

0
投票

我遇到了与数据库命名相同的问题。我的解决方案

在my.cnf文件中:

replicate-rewrite-db="product_database->product_database2"
replicate-do-db="product_database2"
© www.soinside.com 2019 - 2024. All rights reserved.