MyCat

作者: 马_黎 | 来源:发表于2018-10-19 17:18 被阅读0次

什么是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找那个,配置文件中的分片配置 哈希取模:哈希取模是将数据的值,计算出来,然后再进行取模!我们刚才的的根据用户的id,因为这个是整数所以我们可以直接用来进行取模,但是如果是让你用用户名的话,我们可以采用先将用户的名进行哈希,然后再进行取模运算 哈希取模可以用作多中数据类型,如日期,字符串等。 枚举分片:枚举其实,就是我们事先定义好键和值,然后分配到不同的数据库里去。举一个最简单的例子,我现在有一大批的用户,然后我要把济南的用户全部放在济南的数据库去,北京的放在北京的数据库里面,我就可以采用这种方法。 # MyCat文件配置 ## MyCat的基本配置### schema.xml 文件配置文件用途:配置逻辑库和逻辑表,匹配逻辑表所存储的节点,配置对应的数据节点以及物理数据配置信息。#### schema 标签定义逻辑库 <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000"> </schema>name: 定义逻辑库的名字sqlMaxLimit: 现实返回结果集的排行,-1表示关闭结果集checkSQLschema: 判断检查发送的sql中是否带库名。#### table 标签定义逻辑表 <table name="customer_login" primarkey="customer_id" dataNode="logindb01,logindb02" rule="customer_login"> </table>dataNode: 定义数据库所存储的数据节点rule: 定义了逻辑分片的规则,对应rule.xmd中的<tableRule>#### dateNode定义逻辑表存储的物理数据库 <dataNode name="imooc" dataHost="mysql01113" database="imooc_db"> </dataNode>name : 定义数据节点的名称,必须是唯一的dataHost: 定义分片所在的物理机database: 定义物理数据库名称#### dataHost 标签定义后端数据库主机信息 <dataHost name="mysql0103" maxComm="1000" minCon="10" balance="3" writeType="0" daTable="mysql" dbDriver=“native” switchType="1" > <dataHost>balance : 定义是否负载均衡- 0:不开启读写分离- 1:全部的readHost与stand by writeHost 参与 select 语句的负载均衡- 2:所有的readHost和writeHost都参与select 语句的负载均衡- 3: 所有的readHost都参与select语句的负载均衡#### heartbeat 检测心跳heartbeat 标签检测数据库是否正常使用,是dataHost的子标签 <hearbeat>select user()</hearbeat>#### 整体配置的实例 <writeHost host="192.168.1.3" url="192.168.1.3:3306" user="im_mycat" password="123456"> <readHost host="192.168.1.4" url="192.168.1.4:3306" user="im_mycat" password="123456"> </readHost> <writeHost>- 定义一组数据库,<readHost> 依赖于 <writeHost>- 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 root@10.211.55.8:/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

      本文链接:https://www.haomeiwen.com/subject/gakuzftx.html