mycat

数据库访问量很大时,如何做优化?

北战南征 提交于 2020-02-26 21:03:13
如果有一个特别大的访问量到数据库上时,往往查询速度会变得很慢,所以我们需要进行优化。优化从三个方面考虑:SQL语句优化、主从复制,读写分离,负载均衡、数据库分库分表。 一、SQL查询语句优化 1、使用索引 建立索引可以使查询速度得到提升,我们首先应该考虑在where及order by,group by涉及的列上建立索引。 2、借助explain(查询优化神器)选择更好的索引和优化查询语句 SQL 的 Explain 通过图形化或基于文本的方式详细说明了 SQL 语句的每个部分是如何执行以及何时执行的,以及执行效果。通过 对选择更好的索引列,或者对耗时久的SQL语句进行优化达到对查询速度的优化。 3、任何地方都不要使用SELECT * FROM语句。 4、不要在索引列做运算或者使用函数 5、查询尽可能使用limit来减少返回的行数 6、使用查询缓存,并将尽量多的内存分配给MYSQL做缓存 二、主从复制,读写分离,负载均衡 目前大多数的主流关系型数据库都提供了主从复制的功能,通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站可以利用数据库这一功能,实现数据库的读写分离,从而改善数据库的负载压力。一个系统的读操作远远多于写操作,因此写操作发向master,读操作发向slaves进行操作(简单的轮询算法来决定使用哪个slave)。

详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群

邮差的信 提交于 2020-02-26 02:35:40
概述 目前业界对数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,mysql则比较推荐用mycat去搭建数据库集群,下面介绍一下怎么用mycat+haproxy+keepalived搭建一个属于mysql数据库的高可用负载均衡。 主要思路: 简单说,实现mysql主备复制-->利用mycat实现负载均衡。 比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定。 以下基于centos7操作系统进行演示。 架构图 以下是这次搭建的架构图。 主机1与主机2上的keepalived会为该服务器抢占vip,抢占到vip后,对该主机的访问可以通过原来的ip访问,也可以直接通过vip访问,当其中一台宕机时,vip会漂移到另一台机器上,当我们访问VIP时haproxy会根据配置将请求分发到两台Mycat上实现负载均衡,并且haproxy会检测mycat是否存活。 下面先介绍下后端数据库的搭建部分。 一、安装部署mysql 1、安装依赖 yum install tcl gcc perl perl-JSON.noarch perl-Time-HiRes.x86_64 -y 2、创建基础目录并修改文件夹的属组 mkdir -p /data/datafile mkdir -p /data/log chown -R mysql:mysql /data 3、安装mysql数据库

MySQL中间件之MyCat

你。 提交于 2020-02-25 23:37:09
MySQL中间件之MyCat 一、MyCat基础概念 1、什么是MyCat 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品 2、为什么使用MyCat 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的(比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的)。所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat MyCat作用: 能满足数据库数据大量存储;提高了查询性能 读写分离 数据分片 垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分

mycat入门实战

耗尽温柔 提交于 2020-02-25 19:18:19
先把官网的quick start看了一遍,再自己搭,结果是各种报错,各种坑。。记录一下。。 1.环境 一台虚拟机、一台云服务器、本地Mac (我是因为云服务器和本地安装了mysql,也可以完全使用虚拟机,看你自己),mycat部署在虚拟机上,两台mysql在云服务器和本地Mac上。 ps: 最开始是下载了Mac版本的mycat,但是跑起来是各种问题,想到前些天用docker搭建nginx,想玩玩openresty,装redis的lua模块也是各种gcc报错,docker的nginx总是报什么403,最后一直没解决,用brew install nginx好好的,索性放弃了,后面有时间再研究。 2.配置文件 直接贴了。。 server.xml <?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -

面试官系列,深入数据库分区分库分表

家住魔仙堡 提交于 2020-02-25 16:12:19
一、为什么要分库分表 软件时代,传统应用都有这样一个特点:访问量、数据量都比较小,单库单表都完全可以支撑整个业务。随着互联网的发展和用户规模的迅速扩大,对系统的要求也越来越高。因此传统的MySQL单库单表架构的性能问题就暴露出来了。而有下面几个因素会影响数据库性能: 数据量 MySQL单库数据量在5000万以内性能比较好,超过阈值后性能会随着数据量的增大而变弱。MySQL单表的数据量是500w-1000w之间性能比较好,超过1000w性能也会下降。 磁盘 因为单个服务的磁盘空间是有限制的,如果并发压力下,所有的请求都访问同一个节点,肯定会对磁盘IO造成非常大的影响。 数据库连接 数据库连接是非常稀少的资源,如果一个库里既有用户、商品、订单相关的数据,当海量用户同时操作时,数据库连接就很可能成为瓶颈。 为了提升性能,所以我们必须要解决上述几个问题,那就有必要引进分库分表,当然除了分库分表,还有别的解决方案,就是NoSQL和NewSQL,NoSQL主要是MongoDB等,NewSQL则以TiDB为代表。 二、分区分库分表的原理 1、什么是分区、分表、分库 (1)分区 就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的,分区实现比较简单,数据库mysql、oracle等很容易就可支持。 (2)分表

使用MyCat进行MySql的读写分离

不问归期 提交于 2020-02-22 14:49:20
读写分离是在主从复制的基础上实现的 一:安装MyCat MyCat下载完解压就能用,但是我们需要进行我们的配置 下载地址 http://dl.mycat.io 下载完成上传并解压就ok了 如果启动失败的的话可以查看logs/wrapper.log文件里的错误信息,百度一搜就可以解决了 我的MyCat安装在mysql主机上ip地址为192.168.118.4 二:配置MyCat 主要配置两个文件 servvice.xml里的东西备份之后,替换成下面的 <mycat:server xmlns:mycat="http://io.mycat/"> <!-- 添加user --> <user name="mycat_master" defaultAccount="true"> <property name="password">mycat_master</property> <property name="schemas">hehe</property> </user> <!-- 添加user --> <user name="mycat_slave"> <property name="password">mycat_slave</property> <property name="schemas">hehe</property> <property name="readOnly">true<

分布式数据库中间件sharding-jdbc、mycat、drds对比

给你一囗甜甜゛ 提交于 2020-02-22 13:58:06
一般对于业务记录类随时间会不断增加的数据,当数据量增加到一定量(一般认为整型值为主的表达到千万级,字符串为主的表达到五百万)的时候,性能将遇到瓶颈,同时调整表结构也会变得非常困难。为了避免生产遇到这样的问题,在做系统设计时需要预估可能产生的数据量:预估记录主体个数*预估记录主体产生的记录数(e.g.用户订单表预估数据量=预估用户数*单用户产生订单数),预估达到一定量时,就不得不考虑分库分表了,目前国内比较成熟的开源数据库中间件有sharding-jdbc、mycat;而drds是阿里云最近推出的商业产品,考虑到大部分公司都在使用阿里云,做一个全家桶,也是一个不错的选择。接下来将对这三款产品的优缺点及适用场景做以介绍。 可以看出sharding-jdbc作为一个组件集成在应用内,而mycat则作为一个独立的应用需要单独部署,drds则是阿里云的一个独立产品,不过需要结合rds一起使用。从架构上看sharding-jdbc更符合分布式架构的设计,直连数据库,没有中间应用,理论性能是最高的(实际性能需要结合具体的代码实现,理论性能可以理解为上限,通过不断优化代码实现,逐渐接近理论性能)。同时缺点也很明显,由于作为组件存在,需要集成在应用内,意味着作为使用方,必须要集成到代码里,使得开发成本相对较高;另一方面,由于需要集成在应用内,使得需要针对不同语言(java、C、PHP……

mycat扩容问题

♀尐吖头ヾ 提交于 2020-02-21 19:17:37
上一篇写了mycat扩容的操作,但是还有一个添加节点扩容后数据没有迁移的问题遗留,确实会出现很多问题,一般都是和mysql交互的问题,本人问题已解决,所以记录一下注意事项: 出现的错误有mysql权限1045问题 mysql1064错误 mysql无法连接错误等,也可以去查看mycat的源码,不过源码一般问题不大,总结了以下几点: 1.mysql密码尽量设置成没有特殊符号的,也可以先修改,扩容完成后改回去, 2.每个配置文件都不要有错误,有时候错误不会呈现到具体的文件上 3.链接数据库的方式有2种,native和jdbc,native连不上的时候注意修改成jdbc 4.数据库权限要设置对,比如root账户的各种权限 5.还有设置允许远程链接 来源: CSDN 作者: 大脸猫小王 链接: https://blog.csdn.net/qq_33337927/article/details/104423096

高级篇:Mycat的理解

…衆ロ難τιáo~ 提交于 2020-02-11 17:15:36
目录 一、问题导入 1.1高并发Mysql的速度问题怎么解决? 1.2Mysql 挂了怎么办? 1.3 Mysql 超过500W的数据 二、Mycat 的简介 2.1 Mycat 解决Mysql 的并发压力的思路 2.1.1 分库 2.1.2 分表 2.1.3 好处或者面试 2.1.4 Mycat 额外的好处 2.2 Mycat的安装 2.2.1 Mycat 是Java 语言写的,安装Mycat 必须先安装JDK 2.2.2 Mycat的安装 三、Mycat的名词解释 3.1 虚拟库 3.2 虚拟表 3.3 数据节点(**) 3.4 数据库服务器 四、Mycat的配置文件(*mycat的核心*) 4.1 schema.xml 4.1.1 schema (一个虚拟的库)节点 4.1.2 table 标签 4.1.3 dataNode数据节点 4.1.4 DataHost:数据库的服务器 4.2 rule.xml(路由的规则) 4.2.1 tableRule的节点 4.2.2 function 节点 4.3 server.xml 4.3.1 用户的配置 4.3.2 主键增长的节点 五、实战mycat的配置文件 5.1 写一个schema.xml 文件 5.2 rule.xml 文件(我们没有使用别的规则,它里面自动rule1) 5.3 server.xml 5.4 覆盖默认的mycat

简单使用mycat实现单库分表

北慕城南 提交于 2020-02-10 16:02:51
1.下载安装mycat 通过mycat的官网,下载对应的包,我这里选择安装的linux系统的 http://dl.mycat.io/ 上传在服务器某一位置,然后在该目录下解压 tar -xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz 2.配置mycat 进入 mycat中conf,首先我们需要配置mycat的用户和密码 vi server.xml 找到 user这一栏,默认的应该是123456,本地不改跳过这一步也行,当然服务器上弱口令不是很好.. 再修改 schema.xml vi schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode='dn01'> <table name="r_problem" primaryKey="id" dataNode="dn01" rule="rule1" subTables="r_problem$1-3" /> </schema> <!--