mycat实战

俗不知,学一个工具首先需要知道它可以解决什么问题……然后不假思索的灵活的运用到我们的项目中
mycat官网:http://www.mycat.io/

当我们的应用只需要一台数据库服务器的时候我们并不需要MyCAT,当涉及到分库分表、跨库关联查询、读写分离、跨机房容灾时MyCat必不可少。

在我管理的项目中,涉及到一个分库操作:

  • ems-uic 用户信息中心
  • ems-cic 企业信息中心
  • ems-oic 开放信息中心
    在真实场景中,cic中有些场景中需要使用uic用户昵称,这种情况已经怎么办?

实现“冗余字段”还是选择“冗余表”?
那如果数据发生修改了怎么办?

冗余表可以使用mysql单表同步来解决,可是冗余字段怎么解决?数据量大n条数据参与修改会不会影响性能?
今天我们不采用数据同步的功能解决问题,因为今天的主题是mycat!
其它方案:

  • mysql主从同步
  • canal数据同步
    将来接下来的日子告诉大家,敬请期待……
跨库关联查询

全局表
一个真实的业务系统中,往往存在大量的类似字典表的表,这些表基本上很少变动,字典表具有以下几个特性:

  • 变动不频繁
  • 数据量总体变化不大
  • 数据规模不大,很少有超过数十万条记录。
    对于这类的表,在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,所以Mycat中通过数据冗余来解决这类表的join,即所有的分片都有一份数据的拷贝,所有将字典表或者符合字典表特性的一些表定义为全局表。
    数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分规划的另外一条重要规则。

以上官方介绍,意思就是只需要把需要关联查询的表设置成为全局表就可以解决此类问题

//schema.xml

        
读写分离

        select user()

        

               
        

容灾机制
//hostM2恢复后需要保持数据一致性








        show slave status



        
        
















分库分表
//在我们真实的项目中,我们拥有16个分片
//dataNode:分片所在的库、rule:分片规则
//dataNode


//rule.xml

        
                company_id
                murmur
        



        0
        2
        160
        
        

小福利

在项目中涉及到16个分片,指定数据迁移使用的方法

  • 判断数据存在那个分片中:
EXPLAIN SELECT * FROM integral_quantify WHERE company_id="***";
  • MySQL导出指定条件的数据
//mysqldump参数说明:http://www.cnblogs.com/qq78292959/p/3637135.html
//-c 使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败
//-t 只导出数据,而不添加CREATE TABLE 语句。
//--skip-add-locks 取消LOCK语句
mysqldump -uax -p123456 -t -c --skip-add-locks integral_db integral_quantify_record -w "record_date>='2017-03-01'" > /root/20170301/integral_db_01_integral_quantify_record_201703_0309.sql
  • 登录MyCAT
mysql -uroot -h127.0.0.1 -p8066 -Dintegral_db
  • 导入数据
source /root/integral_db_01_integral_prize.sql

很高兴认识你,我们都一样,有过迷茫却从未放弃;害怕孤独可从不寂寞。

你可能感兴趣的:(mycat实战)