mysqldump基于时间点进行备份恢复操作

1.事前准备

  • linux环境(我是宝塔集成环境)
  • mysql的root账号一枚
  • 开启mysqlbin-log日志
  • 找到mysqlbinlog命令完整路径(系统默认mysqlbinlog命令最好不要使用)
  • 找到mysql二进制文件位置,find / -name mysql-bin*
  • 数据库附件一份,https://download.csdn.net/download/wash2017/11663105

2.进实操

cd /data/
#备份数据库(全备)
mysqldump -u root -p --master-data=2 --single-transaction --routines --triggers --events mc_orderdb > mc_orderdb.sql

#模拟在生产环境中进行数据操作
#连接mysql
mysql -u root -p 
mysql>use mc_orderdb

###必须加上,否在在进行最后一步数据恢复的时候会报错Table 't' already exists,因为根据日志文件恢复时,运行到创建t表的sql语句时,由于已经存在t表,所以失败。
mysql>DROP TABLE IF EXISTS `t`; 

#创建临时测试数据表
mysql> create table t(id int auto_increment not null,uid int ,cnt decimal(8,2),primary key (id));

#存储测试数据,代码直接复制粘贴即可,这里快速过
mysql>insert into t(uid,cnt) select customer_id,sum(order_money) from order_master group by customer_id;

#目前有6314条数据
mysql>select count(*) from t;

#删除部分数据 目前有6214条数据
mysql>delete from t limit 100;


#恢复最近的备份数据
mysql -u root -p mc_orderdb < mc_orderdb.sql

#查看备份文件时二进制文件名(mysql-bin.000025)和时间点(11099532)
more mc_orderdb.sql
#找到-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000025', MASTER_LOG_POS=11099532;
#恢复这个时间点之后到删除之前的那一部分数据(每个人这里数据都不一样,注意)

#找到数据库二进制文件进行分析(如果不知道二进制文件位置,find / -name mysql-bin*)
cd  /www/server/data/
ls -lh
#可以看到最后一个mysql-bin日志

#使用mysqlbinlog命令 可以看到最后一次删除操作以及时间节点,我们要恢复到这个节点之前
/www/server/mysql/bin/mysqlbinlog --base64-output=decode-rows -vv --start-position=11099532 --database=mc_orderdb mysql-bin.000025 | grep -B3 DELETE | more

#使用mysqlbinlog 命令恢复 5610753到5697129 两个时间节点之间的日志 > mc_order_diff.sql文件
/www/server/mysql/bin/mysqlbinlog --start-position=11099532 --stop-position=11185754 --database=mc_orderdb  mysql-bin.000025 > mc_order_diff.sql
#恢复至数据库
mysql -u root -p mc_orderdb < mc_order_diff.sql

#这个时候
再去看看数据表t有多少条数据,目前本人测试已完成,有问题私我

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值