1.安装mysql,先检查集群中是否存在
mysql --version 或使用rpm -qa | grep mysql查看
如不存在,则参考mysql安装
启动mysql服务(systemctl start mysqld)时如果需要密码且始终提示不对如下图所示:

则可以使用 sudo systemctl restart mysqld.service启动mysql服务。
然后查看mysql服务是否真的启动了(systemctl status mysqld

这样就启动了。
补充:修改mysql密码
如果是刚安装的,使用mysqladmin -u root password “这是密码”;创建密码
如果不是则连接到mysql后,set password for 用户名 @主机名(localhost)=password(…);
或使用mysqladmin -u root -p"旧密码“ password “这是新密码”;
或直接更新update的user表 (mysql库下的user表),

update mysql.user set authentication_string=password('新密码') where user='用户名' and Host ='localhost';

设置完之后需要将其刷新flush privileges
补充mysql:如果修改了mysql配置文件/etc/my.cnf,一定要重启mysql服务
2.使用mycat操作mysql时出现mysql的权限不足 ERROR 1105 (HY000): backend connect: java.lang.IllegalArgumentException: Invalid DataSource:0
在mysql中的mysql库(use mysql)下使用grant all privileges on *.* to root@"%" identified by "password";再将其刷新到表中flush privileges;从而得到所有权限
查看权限:select Host from user where user='root'看是否存在%
补充:mycat密码是在server.xml中设置的

 <user name="root" defaultAccount="true"><property name="password">这里设置密码</property><property name="schemas">TESTDB</property><!-- 表级 DML 权限设置 --><!--            <privileges check="false"><schema name="TESTDB" dml="0110" ><table name="tb01" dml="0000"></table><table name="tb02" dml="1111"></table></schema></privileges>           --></user>

3.mycat服务启动不了,或者启动后关闭
补充:无论有几个节点的mysql,实际需要的mycat只是一个。除非需要部署mycat的HA模式。
这个需要查看mycat的log文件wrapper.log,看他内部是什么错误,一般是schema.xml配置错误,比如表不存在,拼写错误等问题。修改配置文件后重启mycat即可。
4.mycat主从节点复制(一般用于集群统一mysql表数据):
需要设置/etc/my.cnf ,主节点设置

server-id=1
symbolic-links=0
log-bin=mysql-bin
binlog-do-db=StudyTest//如果要同步复制多个数据库可以再加入
binlog_format=STATEMENT

副节点设置:

server-id=2
relay-log=mysql-relay

重启mysql服务,主节点进入mysql界面后使用show master status;查看master状态记下其中的file编号和position端口号。副节点进入SQL界面

CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='主节点mysql密码',
MASTER_LOG_FILE='主节点file编号',MASTER_LOG_POS=主节点position端口号;

2.启动副节点服务器 start slave;
3.查看副节点状态 show slave status\G;如果显示slave_io和sql_running为yes则成功了

停止slave节点:stop slave
5.mycat分表
schema.xml中对应的table表设置分片规则rule:

rule在rule.xml表中设置。(mycat配置文件的注解查看mycat)
设置连接表中的rule,是我们进行数据分区等操作的属性,其设置的值相当于一个函数,需要在mycat/conf/rule.xml文件中实现eg:

这里是指使用表中的Dno属性进行分片,分片函数为mod-long即取余操作实现分片
取余的值在mod-long函数中设置

 <function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">3</property><!--分片mod值取3--></function>

遇到的问题
1).插入的数据仍然是只有单个表有数据
1.考虑分片属性的值是否不同
2.如果表非空并修改了表的分片属性,再插入数据也是不行的,必须要表数据清除之后,修改表分片属性,再插入数据
2).表查询或者插入数据时出现ERROR 1003 (HY000): Unsupported statement
端口号使用错误,应该使用8066端口
3)."Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0
权限不够,可以将 /etc/my.cnf 中的bind-address参数修改成0.0.0.0,表示允许任何ip主机访问此数据库
添加防火墙,只允许我们的网络访问

 iptables -A INPUT -p tcp -s 192.168.0.104(可以使用的网络) --dport 3306 -j ACCEPTiptables -A INPUT -p tcp --dport 3306 -j DROPservice iptables save

6.mycat join表
parentKey是我们连接父表时参考父表的键属性,joinKey是子表用于连接父表使用的键属性,primaryKey是当前表的主键。默认要求joinKey是parentKey的外键,即子表中插入数据的joinKey字段的数据范围取决于parentKey的数据范围。

单独的dataNode标签是设置的逻辑节点,用于连接mycat和mysql(相当于一个映射关系)而dataHost和writeHost,readHost是设置连接的物理存储节点,和实际的读写操作节点。每一个映射关系都需要设置了这个之后才能真正的使用。否则就只是映射而无实际作用。
一个dataHost代表一个机器,而一个机器可以有多个writeHost和readHost.我们要实现分片可以使用一个机器多个writeHost,也可以使用多个机器多个writeHost(一个机器一个writeHost)
遇到的问题:
1).can’t find (root) parent sharding node for sql(最坑人的地方!!!!!)
网上很多方法,有说是事务的问题(大致意思是子父表的数据不能在一个事务中插入,因为父表数据还没提交,子表找不到),也有说是mycat版本问题需要在schema.xml中插入fetchStoreNodeByJdbc(应该是错误的,查看了table表的各个属性是不存在该属性的,如果要硬添加,就会报当前属性没有申明的错误),至于事务保持中立,不能确定。因为底层原理还不确定。但是我根据这个解决先将父表的数据commit后再执行插入子表数据,仍然会报这个错误。有的说可以关闭mysql的事务,但是没尝试,所以也不能确定。网上的东西也不能全信,容易被带偏(T_T)。
最后前前后后找了4,5个小时,终于发现了,应该是mycat的大小写敏感造成的,其实我们在mycat查看表时就可以发现,当表名是大写时show tables;查看表名所有都是小写。解决方法:法1.重新建表(都使用小写。先delete from数据,drop table ,再crate table)法2.将mysql设置为大小写不敏感。即将所有的大写都转换为小写格式。在/etc/my.cnf中添加lower_case_table_names = 1并重启mysql服务。
另外注意在插入数据之前要保证表中数据为空,这样的插入才会使用新的规则。

(实际表名为Student)
1)一般来说只有当parentKey是非父表的分片属性时才会出现这种情况,因为其内部会执行一个查询语句如
要插入的数据连接属性为id , parentKey为l-id ,primaryKey为sno
insert into child (id,sname,sno)values(1,2,3) =>底层执行select parent.l-id from parent where parent.l-id=1,
之后将数据插入到parent表l-id属性=1的节点上的child表中。
2)但是如果你使用的parentKey是父表的分片属性时,因为其是直接通过分片规则(如mod-long取余)反向计算得到插入语句要连接表在哪个节点上,然后将数据插入到这个节点的child表上。因为没有使用查询语句,也就不会出现表大小写导致子表数据插入不上的问题。

mycat从0到成功进行分表操作相关推荐

  1. MyCat(三)分库分表

    1.简介 分库:将原本一个数据库中的数据,拆分到多个数据库进行保存,然后我们通过访问一个数据库,在MyCat中成为逻辑库. 分表:如果一个数据表的数据量已经超过千万,那么查询速度会比较慢,这时候可以考 ...

  2. MyCat 读写分离与分库分表

    一.Mycat 简介 Mycat 是一个开源的数据库中间件,可以解决分布式数据库环境下的大多数问题,如读写分离.分库分表等,除此之外,它还具备以下特性: 支持 MySQL.Oracle.DB2.SQL ...

  3. 关于MySQL分表操作的研究

    关于MySQL分表操作的研究 一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.首先,我们需要想好到底分多少个表,前提当然是满足应用.这里 ...

  4. Linux+MySQL+MyCat实现分库分表,通过MyCat数据库中间件实现分库分表配置实战

    目录 前言 Linux+MySQL+MyCat实现读写分离,主从同步的解决方案 一.Linux下MySQL数据库服务的安装与部署 二.下载Linux MyCat 三.上传Linux服务器,并解压 四. ...

  5. Mycat 源码修改-实现分表规则:按天分表和取摸分表查询

    Mycat 源码修改-实现分表规则:按天和取摸功能.之前修改过源码,发现其实没什么高深的只需要自己耐心点,多花点时间去调试就可以做到了.通过调试,找到自己想要改的地方,这是关键的:在代码中表现为修改相 ...

  6. 利用Mycat分库分表操作

    为什么分库分表 1 什么是分库分表? 其实就是字面意思,很好理解: 分库:从单个数据库拆分成多个数据库的过程,将数据散落在多个数据库中. 分表:从单张表拆分成多张表的过程,将数据散落在多张表内. 2 ...

  7. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...

  8. ShardingSphere5.1.0 +JPA的分表配置

    模拟场景,公司表(不分表), 员工表与人员表根据租户标志分为多个表 项目主要根据官方文档编写 官方文档 建议大家根据官方文档配置其他的分库,读写分离等 项目pom信息 <?xml version ...

  9. mysql分表技巧_MySQL分表操作的方法分析

    本节内容: mysql分表 一般来说,当数据库的数据超过了100w记录时就应该考虑分表或者分区了. 本文介绍下mysql分表的一些方法. 首先,需要想好到底分多少个表,前提当然是满足应用. 这里使用了 ...

最新文章

  1. GitHub:GitHub简介、使用方法、经验总结(图文教程)之详细攻略(持续更新!)
  2. 【uni-app】H5中使用videojs播放器播放视频
  3. Superior Scheduler:带你了解FusionInsight MRS的超级调度器
  4. SQL server 查询语句
  5. python sqlserver 数据操作_python上手--python操作数据库
  6. ISO12233分辨率测试卡的使用方法
  7. “两步路·户外助手”谷歌类图源
  8. 数论基础——扩展欧几里得【详细】
  9. php爬虫框架使用案例QueryList,将数据爬到mysql数据库
  10. Dllmain的作用
  11. 135端口入侵个人电脑
  12. 电脑网络异常故障解决办法
  13. [转]NLP关键词提取方法总结及实现
  14. 计算机图形学孔令德基础知识,计算机图形学基础教程孔令德答案
  15. PowerBI强大的数据汇总能力:将几十张Excel二维表批量转换成一维表进行可视化分析
  16. android 联系人导入iphone,4种快速将联系人导入iPhone的方法
  17. github 修改密码密码_雇主要求提供GitHub密码。 如何处理呢?
  18. git Cherry-pick Failed your local changes would be overwritten by cherry-pick. hint: commit your
  19. 服务器2003光盘修复,将Windows安装到光盘上 修复系统故障简单轻松
  20. 三菱PLC(FX2N系列)基本指令

热门文章

  1. [翻译]QUIC 与 HTTP/3:太过庞大而致失败?-- 论导致 QUIC 失败的因素
  2. 技巧:Go 结构体如何转换成 map[string]interface{}
  3. MSU公布2019视频压缩评比报告客观部分
  4. 优酷超高清视频技术实践
  5. Twitch未来五年的视频编码战略:从H.264到 AV1
  6. 音视频技术开发周刊 88期
  7. Go连接及操作MySQL
  8. spark项目实战:电商分析平台之项目概述
  9. 视频直播:实时数据可视化分析
  10. 这才是真正的 Git——分支合并