使用MySQL服务一般会遇到的疑惑

计算机组成
• 阅读 1230

主题

本文首发公众号【一名打字员】

今天主要分享一下在服务端使用MySQL服务时,会遇到的几个经典问题以及对应的建议解决方案,如有雷同,绝对不是巧合。

MYSQL容灾快速切换方案

说到容灾,本猿公司以前就是自己买的服务器,然后找的机房托管,然而估计是一家不咋“靠谱”的机房,为啥这么说呢,谁家机房没事就迁移,然后临时性的断电就出现了不下于两次,由于公司的数据库都是自己维护,断电导致了几次数据异常,吃了几次苦头之后,公司就舍弃了地方机房,果断放在云上面。
当然,当时我们也没有做任何容灾措施,面对机房级灾难根本束手无措。接下来,本猿简单介绍一下自己所理解的MySQL中常用的容灾方案.

  1. 复制

通常,我们的客户端进行读写操作是,往往是对主库进行写入,然后在从库中进行读操作,然后主从库之间会进行replication(复制)。

使用MySQL服务一般会遇到的疑惑
当主库宕机的时候,我们可以很快的将备库推出来,充当主库的角色,来保证业务的顺利进行。
这样的话对复制过程中延迟的时间要求比较高。假设,如果是执行单挑数据执行时间为T,则延迟为T,那么耗费的时间是2T。执行一个事务(N条操作)的话,会先缓存到cache中,等待全部执行写入操作结束,延迟的时间则为N*T。
当数据库吞吐量到达一定程度时,这个延迟会变的很大,这时候就会产生许多其它的维护成本。至于主备库如何解决延迟问题,请移步下面的问题。

2.利用zookeeper容灾切换

在上面我们介绍了MySQL复制的相关知识,而且MySQL的复制机制很强大,我们能够保证数据不丢失,但是如何保证主备如何在宕机时无缝切换并将相应的故障转移处理呢,怎么才会马上知道自己的主库挂掉了,而不是痴痴的等其他部门找上门来兴师问罪,这时候就需要一个好的监控工具了,在这里本猿推荐使用zookeeper,之前公司也是用zookeeper管理的dubbo的一个微服务集群,这样MySQL的监控和失效备援就能顺利的解决了,同时也能够协调多个服务之间进行事件处理。
通常,我们监控服务的时候,基本上是采用保持存活或者心跳的方式,就像之前对dubbo服务的管理,本猿更中意与发送心跳包来检测服务存活的方式。所以对于每一个MySQL实例,都会有一个AGENT程序,它与MySQL示例放在同一台机器上,并定时对齐检测可用性,这样当机器挂掉的时候,agent与zookeeper断开连接,zookeeper则会马上感知。又或者是agent无法检测到MySQL的存活状态,则也会对zookeeper发出通知,另外agent挂掉的时候,失败事件也会进行重启或者其它的操作。

MYSQL哪种存储引擎好

在网络上有关于针对InnoDB引擎与MyISAM引擎进行了测试。
其结果大致为1W与10W的select、update与delete操作都很快,在1ms一下。insert操作受数据规模影响较少。在100w调数据以上InnoDB引擎有相对优势,在数据规模在10w条以下的,MyISAM引擎有相对优势,但是注意,使用InnoDB引擎要注意填写配置,在缺省参数配置下性能较差。

MYSQL的应用是否会造成数据的丢失

答案肯定是会的,正所谓常在河边走,哪能不湿鞋。无论是上面说的机房断电或者服务器异常还是硬盘坏掉都会造成数据的丢失,一般大厂在线上时,都会使用应用双写,也就是写两份来保证数据的准确。另外应用会记录log,发送同志消息来保证数据准确写入不丢失。

MYSQL主备库延迟解决方案基本思路

首先,造成主备库延迟,说明其中肯定会参杂有网络延迟、主库负载、备库负载的因素。
这个时候我们可以在从库里面选出一台专用的服务器,只来作为备份用,不进行其它操作,也就能最大限度的达到减少延迟的要求。当然这只是外部的粗浅解决方案,我们需要减少从库同步延时,就需要在架构上做优化,让主库的DDL快速的执行,另外从库对数据安全要求不高,sync_binlog与innodb_flush_log_at_trx_commit之类的完全可以去掉,同时也可以配备比主库更好或者相同配置的硬件设备。
MySQL5.6+已经支持多线程的主从复制,不像oracle那样以schema来做多线程,不同的库使用不同的复制线程,MySQL则是采用淘宝丁奇所类似的方法,以表来做多线程。

结论

关于MySQL,还有许多值得去深入研究的问题。另外推荐一本书《深入理解MySQL核心技术》,希望大家能够一起成长、进步。

点赞
收藏
评论区
推荐文章
linux服务器中安装mysql时候,远程访问的时候的乱码
今天部署皕杰报表,在linux服务器中安装mysql时候,远程访问的时候的插入中文数据会变成?,出现乱码问题。这就是编码不统一所导致的。解决方案:1.打开linux窗口,启动mysql:mysqlurootproot
Gwendolyn62 Gwendolyn62
4年前
MySQL的语句执行顺序
今天遇到一个问题就是mysql中insertinto和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序:sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 
Wesley13 Wesley13
3年前
MySQL高可用方案选型参考
本文由「MySQL中文网」原创,“MySQL中文”公众号是http://imysql.com的官方唯一公众号,微信首发。欢迎关注「MySQL中文」公众号(ID:imysql_wx),我们会不定期推送MySQL相关原创干货。本次专题是MySQL高可用方案选型,这个专题想必有很多同学感兴趣。高可用的意义以及各种不同高可用
Wesley13 Wesley13
3年前
EDAS 微服务应用同城容灾最佳实践
前言上云目前已经是绝大数企业首选的IT基础设施建设方案,但是云上仍然存在一些不确定因素(机房硬件故障、网络故障、断网/断电、人为操作失误),导致各大云厂商每年在不同的数据中心都会发生一些故障,所以建设具备容灾能力的业务应用是必需的。公共云上容灾解决方案涵盖同城双活、跨Region容灾和异地多活等容灾场景,对公共云上大多数中长尾客户来说,更需要的是一
Wesley13 Wesley13
3年前
NPM 私库从搭建到数据迁移最后容灾备份的一些解决方案
👆  这是第 80 篇不掺水的原创,想要了解更多,请戳上方蓝色字体:政采云前端团队 关注我们吧~本文首发于政采云前端团队博客:NPM私库从搭建到数据迁移最后容灾备份的一些解决方案https://www.zoo.team/article/setupthenpmprivatelibrary!(https:/
Stella981 Stella981
3年前
C#访问MySQL数据库(winform+EF)
以前都是C连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winform访问MYSQL,当然使用winfrom,还是wfp,以及其他的技术这里不讨论,个人觉得这个比较上手快。http://jingyan.baidu.com/article/642c9d34aa809a644
Wesley13 Wesley13
3年前
MySQL高级
1mysql的架构介绍Mysql简介概述高级MySQLmysql内核sql优化工程师mysql服务器的优化查询语句优化主重复制软硬件升级容灾备份sql编程MysqlLinux版本的安装mysql5.5查看MySQL的安装位置:whichmysqld参考网址:https://ww
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
云存储环境下的容灾关键技术
云存储的出现解决了现有容灾系统的几个显著问题:一是面对大量的备份数据,管理系统不够完善的问题;二是面对大规模的数据容灾灵活性和效率不高的问题;三是在数据加密保护方面依然存在的安全隐患问题。那么,云存储解决这些问题主要依靠的技术原理和机制是什么呢,云环境下的容灾关键技术都有哪些,本文接下来将对此进行简单的介绍和分析。
天翼云CDR基本概念
云容灾CTCDR(CloudDisasterRecovery)为云主机提供跨可用区的容灾保护能力,RPO可达秒级、RTO可达分钟级。支持容灾演练、一键切换等功能。当生产中心故障时,可在容灾中心快速恢复业务,保障客户数据安全和业务连续性。
小谈容灾备份
从其对系统的保护程度来分,可以将容灾系统分为:数据容灾和应用容灾