mysql主从读写分离,分库分表
1.分表
当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了。
a.水平拆分:数据分成多个表
b.垂直拆分:字段分成多个表
c.插入/更新/删除数据和查询统计 MyISAM存储引擎有一个MERGE存储引擎,可以将多个表合成一个表,就可以进行这四种操作 InnoDB用alter able可以将变成MyISAM存储引擎,然后使用MERGE引擎
面试题:MERGE存储引擎将N个子表合并,那么在数据库中如何存储?
答案:MERGE是将N个真实的表组成一个大表,但是实际上还是存储的N个表
2.读写分离
当数据不断增多的时候,数据库压力增大,可以把读和写分离开,读是一些机器,写是另一些机器,对应主从服务器,主服务器是写操作,从服务器读操作,可以有多个从服务器,而且大多数业务是读操作,京东,淘宝大量浏览商品,是读操作。
在主服务器写的同时,数据同步到从服务器,保持数据的完整性(主从复制)
主从复制的原理:基于主服务器的二进制日志(binlog)跟踪所有的对数据库的完整更改实现。因此,要实现主从复制,必须在主服务器上启动二进制日志。
主从复制是异步复制,所以有三个线程参与。主服务器一个线程(IO线程) 从服务器两个(IO线程和SQL线程)
主从复制的过程:
1)从数据库执行一个start slave开启主从复制
2)从数据库的IO线程会通过主数据库授权的用户请求连接主数据库,并请求主数据库的binlog日志指定位置 指定的命令为change master
3)主数据库收到IO请求,负责复制的IO线程根据请求读取指定的binlog文件信息,返回给从数据库IO线程,返回的信息除了日志文件,还有本次返回的日志内容和binlog名称和位置,binlog名称和位置会写在master-info文件中
4)从数据库获取内容和位置(binlog),写入到relaylog(从数据库)中继日志的最末端,并将新的binlog文件名和位置记录到Master-info文件中,方便下一次主数据库的binlog文件日志,指定位置从而方便定位
5)从数据库的SQL线程实时监测本地relaylog新增内容,解析为SQL语句执行
主从复制的弊端-->延迟的解决方案:
1.定位问题-->找到延迟瓶颈(是IO压力大-->升级硬件/换成SSD(固态硬盘))
2.单线程从relaylog执行MySQL语句延迟-->使用MySQL5.6以上版本多线程或者Tungsten第三方并行复制
3.若都不行,则直接分库
3.分库
很早以前是使用Cobar方案(阿里开源但后续没有更新)
现在是使用MyCat,他是基于Cobar,使用的是MySQL通讯协议实现了分库,是一个代理服务器,不是普通的Web代理服务器,而是在应用服务器和后台数据库之间,有一个特性是无状态,容易部署负载均衡
原理:应用服务器传SQL语句-->路由解析转发到不同的后台数据库-->结果汇总返回
集群分布式模型:
(负载均衡一般使用在:网络优化/单点登录/集群分布式/高并发)
MyCat把逻辑数据库和数据表对应到真实的数据库和数据表,因此开发者只需要关心逻辑上的相关操作就行了,遮蔽了物理差异性
MyCat影射关系图:
MyCat工作流程;
1.应用服务器向MyCat发送SQL语句:select * from user where id in(30,31,32)
2.MyCat前端通信模块与应用服务器通信,交给SQL解析模块
3.SQL解析模块解析完交给SQL路由模块
4.SQL路由模块id取模,余数为0,是db1,余数为1,是db2,以此类推
5.把SQL拆解为select * from user where id in (30,31,32),交给SQL执行模块对应db1,db2,db3...
6.SQL执行模块通过后端分别在db1,db2,db3...执行语句,返回结果到数据集合并模块,然后返回给应用服务器
4.慢查询分析 调参数
慢查询:指的是执行超过一定时间SQL查询语句,把这个记录到慢查询日志,方便开发人员看日志找问题。
主要是三个参数:long_query_time 定义慢查时间 slow_query_log 设置慢查询开关 slow_query_log_file 设置慢查询日志文件路径
配置慢查询方法:
方法1:
set long_query_time=1;
set slow_query_log=on;
set slow_query_log_file=’/data/slow.log’;
方法2:
/etc/my.conf设置参数开启慢查询,使用explain命令分析SQL,输出结果含义官方文档有
5.其他优化总结
1.优化查询
a.使用explain分析
b.索引对查询速度的影响(注意like关键字、多列索引、OR关键字)
2.优化数据库结构
1.分表
2.增加中间表
3.优化多表查询
mysql主从读写分离,分库分表的更多相关文章
- MySQL主从复制&读写分离&分库分表
MySQL主从复制 MySQL的主从复制只能保证主机对外提供服务,从机是不提供服务的,只是在后台为主机进行备份数据 首先我们说说主从复制的原理,这个是必须要理解的玩意儿: 理解: MySQL之间的数据 ...
- Mycat安装并实现mysql读写分离,分库分表
Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...
- Docker安装Mycat并实现mysql读写分离,分库分表
Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...
- Mycat 读写分离+分库分表
上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功 ...
- 读写分离&分库分表学习笔记
读写分离 何为读写分离? 见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上. 这样的话,就能够小幅提升写性能,大幅提升读性能. 我简单画了一 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十七):集成多数据源+Seata分布式事务+读写分离+分库分表
读写分离:为了确保数据库产品的稳定性,很多数据库拥有双机热备功能.也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器:第二台数据库服务器,主要进行读的操作. 目前有多种方式实现读写分离,一种 ...
- Django 数据库读写分离 分库分表
多个数据库 配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BA ...
- 数据字符集mysql主从数据库,分库分表等笔记
文章结束给大家来个程序员笑话:[M] 1.mysql的目录:在rpm或者yum安装时:/var/lib/mysql 在编译安装时默许目录:/usr/local/mysql 2.用rpm包安装的MyS ...
- Mycat读写分离、主从切换、分库分表的操作记录
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- Amoeba搞定mysql主从读写分离
前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...
随机推荐
- nib、xib、storyboard(故事板)
nib:NeXT Interface Builder的缩写 xib:XML nib的缩写 相同点: nib和xib都是Interface Builder的图形界面设计文档.Interface Buil ...
- iOS dateformatter设置GMT格式时间--iOS开发系列---项目中成长的知识四
今天在项目中开始接手客户端的签名这个模块,签名这个会在项目结束过后再单独写一下自己的心得! 今天讲讲在签名的过程中我们需要向服务器传送一个Date值,格式要求是格林威治时间,也就是GMT时间! 格式要 ...
- Xcode及Mac快捷键
1. 文件 CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + S ...
- AT2172 Shik and Travel
题目描述: luogu 题解: 二分+暴力$vector$+$dfs$. 记录下所有可能的子树内合法方案,双指针+归并合并. 代码: #include<vector> #include&l ...
- 简易的mysql性能查询脚本
#!/bin/bash mysqladmin -P3306 -uroot -p -h127. -r -i ext |\ awk -F"|" \ "BEGIN{ count ...
- mysql 慢查询日志 pt-query-digest 工具安装
介绍:pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump ...
- gnu make规则记录
1. $(shell CMD) 名称: 执行 shell 命令函数 功能: 在新的 shell 中执行 CMD 命令 返回值: CMD 在 shell 中执行的结果 例如:PLATFORM=$(she ...
- Linux Shell脚本教程:30分钟玩转Shell脚本编程
http://c.biancheng.net/cpp/shell/ Linux在线体验: http://compileonline.com/ Linux命令查询: http://man.linuxde ...
- JavaScript正则表达式-断言
(?=reg_pattern):正前向断言 只有当字符串右侧出现匹配reg_pattern的字符时才匹配正则表达式. str = "img1.jpg,img2.jpg,img3.bmp&qu ...
- cs229_part4
又到了一节很重要的课,因为这个学习理论是从统计角度为机器学习算法提供了一个理论基础. 学习理论 问题背景 先回顾一下我们第一节课提到的机器学习的组成: 第一节课只是简单的提了一下,现在我们要真正来分析 ...