Home  >  Article  >  Database  >  MySQL表名映射方案及扩展应用

MySQL表名映射方案及扩展应用

WBOY
WBOYOriginal
2016-06-07 17:59:02971browse

这篇文章介绍的简单方案应用于如下需求:主库为了性能考虑,作分库分表,从库则上为了多索引查询等需求,不作分表。 参数replicate-rewrite-db 及应用 这个参数是官方版本自带的。配置格式为 replicate-rewrite-db = from_db - to_db。 同步效果为将所有在fro

这篇文章介绍的简单方案应用于如下需求:主库为了性能考虑,作分库分表,从库则上为了多索引查询等需求,不作分表。

参数replicate-rewrite-db 及应用

这个参数是官方版本自带的。配置格式为 replicate-rewrite-db = from_db -> to_db。 同步效果为将所有在from_db上的操作都修改为对to_db的操作。

-

例子:

因此可以在主库上做分库,如需要将表abc分成10个,则主库上建10个db, 名字为sdb_1, sdb_2, … , sbd_10, 从库上则只有一个库sdb.

在从库my.cnf中配置10行,第一行为replicate-rewrite-db = sdb_1 -> sdb,以此类推。

存在的问题

这个参数能够解决一部分问题,但是对于单库内的分表则无法解决。而且若分库多了,比如需要建立1024个库,一来维护麻烦,二来my.cnf里面配置好长.

还有一个很要命的问题是,对于有些应用是按照时间分表,比如按月份新增表,若用此方法新增库,修改my.cnf则还需要重启slave。

另外,并不是所有的表都需要分表,库级别的映射方案也有诸多不便。

参数replicate-wild-rewrite-table

这个新增的参数目的就是要解决上面说到的问题。配置格式如下:

replicate-wild-rewrite-table=sdb.abc_% -> sdb.abc.

从库上同步效果为,将sbd库内所有符合abc_%格式的表的DML操作,都执行到 sdb.abc表中。



几点说明

1、  patch (代码) 基于Percona Server 5.5.18 (淘宝MySQL分支目前基于这个版本)

2、  只对row based replication的有效(多表更新的SQL改写问题)

3、  只对dml有效(细想一下就知道,ddl不能支持)
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn