首页 > 数据库 >mysql数据如何恢复到任意时间节点?mysql数据恢复,mysql数据备份

mysql数据如何恢复到任意时间节点?mysql数据恢复,mysql数据备份

时间:2022-12-17 11:00:29浏览次数:52  
标签:数据恢复 Binlog 备份 insert 数据备份 stu 全量 mysql into


文章目录

  • ​​写在前面​​
  • ​​数据备份与恢复​​
  • ​​1、全量备份​​
  • ​​模拟全量备份与恢复​​
  • ​​全量备份的缺点​​
  • ​​2、增量备份​​
  • ​​模拟增量备份与恢复​​
  • ​​增量备份注意事项​​
  • ​​总结​​

写在前面

作为互联网开发人员来说,数据安全性一直排在第一位的重中之重。

mysql作为关系型数据库的一个巨头,其备份与恢复更是大家所关心的。

今天就详细聊聊,mysql如何备份,以及被“删库跑路”之后如何恢复。

数据备份与恢复

1、全量备份

最简单的备份方式就是全量备份。

全量备份就是将数据库整库备份到磁盘中,恢复的时候再将文件读取到数据库中。

mysql可以使用mysqldump命令来执行全量备份。

模拟全量备份与恢复

1、准备数据

CREATE TABLE `stu` (
`id` int NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);

insert into stu values('1', '张一');
insert into stu values('2', '张二');
insert into stu values('3', '张三');
insert into stu values('4', '张四');
insert into stu values('5', '张五');

2、全量备份

将mytest数据库全量备份。
使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。

mysqldump -uroot -p mytest > mytest.sql
-- 输入密码之后就会生成mytest.sql

3、删除表所有数据

truncate table stu;

4、数据恢复

mysql -uroot -p mytest < mytest.sql
-- 输入密码之后,就会恢复备份时刻的数据库全部信息

全量备份的缺点

全量备份的代价非常高。

1、数据库数据多的话,占用磁盘空间非常大。
2、每次备份需要拷贝所有数据,备份过程中占用的CPU、磁盘等资源,会严重影响系统运行。
3、为了保证数据一致性,还可能锁表,导致备份期间许多业务进入停用状态。

所以说,我们不能经常进行全量备份,基本每天一次就可以了。

这也就意味着,如果数据库的数据丢失,只能恢复到最近一次全量备份的时间点,这期间发生的数据还是丢失了。

2、增量备份

MySQL 自带了 Binlog,就是一种实时的增量备份。Binlog 里面记录的就是 MySQL 数据的变更的操作日志,开启 Binlog 之后,我们对 MySQL 中的每次更新数据操作,都会被记录到 Binlog 中。

Binlog 是可以回放的,回放 Binlog,就相当于把之前对数据库所有数据更新操作按照顺序重新执行了一遍,回放完成之后数据自然就恢复了。这就是 Binlog 增量备份的基本原理。很多数据库都有类似于 MySQL Binlog 的日志,原理和 Binlog 是一样的,备份和恢复方法也是类似的。

首先我们看mysql是否开启了binlog:

show variables like '%log_bin%';
show master status;

mysql数据如何恢复到任意时间节点?mysql数据恢复,mysql数据备份_数据


mysql数据如何恢复到任意时间节点?mysql数据恢复,mysql数据备份_数据库_02

可以看到当前这个数据库已经开启了 Binlog,log_bin_basename 表示 Binlog 文件在服务器磁盘上的具体位置。然后用“show master status”命令可查看当前 Binlog 的状态,显示正在写入的 Binlog 文件,及当前的位置。假设我们每天凌晨用 mysqldump 做一个全量备份,然后开启了 Binlog,有了这些,我们就可以把数据恢复到全量备份之后的任何一个时刻。

模拟增量备份与恢复

1、准备数据

CREATE TABLE `stu` (
`id` int NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);

insert into stu values('1', '张一');
insert into stu values('2', '张二');
insert into stu values('3', '张三');
insert into stu values('4', '张四');
insert into stu values('5', '张五');

2、随便插入几条数据

insert into stu values('6', '张6');
insert into stu values('7', '张7');
insert into stu values('8', '张8');
insert into stu values('9', '张9');
insert into stu values('10', '张十');

3、数据删除

truncate table stu;

4、通过全量备份,恢复数据到备份时刻

mysql -uroot -p mytest < mytest.sql
-- 输入密码之后,就会恢复备份时刻的数据库全部信息

5、我们发现,后来insert的五条数据还没有恢复,此时用增量备份恢复

mysqlbinlog --start-datetime "2022-12-12 02:43:00" --stop-datetime "2022-12-12 02:46:00" /var/lib/mysql/mysql-bin.000005 | mysql -uroot -p

6、此时数据已经恢复

增量备份注意事项

恢复数据时,一定要恢复执行truncate语句之前的时间,否则binlog会将执行的truncate一起执行。
所以,恢复时一定要搞清楚数据删除的时间节点。

在回放 Binlog 的时候,指定的起始时间可以比全量备份的时间稍微提前一点儿,确保全量备份之后的所有操作都在恢复的 Binlog 范围内,这样可以保证恢复的数据的完整性。
回放 Binlog 的操作是具备幂等性的,重复回放的那部分 Binlog 并不会影响数据的准确性,所以binlog提前一点多恢复是没问题的。

总结

发生删库跑路,不要慌,还是可以恢复数据的。

正常来说全量备份+binlog就可以恢复所有的数据,但是数据安全性可并不止这些。

“不要把所有的鸡蛋放在同一个篮子中”,无论是全量备份还是 Binlog,都不要和数据库存放在同一个服务器上。最好能做到不同机房,甚至不同城市,离得越远越好。这样即使出现机房着火、光缆被挖断甚至地震也不怕。


标签:数据恢复,Binlog,备份,insert,数据备份,stu,全量,mysql,into
From: https://blog.51cto.com/u_13540373/5949513

相关文章

  • MySQL字符集
    查看字符集showcharsetlike'utf8%';每种字符集有多种比较规则,有默认的比较规则。utf8:一个字符最多占用3个字节,默认比较规则是utf8_general_ci。utf8mb4:一个字符最多......
  • mysql explain 查看sql语句执行计划概述
    mysqlexplain查看sql语句执行计划概述  id:选择标识符select_type:表示查询的类型。table:输出结果集的表partitions:匹配的分区type:表示表的连接类型possible_ke......
  • 使用SELECT ... INTO OUTFILE导出mysql数据
    select...intooutfile语法是mysql提供的一种数据导出的方案,支持自定义导出数据格式。例如:将test表的所有数据全部导出到test.txt文件。select*fromtestintooutfi......
  • 【MySQL】自动优化查询SQL语句
    一、参考资料​​XiaoMi/soar优化工具-web版本(mac)-简书​​​​​​​​​​ ​​GitHub-xiyangxixian/soar-web:AwebUIwithsoar​​​​EverSQL|AutomaticSQL......
  • 【MySQL】MySQL性能优化与查询优化
    一、参考资料​​MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!_哔哩哔哩_bilibili​​​​《面试笔记》——MySQL终结篇(30问与答)​​​​最全MySQL优化方法,从此优化不......
  • (七) Mysql 之 binlog redolog 二阶段提交
    (一)背景知识:1binlogbinlog我们中文一般称作归档日志, 是MySQLServer层的日志,而不是存储引擎自带的日志,它记录了所有的DDL和DML(不包含数据查询语句)语句,而且是以......
  • Oracle Mysql论坛上线3周(2009-09-30) 网站技术统计
    OracleMysql论坛上线3周(2009-09-30)网站技术统计 网站技术统计 论坛会员统计 论坛发回帖统计 论坛流量统计 上周在csdn上推出了国庆的timesten系列的消息和公众班的......
  • 写了一个mysql导数据程序
    最近在做容器化改造,需要把原来操作系统上的mysql数据导入到容器里mysql数据库里面,所以写了一个多线程导数据程序。使用前先创建目标数据库表结构,然后添加数据源,添加主任务,启......
  • mysql如何设置外网访问?
    限制授权网络访问,由系统数据库mysql表user决定,user表中的host字段内容决定;user表中的记录对应各用户的访问情况,host字段之可以为:%代表任意的主机都可以连接到mysql服务器,......
  • Mysql主从复制详解
    目的:主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器。在主从服务器上分开处理用户的请求,可获得更短的响应时间。用从......