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

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

参数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的有效

3、  只对dml有效

时间: 2024-11-08 21:44:11

MySQL表名映射方案及扩展应用_MySQL的相关文章

mysql表名等大小写敏感问题、字段类型timestamp、批量修改表名、oracle查询历史操作记录等

mysql表名等大小写敏感问题:http://blog.csdn.net/postnull/article/details/72455768: 1 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 2 1.数据库名与表名是严格区分大小写的: 3 2.表的别名是严格区分大小写的: 4 3.列名与列的别名在所有的情况下均是忽略大小写的: 5 4.字段内容默认情况下是大小写不敏感的. ================================================

Linux下 设置Mysql表名不区分大小写

情景:公司近期在将数据库从Oracle转为Mysql,由于之前在Oracle中表名是不区分大小写,因此到Mysql中就出现了找不到表的问题,经上网查询,发现在linux下Mysql的表名是区分大小写的,但是有参数可以使其不区分大小写.具体操作如下: 一.linux中mysql大小写详情: 1.数据库名严格区分大小写 2.表名严格区分大小写的 3.表的别名严格区分大小写 4.变量名严格区分大小写 5.列名在所有的情况下均忽略大小写 6.列的别名在所有的情况下均忽略大小写 二.设置Mysql表名不区

hibernate动态表名映射

引自:http://blog.csdn.net/xvshu/article/details/39187779 最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的是横切数据库,这这个需求的实现中,我的组员遇到了一个技术问题,我将我的解决办法和整个思考过程与大家分享, 思路: 用一个配置文件,一个类去映射多个表,(每个表的结构相同).按照平时的做法,有多少个表就要 写多少个配置文件,岂不是很麻烦.怎样才能只写一个配置文件就能达到上述目的呢? 经过研究,发现hi

hibernate动态表名映射--只有想不到,没有做不到

最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的是横切数据库,这这个需求的实现中,我的组员遇到了一个技术问题,我将我的解决办法和整个思考过程与大家分享, 思路: 用一个配置文件,一个类去映射多个表,(每个表的结构相同).按照平时的做法,有多少个表就要 写多少个配置文件,岂不是很麻烦.怎样才能只写一个配置文件就能达到上述目的呢? 经过研究,发现Hibernate中的NamingStrategy可以达到这个目的.它是用来定义表名和列名映射规 则的一个接口.我

linux下mysql表名大小写问题

近日,新mysql实例导入sql数据时,发现比老的mysql多了100+张表,最终发现是mysql表名大小写所致:很简单的问题却耽误很长时间,在此记录一下,以防再犯同样的错误: 1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:l

设置Linux下Mysql表名不区分大小写

1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:lower_case_table_names=0其中0:区分大小写,1:不区分大小写 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1.数据库名与表名是严格

MySQL表名和数据库关键字相同解决办法

今天改他们的代码的时候,遇到了MySQL表名和数据库关键字的问题. 由于表名是关键字,导致增删改查都报错. Hibernate: select leave0_.id as id22_, leave0_.stuNumber as stuNumber22_, leave0_.stuName as stuName22_, leave0_.academy as academy22_, leave0_.classes as classes22_, leave0_.leaveDays as leaveDay

php大力力 [021节]mysql表名在mac下不能大写

2015-08-27 php大力力021.mysql表名在mac下不能大写 刚才数据库里面,phpMyAdmin狂出错. Some errors have been detected on the server! Please look at the bottom of this window. Notice in ./libraries/structure.lib.php#1868 Undefined index: Rows Backtrace ./libraries/structure.li

mysql表名区分大小写问题

mysql表名区分大小写问题 查看mysql数据库大小写敏感参数 1.1. show variables like 'lower%';'' 参数说明 lower_case_table_names: 此参数不可以动态修改,必须重启数据库 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写 lower_case_table_names = 0 表名存储为给定的大小和比较是区分大小写的 1.2 . 特别注意 需要注意的是,当 lower_case