摘要:MHA(Master High Availability)是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,在master服务器不宕机的情况下,基本能保证数据的一致性。 它由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。其中,MH 阅读全文
posted @ 2017-05-21 21:37 iVictor 阅读 (6208) 评论 (6) 编辑
摘要:MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和PXC。 对于小公司,一般推荐使用keepalived+双主,简单。 下面来部署一下 配置环境: 角 阅读全文
posted @ 2016-05-31 14:26 iVictor 阅读 (14954) 评论 (3) 编辑
摘要:对于MySQL的备份,可分为以下两种: 1. 冷备 2. 热备 其中,冷备,顾名思义,就是将数据库关掉,利用操作系统命令拷贝数据库相关文件。而热备指的是在线热备,即在不关闭数据库的情况下,对数据库进行备份。实际生产中基本上都是后者。 关于热备,也可分为两种方式: 1. 逻辑备份 2. 物理备份 对于 阅读全文
posted @ 2016-05-19 11:08 iVictor 阅读 (10618) 评论 (5) 编辑
摘要:1. Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host' 阅读全文
posted @ 2019-07-08 15:30 iVictor 阅读 (100) 评论 (0) 编辑
摘要:Redis Cluster采用虚拟槽分区,所有的key根据哈希函数映射到0~16383槽内,计算公式: slot = CRC16(key) & 16383 每个节点负责维护一部分槽以及槽所映射的键值对。 Redis虚拟槽分区的特点,解耦数据与节点之间的关系,简化了节点扩容和收缩难度。但其存在如下限制 阅读全文
posted @ 2019-03-27 22:05 iVictor 阅读 (827) 评论 (0) 编辑
摘要:对于MySQL的历史,相信很多人早已耳熟能详,这里就不要赘述。下面仅从产品特性的角度梳理其发展过程中的里程碑事件。 1995年,MySQL 1.0发布,仅供内部使用。 1996年,MySQL 3.11.1发布,直接跳过了MySQL 2.x版本。 1999年,MySQL AB公司成立。同年,发布MyS 阅读全文
posted @ 2018-10-18 08:54 iVictor 阅读 (5821) 评论 (11) 编辑
摘要:redis-trib.rb是官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境。 准备redis-trib.rb的运行环境 wget https://cache.ruby-lang.org/pub/ru 阅读全文
posted @ 2018-10-11 11:12 iVictor 阅读 (7683) 评论 (0) 编辑
摘要:Redis Sentinel是Redis的高可用方案。是Redis 2.8中正式引入的。 在之前的主从复制方案中,如果主节点出现问题,需要手动将一个从节点升级为主节点,然后将其它从节点指向新的主节点,并且需要修改应用方主节点的地址。整个过程都需要人工干预。 下面通过日志具体看看Sentinel的切换 阅读全文
posted @ 2018-10-09 16:55 iVictor 阅读 (1717) 评论 (0) 编辑
摘要:复制 A few things to understand ASAP about Redis replication. 复制的实现 1. 设置主节点的地址和端口 简而言之,是执行SLAVEOF命令,该命令是个异步命令,在设置完masterhost和masterport属性之后,从节点将向发送SLAV 阅读全文
posted @ 2018-10-08 08:48 iVictor 阅读 (1877) 评论 (0) 编辑
摘要:RDB RDB是将当前数据生成快照保存到硬盘上。 RDB的工作流程: 1. 执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接返回。 2. 父进程执行fork操作创建子进程,fork操作过程中父进程被阻塞。 3. 父进程for 阅读全文
posted @ 2018-10-07 10:16 iVictor 阅读 (2675) 评论 (0) 编辑
摘要:在上一篇文章《MySQL 5.7中如何定位DDL被阻塞的问题》中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata_locks表。提出的定位方法,颇有种"锦上添花"的意味,而且,也只适用于MySQL 5.7开始的版本。 但在实 阅读全文
posted @ 2018-08-21 21:07 iVictor 阅读 (660) 评论 (5) 编辑
摘要:在上篇文章《MySQL表结构变更,不可不知的Metadata Lock》中,我们介绍了MDL引入的背景,及基本概念,从“道”的层面知道了什么是MDL。下面就从“术”的层面看看如何定位MDL的相关问题。 在MySQL 5.7中,针对MDL,引入了一张新表performance_schema.metad 阅读全文
posted @ 2018-08-14 10:36 iVictor 阅读 (1319) 评论 (0) 编辑
摘要:在线上进行DDL操作时,相对于其可能带来的系统负载,其实,我们最担心的还是MDL其可能导致的阻塞问题。 一旦DDL操作因获取不到MDL被阻塞,后续其它针对该表的其它操作都会被阻塞。典型如下,如阻塞稍久的话,我们会看到Threads_running飙升,CPU告警。 如果发生在线上,无疑会影响到业务。 阅读全文
posted @ 2018-08-13 10:01 iVictor 阅读 (994) 评论 (7) 编辑
摘要:mysqlfrm可基于frm文件生成对应的表结构。常用于数据恢复场景。 其有两种操作模式。 1. 创建一个临时实例来解析frm文件。 2. 使用诊断模式解析frm文件。 以下表进行测试,看看, 1. mysqlfrm解析的结果与原生表结构的区别。 2. 两种操作模式解析结果的不同。 首先看看第一种操 阅读全文
posted @ 2018-07-13 10:52 iVictor 阅读 (564) 评论 (0) 编辑
摘要:前段时间,将线上MySQL数据库升级到了5.7。考虑到可能产生的不兼容性,在升级之前,确实也是战战兢兢,虽然测试环境,开发环境早在半年前就已提前升级。 基于前期的调研和朋友的反馈,与开发相关的主要有两点: sql_mode MySQL 5.6中,其默认值为"NO_ENGINE_SU BSTITUTI 阅读全文
posted @ 2018-07-09 10:43 iVictor 阅读 (9755) 评论 (23) 编辑
摘要:一直以来,对于MySQL root密码的忘记,以为只有一种解法-skip-grant-tables。 问了下群里的大咖,第一反应也是skip-grant-tables。通过搜索引擎简单搜索了下,无论是百度,抑或Google,只要是用中文搜索,首页都是这种解法。可见这种解法在某种程度上已经占据了使用者 阅读全文
posted @ 2018-06-29 14:29 iVictor 阅读 (46212) 评论 (8) 编辑
摘要:自增主键没有持久化是个比较早的bug,这点从其在官方bug网站的id号也可看出(https://bugs.mysql.com/bug.php?id=199)。由Peter Zaitsev(现Percona CEO)于2003年提出。历史悠久且臭名昭著。 首先,直观的重现下。 虽然id为3的记录删除了 阅读全文
posted @ 2018-05-30 15:08 iVictor 阅读 (1561) 评论 (5) 编辑
摘要:MySQL 8.0终于支持降序索引了。其实,从语法上,MySQL 4就支持了,但正如官方文档所言,"they are parsed but ignored",实际创建的还是升序索引。 无图无真相,同一个建表语句,看看MySQL 5.7和8.0的区别。 create table slowtech.t1 阅读全文
posted @ 2018-05-22 15:42 iVictor 阅读 (3183) 评论 (0) 编辑