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生成异常_mysql binlog故障演练相关推荐

  1. mysql binlog过期策略_MySQL binlog日志优化方案

    Binlog 相关参数及优化策略 我们首先看看Binlog 的相关参数,通过执行如下命令可以获得关于Binlog 的相关参数.当然,其中也显示出了" innodb_locks_unsafe_ ...

  2. mysql data目录 清空_Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~...

    导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 介绍 记 ...

  3. mysql dml回滚_mysql binlog回滚/闪回,前滚, 分析各表DML情况, 找出长事务与大事务...

    简介 binlog_inspector通过解释mysql/mariadb binlog/relaylog实现以下三大功能: 1)flashback/闪回/回滚, 实现DML的回滚到任意时间或者位置. ...

  4. mysql开启row模式_MySQL Binlog Mixed模式记录成Row格式

    binlog format有三种形式:Statement.Mixed.Row,具体的信息可以自行到网上搜查. 分析(本文碰到的案例): 查看MySQL binlog formatdba@192.168 ...

  5. mysql log bin 分析_MySQL bin-log分析方法

    Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Date:September9th, 2014 Explain      前段时间,游戏服务器停服 ...

  6. mysql 主从 网络异常_mysql主从常见异常问题解决

    1.问题一:主从复制,中继日志不断增长,如何设置中继日志自动清除 vi 配置文件my.cnf,在mysqld下增添 relay_log_purge=1 (自动清除中继日志打开) 重启mysql,这样S ...

  7. mysql 存储过程 生成数据_mysql使用存储过程,批量生成测试数据

    1.存储过程代码 delimiter $$ DROP PROCEDURE IF EXISTS create_service_data$$ create procedure create_service ...

  8. mysql 批量生成测试数据_mysql生成批量数据进行数据测试

    1.1目的 在MySQL很多测试场景,需要人工生成一些测试数据来测试.本文提供一个构造MySQL大表存储过程,可以生成包含用户名,手机号码,出生日期等字段.也可以通过滤重来使得手机号码不重复,模拟现实 ...

  9. mysql io线程异常_mysql主从同步IO线程NO

    主从同步错误一例 mysql> show slavestatus\G; ***************************1. row *************************** ...

最新文章

  1. swift3.0阿里百川反馈
  2. DL框架之TensorFlow:深度学习框架TensorFlow Core(低级别TensorFlow API)的简介、安装、使用方法之详细攻略
  3. arraylist扩容是创建新数组吗 java_Java 集合,你肯定也会被问到这些
  4. MacOS下SVN的使用
  5. 判断进程是否正在运行
  6. 读c语言深度剖析 -- 宏定义(2)
  7. python中unicode编码的url如何正确解码
  8. discuz自定义接口开发——一键发帖,自动发帖,站外发帖(主题)
  9. mono linux 编译,Linux服务器编译安装Mono笔记
  10. 苹果手机相机九宫格怎么设置_用苹果手机拍照,这3个媲美单反的设置不会用,就别说自己用苹果...
  11. 第一次开发EOS区块链的经验总结
  12. 伦敦 quant_伦敦统一用户组(LUUG)见面v1.0
  13. 【OSX】MAC下能用的炒股软件
  14. 使用原型骨架创建Maven项目时遇到Could not transfer metadata org.apache.maven.plugins的解决方案
  15. 35岁程序员该何去何从
  16. 《心智社会》—马文·明斯基
  17. 主页(一)01-搜索栏-顶部搜索栏布局
  18. CISA国际信息系统审计师
  19. ExoPlayer的缓存 三 SimpleCache的使用
  20. 500万像时代 10款热门拍照手机导购

热门文章

  1. java动态删除map元素报错_java map使用迭代器遍历时执行删除元素报空指针异常
  2. 及时复盘的好处_复盘,组织和个人提升的一种特效工具
  3. zynq的emio和axi_【ZYNQ7000学习之旅 - 01】EMIO练习
  4. 500个爆文标题_美食爆文大放送 | 烹饪技巧从细节着手,夏日消暑美食最为应时...
  5. qt怎么设置标签背景图片_HTML中怎么设置h1的字体样式你知道吗?关于设置h1标签的样式详解...
  6. java获取mysql数据定时执行_mysql 事件处理(定时触发某个任务或存储过程等)
  7. 使用Nacos搭建微服务注册中心和配置中心(一)
  8. 借助neo4j-admin导入csv文件构建实体与联系
  9. python计算求导后的函数式与赋值计算
  10. Markdown 添加emoji