Mycat-配置文件介绍(三)

949人浏览 / 0人评论
  • 常用的配置文件关系图

  • server.xml 文件作用有三点
  1. 配置系统相关参数
  2. 配置用户访问权限
  3. 配置SQL防火墙和SQL拦截功能
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<!--mycat 一般正常就这个配置就可以了 -->
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <!--charset 字符集与mysql需要一直 -->
	<!--sqlExecuteTimeout sql超时断开连接 默认单位秒 -->
        <property name="nonePasswordLogin">0</property> <!--0 需要密码,1 不需要-->
        <property name="useSqlStat">0</property>
        <property name="useGlobleTableCheck">0</property>
        <property name="processors">2</property><!--线程数-->
        <property name="sequnceHandlerType">1</property><!-- 0 本地文件1数据库方式2时间戳3zookeeper方式 -->
        <property name="txIsolation">2</property><!--隔离级别 1,读未提交 2 读已提交 ,3可重读,4序列化-->
        <property name="defaultMaxLimit">100</property><!--mycat 默认数据集大小 分布式一般数据量比较大 没配置默认返回这个数据数 -->
        <property name="maxPacketSize">104857600</property> <!--mysql包数据大小-->
        <property name="serverPort">8066</property><!--mycat 端口 -->
        <property name="managerPort">9066</property><!--mycat 管理端口 -->
        <property name="idleTimeout">1800000</property><!--前端多久没有访问,会断开连接,mycat连接池更好提供服务 毫秒-->
        <property name="bindIp">0.0.0.0</property><!--网卡ip-->
        <property name="frontWriteQueueSize">2048</property><!--前端写队列大小-->
        <property name="sqlExecuteTimeout">300</property>
        <property name="sqlInterceptor">io.mycat.server.interceptor.impl.StatisticsSqlInterceptor</property><!-- 需Java 拦截的类-->
        <property name="sqlInterceptorType">UPDATE,DELETE,INSERT</property> <!-- 记录操作类型-->
        <property name="sqlInterceptorFile">/tmp/sqllog.txt</property>
    </system>
    <!-- 指定地址用户才能访问mycat
    <firewall>
	<whitehost>
	  <host user="root" host="127.0.0.1"></host>
	   <blacklist check="true">
             <property name="noneBaseStatementAllow">true</property> 是否允许ddl功能
             <property name="deleteWhereNoneCheck">true</property> delete没条件不给删除
	   <blacklist>
	</whitehost>
    </firewall>
    -->
    <user name="app_mycat">
	<!--java -cp Mycat-server-1.6.5-release.jar io.mycat.util.DecryptUtil 0:root:123456 获取加密密码 -->
        <property name="password">aI1N4myKYg6oMXWvWuDQvpOMbEkhnHIWDRPj3z3u6vaFUXZm67kH9MP8G4bvhtSK7a9Z0InTTOGsfw==</property>
        <property name="usingDecrypt">1</property>
        <property name="schemas">imooc_db</property>
    </user>
<!--
      配置用户访问权限
	<user name="app_mycat" defaultAccount="true"> 表示默认账号
        <property name="schemas">imooc_db</property>
        <property name="password">aI1N4myKYg6oMmWvWpOMbEkhnHIWDRPj3z3u6vaFUXZm67kH9MP8G4bvhtSK7a9Z0InTTOGsfw==</property>
        <property name="usingDecrypt">1</property>
		<privileges check="true">       
        	  <schema name="imooc_db" dml="0110"> 数字对应insert,update,select,delete操作 0是没有权限
			<table  name="table1" dml="0000"></table>
			<table  name="table2" dml="1111"></table>
    		  </schema>
		</privileges>
	</user>
-->
</mycat:server>
  • rule.xml 文件作用有二点
  1. 配置水平分片的分片规则(基于列分片)
  2. 配置分片规则对应的分片函数
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
        <!-- name必须唯一 取名一般hash_mode_4_id 表示通过hash取模,并且是通过id分片,取4模-->
        <tableRule name="order_master">
           <rule>
                <columns>customer_id</columns> <!--一般选主键或者业务关联键 作为 切片键,决定数据存储位置和性能-->
                 <algorithm>mod-long</algorithm> <!-- 分片函数-->
           </rule>
        </tableRule>
        <!-- io.mycat.route.function.PartitionByHashMod hash取模可以算字符串-->
        <!-- io.mycat.route.function.PartitionByFileMap 异地多活,根据地域ID-->
        <!-- io.mycat.route.function.PartitionByPrefixPattern 部分字符串取模-->
        <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
           <property name="count">4</property>
        </function>
<!-- 
   <function name="hash-int-test"
                class="org.opencloudb.route.function.PartitionByFileMap">
                <property name="mapFile">partition-hash-int-test.txt</property> 枚举文件内容  a=0 换行b=1  换行DEFAULT_NODE=9
                <property name="type">1</property> 0表示数字类型,1表示字符串类型
                <property name="defaultNode">0</property> node>=0表示支持默认节点
      </function>
-->
</mycat:rule>
  • schema.xml 文件作用有三点
  1. 配置逻辑表和逻辑库
  2. 配置逻辑表存储的数据节点
  3. 配置数据节点所对应的物理数据库服务器信息
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!--检查SQL中是否含库名 mysql不支持直接夸物理数据库的访问 用户自己检查-->
    <schema name="imooc_db" checkSQLschema="false" sqlMaxLimit="100">
	<!--autoIncrement 自增序列-->
        <table name="order_master" dataNode="orderdb01,orderdb02,orderdb03,orderdb04" rule="order_master" primaryKey="order_id" autoIncrement="true">
            <!--select * from order_master 1 join order_detail b on a.order_id=b.order_id; 关联分片语句 -->
	     <childTable name="order_detail" joinKey="order_id" parentKey="order_id" primaryKey="order_detail_id" autoIncrement="true"/>
        </table>
	<!--name和物理库相同 如果分片键不是主键则会记录主键信息,分片查询时,再次发起查询时,速度会比较快
	     dataNode节点顺序就是分片规则的节点顺序,一旦定义不要轻易修改,不然数据会混乱-->
        <table name="order_cart" dataNode="ordb" primaryKey="cart_id"/>
        <table name="order_customer_addr" dataNode="ordb" primaryKey="customer_addr_id"/>
         <!-- global全局表,-->
	<table name="region_info" dataNode="ordb,prodb,cusdb" primaryKey="region_id" type="global"/>
        <table name="shipping_info" dataNode="ordb" primaryKey="ship_id"/>
        <table name="warehouse_info" dataNode="ordb" primaryKey="w_id"/>
        <table name="warehouse_product" dataNode="ordb" primaryKey="wp_id"/>
        <table name="product_brand_info" dataNode="prodb" primaryKey="brand_id"/>
        <table name="product_category" dataNode="prodb" primaryKey="category_id"/>
        <table name="product_comment" dataNode="prodb" primaryKey="comment_id"/>
        <table name="product_info" dataNode="prodb" primaryKey="product_id"/>
        <table name="product_supplier_info" dataNode="prodb" primaryKey="supplier_id"/>
        <table name="product_pic_info" dataNode="prodb" primaryKey="product_pic_id"/>
        <table name="customer_balance_log" dataNode="cusdb" primaryKey="balance_id"/>
        <table name="customer_inf" dataNode="cusdb" primaryKey="customer_inf_id"/>
        <table name="customer_level_inf" dataNode="cusdb" primaryKey="customer_level"/>
        <table name="customer_login" dataNode="cusdb" primaryKey="customer_id"/>
        <table name="customer_login_log" dataNode="cusdb" primaryKey="login_id"/>
        <table name="customer_point_log" dataNode="cusdb" primaryKey="point_id"/>
    </schema>
    <dataNode name="ordb" dataHost="mysqlS2" database="order_db"/>
    <dataNode name="prodb" dataHost="mysqlS1" database="product_db"/>
    <dataNode name="cusdb" dataHost="mysqlS3" database="customer_db"/>
    <dataNode name="orderdb03" dataHost="mysqlM1" database="orderdb03"/>
    <dataNode name="orderdb04" dataHost="mysqlM1" database="orderdb04"/>
    <dataNode name="orderdb01" dataHost="mysqlS3" database="orderdb01"/>
    <dataNode name="orderdb02" dataHost="mysqlS3" database="orderdb02"/>
    <dataNode name="mycat" dataHost="mysqlM1" database="mycat"/>
	<!-- mysql一主一从是可以保证写的高可用的 连接池连接数
	     balance 0 不开启读写分离 1 发送到当前的writeHost对应的readHost和备用的writeHost
               2.所有的读操作都随机发送到所有的writeHost,readHost上
 		3.所有的读操作都只发送到writeHost的readHost上
           wtireType 0 写主机挂了,才会发送到另一台写主机  1 写请求随机放到写请求 (pxc集群多写mysql集群的时候才能用,不然出问题)
	   dbtype 支持sql类型 dbDrive native mysql原生的驱动 jdbc 用来连接其他数据库
	   switchType 1 只要一台挂了,另一台自动切换 ,-1则不启动 后台数据库使用一主多从集群mha 3m 主从复制高可用工具,这里就可以设置-1
	 -->
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysqlM1" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="129.204.66.6:3306" password="qqqwww" user="im_mycat"/>
        	<readHost host="hostS1" url="47.107.218.8:3306" password="qqqwww" user="im_mycat"/>
         </writeHost>
         <writeHost host="hostS1" url="47.107.218.8:3306" password="qqqwww" user="im_mycat"/>
    </dataHost>
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysqlS1" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostS1" url="47.107.149.9:3306" password="qqqwww" user="im_mycat"/>
    </dataHost>
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysqlS2" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostS2" url="120.79.218.8:3306" password="qqqwww" user="im_mycat"/>
    </dataHost>
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysqlS3" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostS3" url="118.25.89.9:3306" password="qqqwww" user="im_mycat"/>
    </dataHost>
</mycat:schema>

 

支付宝扫码打赏 微信打赏

如果文章对您有帮助,欢迎移至上方按钮打赏,非常感谢你的支持!

全部评论