linux中MyCat(分库分表)入门安装

什么是MyCat

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

图片alt

下载MyCat

  1. > wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz

安装MyCat

  1. > tar -xzvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
  2. > cp -rf mycat /usr/local

配置MyCat

  1. > vim /etc/profile
  2. MYCAT_HOME=/usr/local/mycat
  3. export PATH=.:${PATH}:${MYCAT_HOME}/bin
  4. > source /etc/profile

配置MyCat

配置MyCat账号

  1. > vim conf/server.xml
  2. <user name="test">
  3. <property name="password">test</property>
  4. <property name="schemas">TESTDB</property>
  5. <property name="readOnly">true</property>
  6. <property name="benchmark">11111</property>
  7. <property name="usingDecrypt">1</property>
  8. <privileges check="false">
  9. <schema name="TESTDB" dml="0010">
  10. <table name="tbl_user" dml="0110"></table>
  11. <table name="tbl_dynamic" dml="1111"></table>
  12. </schema>
  13. </privileges>
  14. </user>

TESTDB是逻辑库

<user>标签主要用于定义登录 mycat 的用户和权限,如上面,定义了一个用户,用户名为 test、密码也为 test,可访问的 schema 也只有 TESTDB 一个。

<property>标签则是具体声明的属性值:

  • user 用户配置节点
  • name 登录的用户名,也就是连接Mycat的用户名
  • password 登录的密码,也就是连接Mycat的密码
  • readOnly true/false,限制用户是否只是可读的
  • benchmark 连接服务降级处理基准值,当前端的整体 connection 数达到基准值是, 对来自该账户的请求开始拒绝连接,0 或不设表示不限制
  • usingDecrypt 是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密
  • schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
  • privileges 配置对用户的 schema 及下级的 table 进行精细化的 DML 权限控制,privileges 节点中的 check 属性是用于标识是否开启 DML 权限检查, 默认 false 标识不检查,当然 privileges 节点不配置,等同 check=false,由于 Mycat 一个用户的 schemas 属性可配置多个 schema ,所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制。insert,update,select,delete 表示0000。如果设置了 schema , 但只设置了个别 table 或 未设置 table 的 DML,会自动继承 schema 的 DML 属性

配置schema.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://io.mycat/">
  4. #name的值需要和server.xml中的值对应
  5. <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
  6. #需注释掉table标签,否则通过mycayt连接时创建的逻辑库中只会生成这travelrecord,address两张表,不会显示真实数据库中的表,注释掉后上面schema标签 需增加dataNode否则报错;
  7. <!--
  8. <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>-->
  9. </schema>
  10. #name的值和上面schema标签中dataNode相匹配 databaHost可默认,database为真实数据库名称
  11. <dataNode name="dn1" dataHost="localhost1" database="test" />
  12. #name的值与dataNode中dataHost相匹配
  13. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  14. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  15. <heartbeat>select user</heartbeat>
  16. <!-- can have multi write hosts -->
  17. #只写服务器的信息,注意这边的密码为主从数据库中对mycat所在服务器授权的密码,并不是服务器的登录密码,可配置多个writeHost
  18. <writeHost host="192.168.1.128" url="192.168.1.128:3306" user="root" password="123456">
  19. <!-- can have multi write hosts -->
  20. #读属于写,该标签配置只读服务器信息,如果写服务器宕机,读服务器也不能使用,也可配置多个读服务器标签
  21. <readHost host="192.168.1.129" url="192.168.1.129:3306" user="root" password="123456" />
  22. </writeHost>
  23. </dataHost>

启动MyCat

  1. > mycat start

常用命令

  1. > mycat start 启动
  2. > mycat stop 停止
  3. > mycat console 前台运行
  4. > mycat restart 重启服务
  5. > mycat pause 暂停
  6. > mycat status 查看启动状态

连接mycat

  1. > mysql -uroot -p -P 8066 -h 192.168.1.127

MyCat默认的端口是8066

常用操作

  1. > show databases; //查看所有库
  2. TESTDB
  3. > use TESTDB; //使用TESTDB库
  4. > show tables; //查看TESTDB库中所有的表
  5. one
  6. > desc one; // 查看one表的结构

查看 Mycat 日志

  1. > tail -f logs/wrapper.log

常见错误

  1. Startup failed: Timed out waiting for a signal from the JVM.
  2. JVM did not exit on request, terminated

解决方案

  1. > vim conf/wrapper.conf
  2. wrapper.startup.timeout=300 //超时时间300秒
  3. wrapper.ping.timeout=120

返回笔记列表
入门小站