MySQL表名映射方案及擴展應用

這篇文章介紹的簡單方案應用于如下需求:主庫為了性能考慮,作分庫分表,從庫則上為了多索引查詢等需求,不作分表。 參數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不能支持)

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享