MySQL通过 bin-log 恢复从备份点到灾难点之间数据

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: MySQL通过 bin-log 恢复从备份点到灾难点之间数据

MySQL 数据库高于一切,是信息时代不可或缺的数据管理利器,为业务的成功和创新提供了坚实的基础。

普遍所使用的工具来备份mysql 但是都只能恢复备份之前数据

本期试验所使用的工具和文件:mysqldump+binlog 二进制文件

1.准备测试数据库

mysql> create database test;            创建库
Query OK, 1 row affected (0.00 sec)
 
mysql> create table t1(id int);        创建表
Query OK, 0 rows affected (0.01 sec)
 
mysql> insert into t1 values(1),(2);        写入数据
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from t1;        查看表
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

2.备份数据库

备份所有的数据库
[root@192 ~]# mysqldump -uroot -p" " --all-databases --single-transaction --master-data=2 --flush-logs > /backup/mysql-all.sql
   
-p'输入你的密码'
--all-databases
all所有数据库
 
--single-transaction
保证数据的可用性 就是指不关机的备份(备份的时候数据库还是正常使用的)
 
--master-data=2   
以注释的方式记录日志
参数有两个(1,2)2的话就是注释日志 日志里边都会加上#  1就是开启
二进制日志非常的重要 很强大 可以还原备份文件里没有备份上的数据(所以二进制日志一定要记录下来)
 
--flush-logs
切断日志 也就是日志轮转


观察备份细节

vim/backup/备份的sql文件
 
你会发现里边很多   LOCK TABLES `test` WRITE 
 
LOCK TABLES 是 MySQL 中的一个语句,用于锁定一个或多个表,
以确保在执行特定操作时其他会话不能修改这些表。在 mysqldump 中,默认情况下,
备份操作会使用 --lock-tables 选项,这会导致在备份的整个过程中锁定要备份的表
。WRITE 关键字表示写锁,即其他会话不能写入被锁定的表。
 
这个锁机制确保了备份的一致性,因为在备份期间,数据库表的状态保持不变。
但是,这也意味着在备份过程中,其他会话可能会被阻塞,直到备份完成。
这可能对具有高并发的生产环境造成一些影响。


3.(模拟备份点到灾难点的数据)

进入测试数据库
我进入test数据库 创建一个t2表
mysql> create table t2;
ERROR 1113 (42000): A table must have at least 1 column
mysql> create table t2(id int);
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into t2 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from t2;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)


4.恢复测试

1.拷贝所有二进制文件

[root@192 ~]# cp /var/lib/mysql/*bin* ~
[root@192 ~]# ls
192-bin.000001  192-bin.index    initial-setup-ks.cfg  模板  图片  下载  桌面
192-bin.000002  anaconda-ks.cfg  公共                  视频  文档  音乐

2.停止数据库

systemctl stop mysqld

3.清理环境(模拟丢失)

mysql> drop table t1;     删除表
Query OK, 0 rows affected (0.00 sec)
 
mysql> drop database test;      删除整个数据库test
Query OK, 1 row affected (0.00 sec)
mysql> show databases;    查看一下确实删掉了
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

4.还原备份前的数据

[root@192 ~]# mysql -uroot -p' ' < /backup/mysql-all.sql
查看test 中t1表   (数据都还原回来了)
mysql> select * from test.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)


做到这里我们使用mysqldump还原数据库已经成功!!!!但是仅仅还原的是备份前的所有数据

 

第3.(模拟备份点到灾难点的数据)这些数据如何恢复?

我们在备份之后在test数据库创建了一个t2的表 里边插入了 1 2 3三条数据

此刻我们查看test数据库
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)
因为备份之前test数据库中只有t1 表单

5.恢复第3(模拟的数据)

我们需要用到二进制文件来进行恢复

[root@192 ~]# mysqlbinlog 192-bin.000002 --start-position=154 | mysql -uroot -p" "
192-bin.000002
 
还原备份之后的二进制 有多少个二进制跟多少个二进制(只要是备份后的二进制都行) 
 --start-position=154
 开始还原 从154这一行开始
 | mysql -uroot -p" "
 还原的数据给mysql  -p后边跟上你的密码

6.测试查看

数据恢复成功
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
mysql> select * from t2;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.01 sec)


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
1731 91
|
6月前
|
数据采集 运维 监控
不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?
SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。
747 46
|
8月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
429 0
|
7月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
980 1
|
6月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
206 6
|
7月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
568 10
|
9月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
591 36
|
7月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
691 0
|
7月前
|
数据采集 运维 监控

推荐镜像

更多