這篇文章介紹的簡單方案應用於以下需求:主庫爲了性能考慮,做分庫分表,從庫則上爲了多索引查詢等需求,不做分表。ide
參數replicate-rewrite-db 及應用性能
這個參數是官方版本自帶的。配置格式爲 replicate-rewrite-db = from_db -> to_db。 同步效果爲將全部在from_db上的操做都修改成對to_db的操做。spa
例子:.net
所以能夠在主庫上作分庫,如須要將表abc分紅10個,則主庫上建10個db, 名字爲sdb_1, sdb_2, … , sbd_10, 從庫上則只有一個庫sdb.orm
在從庫my.cnf中配置10行,第一行爲replicate-rewrite-db = sdb_1 -> sdb,以此類推。server
存在的問題索引
這個參數可以解決一部分問題,可是對於單庫內的分表則沒法解決。並且若分庫多了,好比須要創建1024個庫,一來維護麻煩,二來my.cnf裏面配置好長.get
還有一個很要命的問題是,對於有些應用是按照時間分表,好比按月份新增表,若用此方法新增庫,修改my.cnf則還須要重啓slave。同步
另外,並非全部的表都須要分表,庫級別的映射方案也有諸多不便。it
參數replicate-wild-rewrite-table
這個新增的參數目的就是要解決上面說到的問題。配置格式以下:
replicate-wild-rewrite-table=sdb.abc_% -> sdb.abc.
從庫上同步效果爲,將sbd庫內全部符合abc_%格式的表的DML操做,都執行到 sdb.abc表中。
幾點說明
一、 這個patch(代碼)基於Percona Server 5.5.18 (淘寶MySQL分支目前基於這個版本)
二、 只對row based replication的有效
三、 只對dml有效