MySQL 主从同步遇到的问题及解决方案
在做某个项目的时候,使用主从数据库,master负责update、delete、insert操作,而slave负责select操作。
情景1:发表文章与查看文章
可以认为这个项目是一个博客系统,这里就以用户发表文章与查看发表的文章为例:
1、用户发表文章,文章是存到master库中的,insert into Master values (id, content);
2、发表文章之后,立马跳转到刚才发表的文章阅读,此时的文章是从slave中获取的。select * from slave;
这个时候,就出现问题了,因为如果网络出现拥堵,或者其他原因,一般情况下,第二个操作都是访问不了刚才发表的文章的。
小技巧:让用户发表文章后,不立马查看文章,比如跳转到其他页面,给主从同步一点时间。
情景2:注册之后立马登陆
上面那种想法属于逃避行为,虽然可以解决不能查看文章的问题,但是如果另外一个场景,就有点不适用了,比如:
1、用户进行了注册,此时数据写到master中。
2、用户立马进行登录,此时读的是slave。
这时候,如果用户的速度稍微快一点,那么是不是用户就不能登陆了呢?毕竟数据没有同步到slave,即使用户的用户名和密码都正确,那也是不能登陆的呀。
小技巧:用户进行注册时,如果注册成功,那么就将用户名和密码保存到JavaScript的全局变量或者cookie中,登陆的时候,将输入的用户名和密码和全局变量或者cookie中的用户名进行对比即可。
收尾
上面这个想法虽然可行,但是并不安全,即使将账户和密码都加密存在本地,那也是存在安全隐患的。
解决方案
前面两个问题都可以使用缓存来解决,比如常用的memcache或者redis。
以发表文章与查看文章为例:
1、用户发表文章,将数据插入到master,并且将数据添加到memcache或者redis中。
2、用户查看文章的时候,首先从memcache或者redis中读数据,如果redis中不存在时,再读slave。
这里可以根据自己的情况选择来决定是先读缓存还是先读slave,如果你的逻辑是发表之后立马查看,那就先读缓存。
MySQL 主从同步遇到的问题及解决方案的更多相关文章
- mysql主从同步报slave_sql_running:no的解决方案
1.没有正确设置server_id(如没有正确设置从配置项) ps:可手动设置server_id 2.slave stop;set global sql_slave_skip_counter=1;sl ...
- mysql主从同步,主库宕机解决方案
链接:https://blog.csdn.net/zfl589778/article/details/51441719
- mysql主从同步(2)-问题梳理
之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常.以下梳理了几种主从同步中可能存在的问题:1)slave运行过慢不能与master同步,也就是M ...
- MySQL主从同步那点事儿
一.前言 关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通 ...
- 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?
如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...
- 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)
前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...
- mysql主从同步问题梳理
前言: MySQL主从复制故障机延迟原因有很多,之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常.以下梳理了几种主从同步中可能存在的问题: 1) ...
- MySQL主从同步、读写分离配置步骤、问题解决笔记
MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记: 现在使用的两台服务器已经 ...
- 高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
1. MySQL主从同步实现方式 MySQL主从同步是基于Bin Log实现的,而Bin Log记录的是原始SQL语句. Bin Log共有三种日志格式,可以binlog_format配置参数指定. ...
随机推荐
- spring拦截器(interceptor)简介
1. 拦截器用途 (1)拦截未登录用户直接访问某些链接 (2)拦截日志信息 (3)拦截非法攻击,比如sql注入 2. 涉及jar.类 (1)spring-webmvc.jar (2)HandlerIn ...
- Bcompare工具永久使用方法
bcompare的简介 我们在工作中会经常用到bcompare工具:合入驱动,对比原始文件等. bcompare,即Beyond Compare 是一个综合的比对工具. 可比对的对象包括纯文字档. ...
- June 11. 2018 Week 24th, Monday
Love is the beauty of the soul. 爱是灵魂之美. From Saint Augustine. The complete version of this quote goe ...
- SQL Server 数据导入Mysql具体教程
SQLServer2005数据导入Mysql到具体教程(測试) SQL SERVER数据导入MYSQL文件夹 1.Navicat for MySQL 版本号10.0.9 2.创建目标数据库 3.创 ...
- php实现斐波那契数列
斐波那契数列: 1 1 2 3 5 8 13 21 34 55 … 概念: 前两个值都为1,该数列从第三位开始,每一位都是当前位前两位的和 规律公式为: Fn = F(n-1) + F(n+1) F: ...
- 【编辑器】sublime 标题栏中文乱码问题
首选项--------设置-用户中添加"dpi_scale": 1.0,如下图所示 作者:smile.轉角 QQ:493177502
- 008_Node中的require和import
一.js的对象的解构赋值 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuri ...
- day26 Python __getattribute__
__getattr__#不存在的属性访问,触发__getattr__ class Foo: def __init__(self,x): self.x=x def __getattr__(self, i ...
- fuser - 查看文件/网络端口等被什么进程占用
前提 linux环境下,当使用umount命令卸载挂载点时,会遇到“device is busy”提示,这时fuser就能查出谁在使用这个资源;当然umount –lf [挂载点] 也可以强制卸载 ...
- Spring Security(一):官网向导翻译
原文出自 https://spring.io/guides/topicals/spring-security-architecture Spring Security Architecture ...