mysql备份恢复

mysqldump备份

企业故障恢复案例:
正在运行的网站系统 mysql数据库 数据量25G,日业务量10-15M
备份策略:
每天晚上23点通过计划任务调用mysqldump执行全备脚本 故障时间点:
周四上午 开发误删除了一个表,如何恢复? 思路:
1. 停业务避免数据二次伤害
2. 找一个临时库,恢复周三23.00 全备
3. 截取 周三 23.00 ---> 周四10点 误删除之间的binlog,恢复到临时数据库
4. 测试可用性和完整性
5.
5.1 方法1: 直接用临时卡顶替原有生产库,前端应用割接到新库
5.2 方法2: 将误删除的表导出,导入到原生产库
6. 开启业务

故障演练:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 2070 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec) mysql> flush logs;
Query OK, 0 rows affected (0.01 sec) #创建一个新库
mysql> create table backup.full select * from world.city;
Query OK, 4079 rows affected (0.04 sec)
Records: 4079 Duplicates: 0 Warnings: 0 #这个直接取了 实验文件 wolrd 的数据到新库。 现在有数据了。 mysql> create table backup.full_1 select * from mysql.user;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0 验证数据是否有了:
mysql> use backup
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+------------------+
| Tables_in_backup |
+------------------+
| full |
| full_1 |
+------------------+
2 rows in set (0.00 sec) #可以看到有两个数据表了。 现在做一次全备。 ## 周三全备:
[root@localhost ~]# mkdir /backup -p
[root@localhost ~]# cd /backup
[root@localhost ~]# mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction|gzip >/backup/full_$(date +%F).sql.gz
[root@localhost ~]# ll -h /backup/
total 328K
-rw-r--r-- 1 root root 328K Oct 12 21:25 full_2020-10-12.sql.gz ## 模拟23:00到周四数据丢失的变化【属于正常修改】
现在在创建一点数据
mysql> create table backup.thur select * from world.country;
Query OK, 239 rows affected (0.01 sec)
Records: 239 Duplicates: 0 Warnings: 0 通过查询可以看到:
select * from backup.full;
4079 rows in set (0.01 sec) 有439行数据。 模拟删除修改数据:
mysql> use backup;
mysql> update full set countrycode='CHN'; #模拟不小心把所有地区都改为了CHN
mysql> commit;
Query OK, 0 rows affected (0.00 sec) #并执行了提交 mysql> delete from full where id>200; #大部分数据都删除了 只保留了200行
Query OK, 3879 rows affected (0.02 sec) mysql> commit; #并执行了提交
Query OK, 0 rows affected (0.00 sec) ### 模拟故障,删除了一个表 【属于异常修改】
mysql> show tables;
+------------------+
| Tables_in_backup |
+------------------+
| full |
| full_1 |
| thur |
+------------------+
3 rows in set (0.00 sec) mysql> drop table thur; #<------------ 删除表
Query OK, 0 rows affected (0.00 sec) mysql> show tables; #现有表
+------------------+
| Tables_in_backup |
+------------------+
| full |
| full_1 |
+------------------+
2 rows in set (0.00 sec) ----------------------------------------------- ----------------------------------------------- 恢复过程:
1. 关闭原有数据库 2. 启动一个新数据库 3. 解压备份数据
[root@localhost backup]# gzip -d full_2020-10-12.sql.gz
[root@localhost backup]# ll
total 1104
-rw-r--r-- 1 root root 1126759 Oct 12 21:25 full_2020-10-12.sql 4. 截取二进制日志:
去备份的sql中找
[root@localhost backup]# vim full_2020-10-12.sql
在这里明显可以看到备份的那个binlog日志和起始位置:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=120; #备份文件中的起始位置 mysqlbinlog --start-position=120 --stop-position=[待查找] /data/mysql/mysql-bin.000008 5. 获取binlog日志最后一次正常操作的binlog。
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 399383 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec) 找出删除时间点的 position号:
| mysql-bin.000008 | 399262 | Query | 1 | 399383 | use `backup`; DROP TABLE ...
找到开始位置 399262 [这是删除这个表之前的位置。] 将命令的结尾改成下面这样,然后执行:
[root@localhost backup]# mysqlbinlog --start-position=120 --stop-position=399262 /data/mysql/mysql-bin.000008 >/backup/inc.sql 6. 截取数据完毕后,开始恢复数据:
先去一台临时mysql服务器恢复数据,检查
root@localhost backup]# scp -r /backup/inc.sql root@10.0.0.61:/root 另一台数据库操作如下:
set sql_log_bin=0;
source /root/full_2020-10-12.sql
source /root/inc.sql 检查数据:
MariaDB [world]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| backup |
| binlog |
| mysql |
| performance_schema |
| test |
| world |
+--------------------+
7 rows in set (0.00 sec) MariaDB [backup]> show tables; #船舰的表都在
+------------------+
| Tables_in_backup |
+------------------+
| full |
| full_1 |
| thur |
+------------------+
3 rows in set (0.00 sec) 恢复完毕。

mysql binlog故障演练的更多相关文章

  1. Slave_SQL_Running: No mysql同步故障解决方法

    Slave_SQL_Running: No mysql同步故障解决      今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:mysql> show slave s ...

  2. keepalive配置mysql自动故障转移

    keepalive配置mysql自动故障转移 原创 2016年02月29日 02:16:52 2640 本文先配置了一个双master环境,互为主从,然后通过Keepalive配置了一个虚拟IP,客户 ...

  3. MySQL Binlog 介绍

    Binlog 简介 MySQL中一般有以下几种日志: 日志类型 写入日志的信息 错误日志 记录在启动,运行或停止mysqld时遇到的问题 通用查询日志 记录建立的客户端连接和执行的语句 二进制日志 记 ...

  4. MySql Binlog 说明 & Canal 集成MySql的更新异常说明 & MySql Binlog 常用命令汇总

    文章来源于本人的印象笔记,如出现格式问题可访问该链接查看原文 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 目录 背景介绍 开启MySq ...

  5. MySQL binlog中的事件类型

    MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型. ...

  6. MySQL Binlog Mixed模式记录成Row格式

    背景: 一个简单的主从结构,主的binlog format是Mixed模式,在执行一条简单的导入语句时,通过mysqlbinlog导出发现记录的Binlog全部变成了Row的格式(明明设置的是Mixe ...

  7. MySQL binlog的格式解析

    我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...

  8. Mysql binlog

    理解Mysql binlog 日志的三种模式   本文介绍下,mysql中binlog日志的三种模式,了解了各种模式的不同之处,才能更好地应用.有需要的朋友建议参考下.   一,模式1 Row Lev ...

  9. [转]mysql binlog in realtime

    原文:http://guweigang.com/blog/2013/11/18/mysql-binlog-in-realtime/ 众所周知,MySQL是最受欢迎的互联网数据库(没有之一)—————— ...

  10. MySQL bin-log 日志清理方式

    MySQL bin-log 作用   1.数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失. 2.主从服务器之间同步数据:主 ...

随机推荐

  1. centos-stream-9 centos9 配置国内yum源 阿里云源

    源配置 tips: yum配置文件路径 /etc/yum.repos.d/centos.repo 1.备份源配置 [Very Important!] mv /etc/yum.repos.d/cento ...

  2. centos6.5下安装配置apache2.4.9

    centos6.5下安装配置apache2.4.9 摘要: 需要下载的包 apr-1.5.0.tar.gz apr-util-1.5.3.tar.gz pcre-8.33.tar.gz httpd-2 ...

  3. Excel 分组后计算

    分组后的计算都类似,仍然采用 groups 函数,分组并同时计算出各洲的 GDP 总量,然后再求一遍各洲的 GDP 总量占全球 GDP 的百分比值. SPL 代码如下:   A B 1 =clipbo ...

  4. 重学c#系列—— 简单编写一个guid [娱乐篇]

    前言 什么是guid? 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的 ...

  5. android虚拟机硬件加速问题

    前言 创建的android 虚拟机的如果我们选择x86,那么会出现需要硬件加速. 步骤 那么打开虚拟功能后可以进行安装,SDK Manager-> Extras->Intel Hardwa ...

  6. JavaScript中如何实现函数缓存?有哪些应用场景?

    一.是什么 函数缓存,就是将函数运算过的结果进行缓存 本质上就是用空间(缓存存储)换时间(计算过程) 常用于缓存数据计算结果和缓存对象 const add = (a,b) => a+b;cons ...

  7. verilog中端口定义方式以及如何使用变量

    一.module端口定义方式 目前有两种方式能够对module端口进行定义, 第一种是我目前使用比较多的,把I/O说明写在端口声明语句里,方式A: 1 module block( 2 input a, ...

  8. MySQL 深潜 - MDL 锁的实现与获取机制

    简介:本文将介绍在 MDL 系统中常用的数据结构及含义,然后从实现角度讨论 MDL 的获取机制与死锁检测,最后分享在实践中如何监控 MDL 状态. ​ 作者 | 泊歌 来源 | 阿里技术公众号 一 背 ...

  9. Spring Cloud Gateway 突发高危漏洞,下一代云原生网关恰逢其时?

    ​简介:Log4j2 的漏洞刚告一段落,Spring 官方在 2022 年 3 月 1 日发布了 Spring Cloud Gateway 的两个 CVE 漏洞:分别为 CVE-2022-22946( ...

  10. OpenKruise v0.10.0 新特性 WorkloadSpread 解读

    ​简介: 针对需求,OpenKruise 在 v0.10.0 版本中新增了 WorkloadSpread 特性.目前它支持配合 Deployment.ReplicaSet.CloneSet 这些 wo ...