MyCat

什么是MyCat简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库。# MyCat的搭建## linux系统的搭建简介:MyCat是java开发的,所以安装前要在你的系统的先安装jdk1.7以上的版本才可以。安装步骤:先创建一个mycat用户,然后搭建jdk1.7以上版本的java环境!下载mycat并且安装,修改配置然后启动mycat。 wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && http://resources.sir6.cn/oneinstack/install.sh --apache_option 1 --tomcat_option 2 --jdk_option 2 --pureftpd --redis --memcached --iptables --reboot ### 相关知识查看java的版本java -version stylus[root@bogon ~]# java -versionjava version "1.8.0_192"Java(TM) SE Runtime Environment (build 1.8.0_192-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)[root@bogon ~]#分片:****什么是分片?如果我们的数据库比较多,我们可以采用以下几种方式!如,用户,我们可以将用户分在不同的数据库里!比如订单,我们的订单达到一定的程度的时候,可以按照时间来进行存放订单。#### 常用的分片算法简单的取模:我们可以这样举一个例子。看下图,我们可以根据用户id的余数,来觉得到底要把数据存储到什么位置。余数是1的,存放的数据库1,余数是2的,我们可以将这个用的用户信息存放数据库2.
MyCat_第1张图片
这样的做法优点是能将数据很平均的分配到每一个数据,但是不能有小数,只能分配整数。下面是在myCat找那个,配置文件中的分片配置
MyCat_第2张图片
哈希取模:哈希取模是将数据的值,计算出来,然后再进行取模!我们刚才的的根据用户的id,因为这个是整数所以我们可以直接用来进行取模,但是如果是让你用用户名的话,我们可以采用先将用户的名进行哈希,然后再进行取模运算
MyCat_第3张图片
哈希取模可以用作多中数据类型,如日期,字符串等。
MyCat_第4张图片
枚举分片:枚举其实,就是我们事先定义好键和值,然后分配到不同的数据库里去。举一个最简单的例子,我现在有一大批的用户,然后我要把济南的用户全部放在济南的数据库去,北京的放在北京的数据库里面,我就可以采用这种方法。
MyCat_第5张图片
# MyCat文件配置
MyCat_第6张图片
MyCat_第7张图片
## MyCat的基本配置### schema.xml 文件配置文件用途:配置逻辑库和逻辑表,匹配逻辑表所存储的节点,配置对应的数据节点以及物理数据配置信息。#### schema 标签定义逻辑库 name: 定义逻辑库的名字sqlMaxLimit: 现实返回结果集的排行,-1表示关闭结果集checkSQLschema: 判断检查发送的sql中是否带库名。#### table 标签定义逻辑表
dataNode: 定义数据库所存储的数据节点rule: 定义了逻辑分片的规则,对应rule.xmd中的#### dateNode定义逻辑表存储的物理数据库 name : 定义数据节点的名称,必须是唯一的dataHost: 定义分片所在的物理机database: 定义物理数据库名称#### dataHost 标签定义后端数据库主机信息 balance : 定义是否负载均衡- 0:不开启读写分离- 1:全部的readHost与stand by writeHost 参与 select 语句的负载均衡- 2:所有的readHost和writeHost都参与select 语句的负载均衡- 3: 所有的readHost都参与select语句的负载均衡#### heartbeat 检测心跳heartbeat 标签检测数据库是否正常使用,是dataHost的子标签 select user()#### 整体配置的实例 - 定义一组数据库, 依赖于 - user和password 为后端数据库中的用户# 实战操作## 准备数据库,并且导入数据库这一步的操作是为了模仿我们真实项目的数据库,下面的才是真正的开始操作 mysql -u root -p imooc_db < imooc_db.sql mysql -u roor -p 自己数据库名字 < 数据库的文件 ## 将我们项目的数据库导出,用下面的命令 mysqldump --master-data=2 --single-transaction --routines --triggers --events -uroot -p imooc_db >bak_imooc.sql--master-data =2 :来记录节点1当前二进制 --single-transaction :保证备份是在同一个事物种的--routines:触发器--events:事件## 将自己备份好的文件copy到其他的服务器上去 scp bak_imooc.sql [email protected]:/home/parallels/Desktop ## 在节点一上创建一个主从复制的账号> 创建一个账号,账号名是im_repl,在网段10.211.55下的所有网段都有效,创建一个密码是123456 create user 'im_repl'@'10.211.55.%' identified by '123456'; 对我们刚刚创建的这个账号进行授权, grant replication slave on . to 'im_repl'@'10.211.55.%'; ## 在副数据库上创建一个复制连路 change master to master_host='10.211.55.7', master_user='im_repl' ,master_password='123456' ,MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=5865082; master_host:主机的IP地址 master_user:主机用来复制的账号 master_password:主机复制的密码 MASTER_LOG_FILE:开始同步的日志文件名 MASTER_LOG_POS:开始复制的事物日志点 ## 查看配置完的状态 show slave status\G;## 解决主副数据库名字不一样的问题> 重新将主从复制的数据库上库名上重写成order_db change replication filter replicate_rewrite_db=((imooc_db,order_db));
改完后的状态
## 开始启动主从复制 start slave显示的是这样的,第一个是Connecting,说明是没有启动成功!有可能是3306端口没有开启,你可以关闭防火墙再试试
> 但是还是会保错 The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it). 这个原因是因为这些服务器Master_Server_Id是重复的。>怎么修改找到mysql的配置文件 /etc/my.cnf,打开将下面的文件修改成一个不和其他服务器重复的
修改完以后重新启动mysql服务器 service mysqld restart;> 再次启动进行查看。
# 垂直分库

你可能感兴趣的:(MyCat)