问题:
在常规的MySQL主从复制架构中,主库和备库的数据库时完全一样的,如果主库和备库的数据库名称不一样怎么办?
比如:主库的数据库名称为binghe_master, 从库的数据库名称为binghe_slave,则按照常规方式配置好主从复制后,要如何处理呢?
解决方案:
在按照常规方式配置好MySQL主从复制之后,我们可以使用CHANGE REPLICATION FILTER语句将主库和从库上的数据库映射为不同的数据库。
首先,我们在MySQL命令行输入如下命令查看CHANGE REPLICATION FILTER语句的帮助信息。
mysql> \h CHANGE REPLICATION FILTERName: 'CHANGE REPLICATION FILTER'Description:Syntax:CHANGE REPLICATION FILTER filter[, filter][, ...] [FOR CHANNEL channel]filter:REPLICATE_DO_DB = (db_list)| REPLICATE_IGNORE_DB = (db_list)| REPLICATE_DO_TABLE = (tbl_list)| REPLICATE_IGNORE_TABLE = (tbl_list)| REPLICATE_WILD_DO_TABLE = (wild_tbl_list)| REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)| REPLICATE_REWRITE_DB = (db_pair_list)#################省略部分输出结果信息########################
其中,filter选项中的REPLICATE_REWRITE_DB = (db_pair_list)表示在主从复制过程中,可以将主库和从库的数据库映射为不同的数据库。帮助信息中也给出了使用的示例,在输出的帮助信息中找到如下代码。
CHANGE REPLICATION FILTERREPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));
这就是CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB语句的使用示例,等号后面的参数都是数据库的名称,而且数据库的名称都是以成对的形式出现,每对数据库需要使用小括号括起来,前面的数据库为主库中的数据库名称,后面的数据库为从库中的数据库名称,可以配置多个数据库对。
例如,帮助信息中的使用示例中,dbA为主库中的数据库名称,dbB为从库中的数据库名称,它对应的是主库中的dbA数据库。也可以简单的使用如下方式将主库和从库的数据库对应起来。
主库从库dbA ----> dbBdbC ----> dbD
综上,如果主库的数据库名称为binghe_master, 从库的数据库名称为binghe_slave,则按照常规方式配置好主从复制后,只需要在MySQL命令行执行如下命令即可。
mysql> CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((binghe_master, binghe_slave));
配置好之后,启动主从复制即可,如下所示
mysql> START SLAVE;