MySQL数据库无完整备份删库,除了跑路还能怎么办?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL数据库无完整备份删库,除了跑路还能怎么办?

1.背景


前段时间,由于运维同事的一次误操作,清空了内网核心数据库,导致了公司内部管理系统长时间不可用,大量知识库内容由于没有备份险些丢失。


结合这两天微盟的删库跑路事件,我们可以看到,数据库的备份与恢复显得尤为重要。


本文将对此次内网数据恢复过程做一些整理,介绍删库后的抢救方案。


同时,引发对数据库稳定性的思考。


12.jpg


2.数据抢修


这份内网数据事先没有特意备份,所以一开始认为需要从磁盘恢复数据了。所以紧急联系了数据恢复公司,希望过来恢复磁盘数据。


这里需要注意,数据恢复公司建议马上关机,避免磁盘数据被覆盖。


联系数据恢复公司的同时,运维同事在内网找到了几个残缺的备份文件,包括去年4月份的一个全量备份数据、今年2月初一个半全量备份数据(备份到r开头的表就失败了,剩余表没有备份),以及近7天到binlog日志文件。


所以立刻进行另一套恢复方案:

1)用今年2月初的半全量数据恢复一个库A

2)用去年4月份的全量数据恢复一个库B

3)将B数据库中r开头之后的表拷贝一份到数据库A中

4)数据库A中重放近3天的binlog。(注意,binlog回放时间截止到drop命令时间之前)


2.1 dump文件恢复


一开始想通过阿里云,把dump文件恢复到rds上。


结果发现需要super权限,而这个权限是阿里云高权限账号(另外还有普通账号)也不具备的,问了阿里云也不提供。因此,无法恢复到rds。


所以我们只能把dump文件恢复到本地数据库。


在ECS上建立一个mysql数据库,然后就是dump文件恢复。


有两种方式:


1)命令行恢复

mysql -u root xxxdb < xxxx-backup.sql


2)在mysql客户端中恢复

用root登陆后

use xxxdb;

source /data/xxxx-backup.sql


2.2 binlog文件重放恢复


基于起止时间恢复数据


sudo mysqlbinlog --start-datetime="2020-02-16 17:00:01" --stop-datetime="2020-02-20 17:00:00" —database=xxxdb mysql-bin.000218 | mysql -f -u root xxxdb


--database 指定了使用binlog中的哪个数据库进行导入,否则,如果binlog中有多个库的操作记录,会大量报错。

更多binlog命令参数见:


https://dev.mysql.com/doc/refman/5.6/en/mysqlbinlog.html#option_mysqlbinlog_database


-f 用于mysql命令,重建过程中如果遇到问题会继续执行而不是中断退出。


Actually mysqlbinlog does not stop after error, mysqlbinlog just converts log file to text format, nothing more. The problem is that mysql client stops after error. Please try 'mysql -f'.

3 数据备份


数据备份可以有多种方式,这里介绍三种


3.1 本地dump备份数据文件


比较方便存储,不过用起来限制也比较多,容易中断。


mysqldump --max_allowed_packet=1024M -u root xxxxdv > 20200219.sql


3.2 阿里云dts迁移备份


可以在阿里云上建一个dts迁移任务(迁移任务基本免费,同步任务收费),然后通过dts将源数据库直接迁移到rds、ecs自建数据库、vpc网络下到自建数据等地方。


可以避免dump还原的过程。


需要有个目标库,备份不是以简单的数据文件形式,而是一个备份数据库的形式。


3.3 xtrabackup(简称xbk)


https://www.percona.com/software/mysql-database/percona-xtrabackup


基于拷贝物理文件和redo来实现备份。


4. 数据库稳定性思考


不管是运维的误操作,还是像微盟这样的恶性事件,从根本上反映了企业数据库稳定性管理的不足。


任何事后抢救的措施,都比不上事前的谨慎防范。


如何提高企业数据库的稳定性,避免出现类似这样的事情呢?


1)统一技术栈,使用云厂商的云数据库


从现在云技术的发展来看,以阿里云、华为云等大厂提供的云数据库,能大大降低企业数据库的运维成本。


虽然云数据库可能比自建数据库的价格贵一点,但是,云数据库提供的完整的配套设施,如备份恢复、监控报警、技术支持、数据库高可用等,都会给企业数据库稳定性带来巨大帮助。从长期来看,能够大大节约企业的运维成本和人力成本。


另外,我特意去看了下阿里云的rds数据库,有完整的备份恢复机制,而且七天内的备份数据是不可删除的。


所以,如果使用了云数据库,那基本上不需要担心数据丢失或者被人恶习删除的问题了。


2)自建数据库的完善备份机制


当然,有的公司虽然使用了云数据库,但是出于数据安全性的角度,还是会有自建数据库的可能。


如果使用了自建数据库,那么一定需要有完善的备份机制。


我司自从发生了误操作删除内网数据的事件后,立刻引起重视,重新盘点梳理了核心数据的备份机制,包括云数据库、自建数据库,对于核心数据(包括但不限于生产数据、内部核心数据等)必须实施定期全量备份,同时考虑末日容灾,实施跨机房、跨云厂商的数据备份。


3)更健全的权限管理系统


除了数据备份外,我们还可以看到,数据库权限管理的重要性。


尤其中小企业,数据库权限要么没有管理,开发人员可以任意操作;要么是集中在少数几个运维同事手上。


无论哪种,都不安全。


最好的方式,还是开发一个统一数据库管理操作平台(或者购买类似阿里云DMS产品),在系统层面进行数据库的权限管控。


所有人员都只能通过这个平台操作数据库,同时,禁用危险命令,对高危操作进行分级审核。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
13天前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
69 10
|
3月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
227 36
|
6月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
7月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课5 在线备份
本文介绍了如何在PolarDB RAC一写多读集群中进行在线备份,特别针对共享存储模式。通过使用`polar_basebackup`工具,可以将实例的本地数据和共享数据备份到本地盘中。实验环境依赖于Docker容器中用loop设备模拟的共享存储。
170 1
|
3月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
158 5
|
3月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
|
5月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
249 28
|
5月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
120 15
|
6月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
6月前
|
数据库

推荐镜像

更多