MyCat实现数据库与数据库之间的读写分离

一、Mycat的安装准备:

  1、jdk:要求jdk必须是1.7及以上版本

  2、Mysql:推荐mysql是5.5以上版本

  3、Mycat:

  Mycat的官方网站:

  http://www.mycat.org.cn/

  下载地址:

  https://github.com/MyCATApache/Mycat-download

  Mycat的安装

  Mycat有windows、linux多种版本。本教程为linux安装步骤,windows基本相同。

  第一步:下载Mycat-server-xxxx-linux.tar.gz

  第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。

  第三步:进入mycat目录,启动mycat

      ./mycat start

      停止:

      ./mycat stop

      mycat 支持的命令{ console | start | stop | restart | status | dump }

      Mycat的默认端口号为:8066

二、Mycat的分片

  两台mysql数据库服务器

  Host1:192.168.37.101

  Host2:192.168.37.102

  host1环境:

  操作系统版本:centos6.4

  数据库版本:mysql-5.6

  mycat版本::1.4release(发行版)

  数据库名:db1、db3

  mysql节点2环境:  

  操作系统版本 : centos6.4

  数据库版本 : mysql-5.6

  mycat版本 :1.4 release

  数据库名 : db2

  配置重要文件Schema.xml

   <schema name="mycatName" checkSQLschema="false" sqlMaxLimit="100">

<!-- auto sharding by id (long) -->  id自动分片的规则

<table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

</schema>

   给mycat创建个虚拟的数据库名mycatName,给mycatName创建指定表名,和db1、db2、db3表名相同才能进行分片  

MyCat安装到节点1上(需要安装jdk)

  <dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataNode name="dn2" dataHost="localhost2" database="db2" />

<dataNode name="dn3" dataHost="localhost1" database="db3" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!-- can have multi write hosts -->

<writeHost host="hostM1" url="192.168.37.101:3306" user="root"

password="root">

<!-- can have multi read hosts -->

</writeHost>

</dataHost>

<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"

writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!-- can have multi write hosts -->

<writeHost host="hostM1" url="192.168.37.102:3306" user="root"

password="root">

<!-- can have multi read hosts -->

</writeHost>

</dataHost>

</mycat:schema>

schema.xml中删除<!--type="global"-->,不删除的话分节的话三张表都会有相3同数据

   配置重要文件Server.xml


<user name="gaoxiansheng">

<property name="password">123456</property>

<property name="schemas">mycatName</property>

<property name="readOnly">false</property>

</user>

   配置重要文件rule.xml

三、mycat读写分离:

    主从配置需要注意的地方

    1、主DB server和从DB server数据库的版本一致

    2、主DB server和从DB server数据库数据名称一致

    3、主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一

  1.拷贝my.cnf cp /usr/share/mysql/my-default.cnf /etc/
   改名 mv my-default.cnf my.cnf
   编辑 vim my.cnf 加入 lower_case_table_names=1 不区分大小写
   重启mysql service mysql restart
  2.主从复制:读写,删除增加一致性
   主服务器配置:(在192.168.37.101上配置)
  第一步:更改/etc/my.cnf 文件
     


binlog-do-db=db1

binlog-ignore-db=mysql

#启用二进制日志

log-bin=mysql-bin

#服务器唯一ID,一般取IP最后一段

server-id=134

 
  第二步:重启mysql服务
      service mysql restart
  第三步:建立一个用户
      mysql>GRANT FILE ON *.* TO ‘backup‘@‘%‘ IDENTIFIED BY ‘123456‘;
      mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to ‘backup‘@‘%‘ identified by ‘123456‘;
  刷新权限
      mysql> FLUSH PRIVILEGES;
  查看mysql现在有哪些用户
      mysql>select user,host from mysql.user;

  第四步:查询master的状态
      mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 | 517| db1 | mysql | |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set
  从服务器配置:(在192.168.37.102上配置)
  第一步:
    在从服务器Hadoop02上复制文件
    cp /usr/share/mysql/my-default.cnf /etc/
    改名
    mv my-default.cnf my.cnf
    更改配置vim /etc/my.cnf
    server-id=106
  第二步:重启mysql服务
    service mysql restart
  第三步:配置从服务器
    change master to master_host=‘192.168.37.101‘,master_port=3306,master_user=‘backup‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=517
    注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的120就是show master status 中看到的position的值,这里的 mysql-bin.000001就是file对应的值)。

  第四步:启动从服务器复制功能
    Mysql>start slave;

  第五步:检查从服务器复制功能状态:
    mysql> show slave status

    ……………………(省略部分)
    Slave_IO_Running: Yes //此状态必须YES
    Slave_SQL_Running: Yes //此状态必须YES
    ……………………(省略部分)

    注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

    错误处理:
    如果出现此错误:
    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
    因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。
  配置mycat实现读写分离:


<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataNode name="dn2" dataHost="localhost1" database="db2" />

<dataNode name="dn3" dataHost="localhost1" database="db3" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">

<heartbeat>show slave status</heartbeat>

<writeHost host="hostM" url="192.168.25.101:3306" user="root"password="root">

<readHost host="hostS" url="192.168.25.102:3306" user="root"password="root" />

</writeHost>

</dataHost>

原文地址:https://www.cnblogs.com/gentle-awen/p/9625506.html

时间: 2024-08-30 14:15:11

MyCat实现数据库与数据库之间的读写分离的相关文章

《Mycat学习笔记》 第二篇. MySql 读写分离与日志分析——主从多结点

1    环境说明 接上篇环境   <Mycat学习笔记> 第一篇. MySql 读写分离与日志分析——主从单结点 http://www.cnblogs.com/kaye0110/p/5134588.html 增加一套 mysql 实例,端口为3308 ,通过Binlog方式同步主机情况 localhost : 3306 主机,    在mycat 中配置为 writehost 1 localhost : 3307 从机 a ,在mycat 中配置为 readhost localhost :

JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法

1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机.它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升. 但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的.这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库.如果使用关系型数据库

数据库(七),读写分离到CQRS

读写分离 当一个公司业务不断扩展,用户量大量增加,原来使用的数据库很可能就撑不住了.那么可以 Scale-in,扩充硬件的性能,但是很可能用户量继续增长,增加的性能很快就吃光了. 读写分离:数据库撑不住了,无非就是读写量过大,特别是有一些复杂的查询比如最近24小时最热门的产品等.需要很复杂的SQL语句,运行起来当然是慢. 但是为了读写分离,需要把数据库拆分为master库和Slave库, 市面上主要的关系数据库都支持数据复制功能,所以可以把一个数据库拆分为Master和Slave两种角色,写操作

数据库分区分表以及读写分离

Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己学艺不精,最近作GPS方面的项目,处理的数据量达到了几十GB,为了满足系统的实时性要求,必须提高数据的查询效率,这样就必须通过分区,以解燃眉之急! 先说说分区的好处吧! 1) 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; 2) 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可; 3) 均

数据库 之 Mysql主从复制的读写分离

1  概述 一般而言,主节点只有一个,从节点有多个,从节点只支持读操作,主节点支持写操作. 实现读写分离有两种解决,一是在程序端实现,二是加中间层实现,一般要对客户端透明,所以建议最好加中间层来实现. 中间层有如下几个软件: mysql-proxy : 后续的atlas是基于mysql-proxy的改进版本,atlas开源项目依然处于维护中. amoeba for MySQL:读写分离.分片: cobar:分片框架,基于amoeba版本的升级,基于java开发,因此要安装jdk mycat: 后

利用mycat实现基于mysql5.5主从复制的读写分离

整体步骤: 1.准备好两台服务器,一台作为主数据库服务器,一台作为从服务器,并安装好mysql数据库,此处略 2.配置好主从同步 3.下载JDK配置mycat依赖的JAVA环境,mycat采用java语言开发运行依赖jre 4.配置mycat的相关文件 5.测试 一.配置mysql主从环境 MYSQL主从同步的作用 (1) 数据分布 (2) 负载平衡(load balancing) (3) 备份 (4) 高可用性(high availability)和容错 MYSQL主从同步的原理 关于MYSQ

高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

点击链接加入群[Dubbo技术交流2群]:https://jq.qq.com/?_wv=1027&k=46DcDFI 一.环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso JDK版本:jdk1.7.0_45 MyCat版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz MyCat节点IP:192.168.1.203      主机名:edu-mycat-01  主机配置:4核CPU.4G内存 MySQL版本:

MySQL数据库的同步配置+MySql读写分离

使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3.将主服务器上的数据复制到从服务器上,保护数据免受意外的损失. 环境描述: 新企业要搭建架构为主从复制的mysql数据库. 主服务器(mysql-master):IP地址:192.168.48.128,mysql已安装,没有用户数据. 从服务器(mysql-slave):IP地址:192.168.48

Mycat实现数据库读写分离

什么是读写分离 在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能.当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作. 读写分离的好处 1)分摊服务器压力,提高机器的系统处理效率 读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解