如何在Docker部署MyCat数据库中间件
1、前言
MyCat是目前最流行的基于Java语言编写的数据库中间件,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。
MyCAT是一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代Mysql的加强版数据库。
一个可以视为Mysql集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQLServer
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品。
2、安装dockerpullmanondidimycatmkdirphomemycatconfmkdirphomemycatlogsdockerrunp8066:8066dnamemycatmanondidimycat拷贝配置dockercpmycat:usrlocalmycatconfrule。xmlhomemycatconfdockercpmycat:usrlocalmycatconfserver。xmlhomemycatconfdockercpmycat:usrlocalmycatconfschema。xmlhomemycatconfdockerstopmycatdockerrmmycat重新执行dockerrunp8066:8066dnamemycatvhomemycatconfrule。xml:usrlocalmycatconfrule。xmlvhomemycatconfschema。xml:usrlocalmycatconfschema。xmlvhomemycatconfserver。xml:usrlocalmycatconfserver。xmlvhomemycatlogs:usrlocalmycatlogsprivilegedtruemanondidimycatconfserver。xml;用户及系统变量confschema。xml;节点主机、分片节点、逻辑库、逻辑表confrule。xml;分片规则、规则函数
3、配置server。xml修改lt;?xmlversion1。0encodingUTF8?!LicensedundertheApacheLicense,Version2。0(theLicense);youmaynotusethisfileexceptincompliancewiththeLicense。YoumayobtainacopyoftheLicenseathttp:www。apache。orglicensesLICENSE2。0Unlessrequiredbyapplicablelaworagreedtoinwriting,softwaredistributedundertheLicenseisdistributedonanASISBASIS,WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied。SeetheLicenseforthespecificlanguagegoverningpermissionsandlimitationsundertheLicense。!DOCTYPEmycat:serverSYSTEMserver。dtdmycat:serverxmlns:mycathttp:io。mycatsystempropertynamenonePasswordLogin0property!0为需要密码登陆、1为不需要密码登陆,默认为0,设置为1则需要指定默认账户propertynameignoreUnknownCommand0property!0遇上没有实现的报文(Unknowncommand:),就会报错、1为忽略该报文,返回ok报文。在某些mysql客户端存在客户端已经登录的时候还会继续发送登录报文,mycat会报错,该设置可以绕过这个错误propertynameuseHandshakeV101propertypropertynameremoveGraveAccent1propertypropertynameuseSqlStat0property!1为开启实时统计、0为关闭propertynameuseGlobleTableCheck0property!1为开启全加班一致性检测、0为关闭propertynamesqlExecuteTimeout300property!SQL执行超时单位:秒propertynamesequenceHandlerType1property!propertynamesequnceHandlerPattern(?:(snextsvaluesforsMYCATSEQ(w))(,)s))propertyINSERTINTOtravelrecord(id,userid)VALUES(nextvalueforMYCATSEQGLOBAL,xxx);!必须带有MYCATSEQ或者mycatseq进入序列匹配流程注意MYCATSEQ有空格的情况propertynamesequnceHandlerPattern(?:(snextsvaluesforsMYCATSEQ(w))(,)s))propertypropertynamesubqueryRelationshipCheckfalseproperty!子查询中存在关联查询的情况下,检查关联字段中是否有分片字段。默认falsepropertynamesequenceHanlderClassio。mycat。route。sequence。handler。HttpIncrSequenceHandlerproperty!propertynameuseCompression1property!1为开启mysql压缩协议!propertynamefakeMySQLVersion5。6。20property!设置模拟的MySQL版本号!propertynameprocessorBufferChunk40960property!propertynameprocessors1propertypropertynameprocessorExecutor32property!默认为type0:DirectByteBufferPooltype1ByteBufferArenatype2NettyBufferPoolpropertynameprocessorBufferPoolType0property!默认是6553564K用于sql解析时最大文本长度!propertynamemaxStringLiteralLength65535property!propertynamesequenceHandlerType0property!propertynamebackSocketNoDelay1property!propertynamefrontSocketNoDelay1property!propertynameprocessorExecutor16property!propertynameserverPort8066propertypropertynamemanagerPort9066propertypropertynameidleTimeout300000propertypropertynamebindIp0。0。0。0propertypropertynamedataNodeIdleCheckPeriod300000property5601000L;连接空闲检查propertynamefrontWriteQueueSize4096propertypropertynameprocessors32property!分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志apropertynamehandleDistributedTransactions0property!offheapformergeordergrouplimit1开启0关闭propertynameuseOffHeapForMerge0property!单位为mpropertynamememoryPageSize64kproperty!单位为kpropertynamespillsFileBufferSize1kpropertypropertynameuseStreamOutput0property!单位为mpropertynamesystemReserveMemorySize384mproperty!是否采用zookeeper协调切换propertynameuseZKSwitchfalseproperty!XARecoveryLogahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a路径!propertynameXARecoveryLogBaseDir。property!XARecoveryLogahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a名称!propertynameXARecoveryLogBaseNametmlogproperty!如果为true的话严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接propertynamestrictTxIsolationfalseproperty!如果为0的话,涉及多个DataNode的catlet任务不会跨线程执行propertynameparallExecute0propertysystem!全局SQL防火墙设置!白名单可以使用通配符或着!例如hosthost127。0。0。userroot!例如hosthost127。0。userroot!例如hosthost127。userroot!例如hosthost17。userroot!这些配置情况下对于127。0。0。1都能以root账户登录!firewallwhitehosthosthost17。0。0。userrootwhitehostblacklistcheckfalseblacklistfirewallusernamerootdefaultAccounttruepropertynamepassword123456propertypropertynameschemasTESTDBpropertypropertynamedefaultSchemaTESTDBproperty!NoMyCATDatabaseselected错误前会尝试使用该schema作为schema,不设置则为null,报错!表级DML权限设置!privilegescheckfalseschemanameTESTDBdml0110tablenametb01dml0000tabletablenametb02dml1111tableschemaprivilegesuserusernameuserpropertynamepassword123456propertypropertynameschemasTESTDBpropertypropertynamereadOnlytruepropertypropertynamedefaultSchemaTESTDBpropertyusermycat:serverschema。xmllt;?xmlversion1。0?!DOCTYPEmycat:schemaSYSTEMschema。dtdmycat:schemaxmlns:mycathttp:io。mycatschemanameTESTDBcheckSQLschematruesqlMaxLimit100randomDataNodedn1!autoshardingbyid(long)!splitTableNames启用tablename属性使用逗号分割配置多个表,即多个表使用这个配置!fetchStoreNodeByJdbc启用ER表使用JDBC方式获取DataNodetablenamesyssettingprimaryKeyiddataNodedn1,dn2autoIncrementtruetable!tablenameoccallprimaryKeyIDdataNodedn10743rulelatestmonthcalldateschema!dataNodenamedn10743dataHostlocalhost1databasedb0743dataNodenamedn1dataHostlocalhost1databaselogisticsdataNodenamedn2dataHostlocalhost1databaselogistics2!dataNodenamedn3dataHostlocalhost1databasedb3!dataNodenamedn4dataHostsequoiadb1databaseSAMPLEdataNodenamejdbcdn1dataHostjdbchostdatabasedb1dataNodenamejdbcdn2dataHostjdbchostdatabasedb2dataNodenamejdbcdn3dataHostjdbchostdatabasedb3dataHostnamelocalhost1maxCon1000minCon10balance0writeType0dbTypemysqldbDrivernativeswitchType1slaveThreshold100heartbeatselectuser()heartbeat!canhavemultiwritehostswriteHosthosthostM1url192。168。2。6:3306userrootpassword123456writeHostwriteHosthosthostM2url192。168。2。7:3306userrootpassword123456writeHostdataHostmycat:schema
在TESTDBsyssetting添加修改删除数据
在logisticssyssetting和logistics2syssetting也会进行同步数据
具体配置说明参考
https:blog。csdn。netyun6713articledetails103375066