MySQL数据库机房裁撤问题总结
背景:公司某一机房需要裁撤,涉及到大量DB服务器,需要在裁撤截止日期以前完成业务的平滑迁移和设备退还工作。
历时2个多月,经历了设备梳理、裁撤资源评估、裁撤资源申请、裁撤DB部署、裁撤DB业务关系梳理、裁撤DB合并协调、裁撤DB数据迁移、裁撤DB切换、设备下架和退还等流程后,终于将组内涉及到的DB都裁撤完成。裁撤期间遇到很多问题,总结一下,希望对大家有帮助。
一、裁撤遇到的问题
1、存在着很老的版本比如4.1、5.5的版本
2、表字段使用系统关键字带来的兼容性问题
3、表没有主键,导致从机有的时候延迟很大(row format)
4、数据库中存在大量的MYISAM的表
5、部分实例数据量很大,超过1T
6、项目经久失修,找不到负责人
7、没有名字服务或者proxy,裁撤需要业务修改IP,如何做到平滑切换
8、用于裁撤的资源很少
历时2个多月,经历了设备梳理、裁撤资源评估、裁撤资源申请、裁撤DB部署、裁撤DB业务关系梳理、裁撤DB合并协调、裁撤DB数据迁移、裁撤DB切换、设备下架和退还等流程后,终于将组内涉及到的DB都裁撤完成。期间不仅仅将各个业务梳理清楚,并且对裁撤实例进行了清理和合并,仅用12台设备就完成了全部实例的迁移,并且实现0故障裁撤。裁撤期间遇到多个问题,总结一下,希望对大家有帮助。
二、问题解决方法论
1、系统思维
从全局的角度去看待遇到的问题,解决问题的时候不要只盯着某一个出问题的点,而应该站在更高的维度去思考解决方案。
2、资源整合
3、双赢思维
裁撤是一项需要运维、研发、资源、质量等同事一起协作的事情,我们目标就是为了业务平滑进行迁移和切换,我们在做事情的时候,要多从双赢思维中入手。其实本质就是要尝试站在对方的角度思考问题,自然更能找到双赢的解决方案。
三、解决方案
1、针对版本问题的解决方案
将DB全部迁移到mysql 5.7版本,迁移数据分为3步即可解决绝大部分的兼容性问题
a、只迁移业务数据,不mysql库数据
b、迁移权限
c、做主从同步
针对4.1的同步不兼容的问题,由于业务改动小,采用了的方案为:
直接解析binlog将新产生的数据同步到新的DB上,多次迭代,确保DB的差距最小后,直接停掉老DB,将少量新增的binlog通过工具同步到新DB上,并启用端口转发,将新的请求转发到新DB,停机时间1分钟以内。后面再让业务平滑修改业务到新的DB上。
2、针对表字段使用系统关键字的解决方案
业务表使用系统关键字在mysql 5.7中会人为SQL语法错误,从而导致sql执行失败,有2个解决方案:
a、修改表的字段,兼容mysql 5.7(这个方案会导致业务侧需要修改大量的代码)
b、对字段的所有操作都加上反引号(这个方案对业务影响小,我们采用的就是这个方式)
3、针对表没有主键和MYISAM表的问题
针对表没有主键和含有很多MYISAM表的问题,为了方便管理,对裁撤的实例都进行梳理,并且在裁撤过程中完成改造。长痛不如短痛。
没有主键的解决方案
和业务沟通,统一在新实例中增加主键(现存字段)
MYISAM的解决方案
和业务沟通,统一在新实例将MYISAM表全部修改为innodb
4、针对项目经久失修的问题,只能通过抓包确定对应的负责人,这里的梳理工作确实非常繁杂;
5、针对实例数据量很大的解决方案
由于设计到版本升级,无法采用物理备份的方式进行,因此采用的是mydumper多线程备份的方式,导入的时候,将mysql相关的表全部移除。另外导入的时候不要记录binlog,新DB主从都导入(不要做好主从后,只在主机上导入),或者在主机导入完成后,直接通过拷贝文件的方式做从机。
6、针对没有名字服务或者proxy,做到平滑迁移的解决方案
之前老的DB没有名字服务和proxy,如果要做切换,需要业务侧去修改各个server的配置,由于项目经久失修,大部分初始开发人员基本都已经离职或者转岗,很容易出现修改遗漏,如何实现平滑迁移是重点要考虑的问题,我们采用的方案是使用端口转发的方式,端口转发完成后,业务就可以从容地去修改业务的配置了。使用端口转发有如下几种常见的方式:
a、使用iptables进行转发
优点是不需要停mysql,可以做到真正的平滑迁移;缺点是处于安全考虑,公司的linux机器都没有加载nat模块,老系统如果要加载nat模块需要编译内核
b、使用ssh进行端口转发
优点是一条命令即可完成,非常方便,也不需要做改造;缺点是需要停mysql,会造成短暂的业务中断;
c、使用haproxy进行端口转发
缺点是需要额外部署和配置haproxy,也需要停掉mysql,会造成短暂的业务中断;
d、使用lvs进行端口转发
缺点是需要额外安装和配置lvs
经过综合考虑,我们选择了通过ssh端口转发的方案。范例:
ssh -f -N -g -L3306:newDBip:3306 root@localip
注意:有部分系统ssh命令不支持-N参数,去掉-N参数即可。此外还需要注意的是需要给老DB的机器进行授权,否则会由于权限问题带来访问失败的情况。
7、用于裁撤的资源很少的解决方案
机房裁撤的时候,资源侧给的裁撤资源肯定不会按照置换比1:1置换,而DB数据量一般都比较大。我们采取的方案是清理能清理的数据、合并能合并的实例。
四、DB裁撤问题的思考
经历一次裁撤,真的有种“不会再爱了”的感觉,每次都非常痛苦。要规避这种痛苦,只有从架构上去规避这种业务直连DB带来的问题。可以采用netagent/名字服务/l5等。在后面的DB接入中,需要将此种需求纳入到数据库的准入标准中。
作者:飞鸿无痕
链接:https://www.jianshu.com/p/5e55d29dbd57
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
MySQL数据库机房裁撤问题总结的更多相关文章
- MySQL 数据库主从复制架构
前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复 ...
- MySQL数据库迁移详细步骤(转)
========================================================================================== 一.背景简介 == ...
- mysql数据库的高可用方法总结
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一 些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无 ...
- 初码-Azure系列-记一次MySQL数据库向Azure的迁移
初码Azure系列文章目录 还在继续给客户迁移不同的系统到Azure,这一次是一个系统的MySQL数据库要迁移,将迁移过程记录一下 原系统环境 数据库版本:MySQL Community Editio ...
- 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...
- MySQL数据库的高可用方案总结
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...
- .net连mysql数据库汇总
另外MySql官方出了一个在csharp里面连接MySql的Connector,可以试试 http://dev.mysql.com/downloads/#connector-net <add n ...
- MySQL数据库运维课程
MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...
- Windows 下Java 连 MYSQL数据库
我们上课的时候在机房是用java连SQLServer2008的.由于这个数据库软件安装太麻烦,最重要的一点是安装后系统应该会变慢.至少开机速度会有影响.至于这个mysql我觉得下载一个绿色版的,然后自 ...
随机推荐
- 【LeetCode算法-26】Remove Duplicates from Sorted Array
LeetCode第26题 Given a sorted array nums, remove the duplicates in-place such that each element appear ...
- **80. Remove Duplicates from Sorted Array II 删除排序数组中的重复项 II
1. 原始题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件 ...
- Sql server 中将数据行转列列转行(二)
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...
- IISExpress.无法启动IIS Express Web 服务器.Starting IIS Express... IIS Express is running
x 提示: 无法启动IIS Express Web 服务器. 来自IIS Express的输出: Starting IIS Express... IIS Express is running 总结: ...
- jquery鼠标经过弹出层写法
jquery鼠标经过弹出层写法<pre><div class="navitem"><a href="/index.php?c=news&am ...
- IP通信学习心得01
一.物理拓扑 1. 1) 总线拓扑 特点:所有设备都处于同一个冲突域与广播域,共享相同的带宽 一次只能有一个设备传输,且两端要安装端接器. 传输介质:同轴电缆.(注:10Base5:容量10M 传输5 ...
- PHP计算两个坐标之间的距离
<?php /** * 计算两点之间的距离 * @param $lng1 经度1 * @param $lat1 纬度1 * @param $lng2 经度2 * @param $lat2 纬度2 ...
- 从Asp .net到Asp core (第一篇)《回顾Asp .net生命周期与管道机制》
从2016年微软收购了Xamarin整合到Visual Studio里并将其开源到现在已有三年多时间,从.net core 1.0 到现在的2.2,以及即将问世的3.0,我们看到微软正在跨平台之路越走 ...
- (四)linux 学习 --使用命令
The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap06.html 文章目录 什么是命令 是哪一种 ...
- C++ 多态详解及常见面试题
今天,讲一讲多态: 多态就是不同对象对同一行为会有不同的状态.(举例 : 学生和成人都去买票时,学生会打折,成人不会) 实现多态有两个条件: 一是虚函数重写,重写就是用来设置不同状态的 二是对象调 ...