位置: 编程技术 - 正文

MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复)(mysql数据损坏修复方法)

编辑:rootadmin

推荐整理分享MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复)(mysql数据损坏修复方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql数据库被删了怎么办,mysql数据库被攻击方式,mysql数据库遇到的故障及分析,mysql数据库被删了怎么办,mysql数据库遇到的故障及分析,mysql数据库崩了怎么恢复,mysql数据库崩了怎么恢复,mysql数据库崩了怎么恢复,内容如对您有帮助,希望把文章链接给更多的朋友!

本文主要描述了MySQL遭到攻击篡改数据,利用从库的备份和主库的binlog进行不完全恢复。

欢迎转载,请注明作者、出处。作者:张正QQ:如有疑问,欢迎联系。

一、发现问题今天是--,开发大清早就说昨晚数据库遭到了攻击。数据库中某文章表的文章内容字段遭到篡改,全部改成了同一篇文章。

通过查看日制 发现 数据是在 -- :: 遭到篡改。所有的内容全部被改成了如下:

二、解决方法

这个库我们是每天凌晨备份,保留天的备份。主库的binlog保留时间为7天。因此很容易想到的方法是将从库--凌晨的备份拿出来恢复,然后通过主库的binlog通过时间段来筛选出凌晨至-- ::的所有更改,之后的数据,经业务确认,可以舍弃掉。或者后面再通过其他方法慢慢将这部分数据找出来。但是当务之急,是立马恢复数据库。

三、找备份及时间点

在备份的从库上检查备份:crontab -l#0 3 * * * /data/opdir/mysqlbak/backup_mysqldump.sh >> /data/opdir/mysqlbak//mysql-bakup.log 2>&1发现备份任务让注释了

查看备份文件:[root@localhost ]# lltotal drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Aug : drwxr-xr-x 2 root root Sep 1 : drwxr-xr-x 2 root root Sep 2 : drwxr-xr-x 2 root root Sep 3 : drwxr-xr-x 2 root root Sep 4 : drwxr-xr-x 2 root root Sep 5 : drwxr-xr-x 2 root root Sep 6 : drwxr-xr-x 2 root root Sep 7 : drwxr-xr-x 2 root root Sep 8 : drwxr-xr-x 2 root root Sep 9 : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : drwxr-xr-x 2 root root Sep : -rw-r--r-- 1 root root Sep : mysql-bakup.log

备份只到日,下午:分。

备份日志最后一段截取: tail -n 5 mysql-bakup.log

deleting backup of days ago -- -- :: begin backup ... deleted OK-- :: end backup ...

因为这些表是在从库备份的,而且表都是MyiSAM的表。查看备份脚本,是先stop slave之后,才开始备份,因此从备份脚本输出的日志中找到备份开始的时间是:-- ::通过:drwxr-xr-x 2 root root Sep : 可看到结束时间是:-- ::

现在考虑到底是以备份开始的时间:-- :: 为start-datetime还是以-- :: 为start-datetime。前面 提到备份脚本是从库进行备份的,是在-- ::开始的,在这个时刻备份开始,执行了stop slave;因此整个备份的状态反映的是从库-- :: 这个时间的状态。而且通过监控可以看到在这个时间点,从库的延迟为0,因此可以认为这个备份就是 主库在这个时间的备份。NOTES:(有人可能会因为从库上有binlog,从库也会接受主库的binlog之类的机制而造成混淆。这里要结合我们具体的备份方式和恢复方式来看,以选出正确的时间点。)

MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复)(mysql数据损坏修复方法)

前面提到通过日志查到遭到篡改的时间为:-- ::,因此可以将-- ::作为stop-datetime

因此binlog命令应该是这样:mysqlbinlog --database=[db_name] --start-datetime='-- ::' --stop-datetime='-- ::' [binlog_name] > binlog_namex.sql

四、具体的恢复操作

清楚了这些,具体的操作就简单了:

1.从备份机拷贝备份:scp <备份机IP>:/data/mysqlbak//.db_name.gz <恢复测试机IP>:/data/opdir/

2.恢复测试机 解压:gunzip .db_name.gz

3.恢复测试机导入(测试恢复库中之前没有db_name这个库):mysql -uroot -pxxxxxx -S /tmp/mysql.sock < .db_name

4.将主库的binlog拷贝到恢复测试机:查看主库binlog-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.

我们需要的binlog时间段为:-- :: 至 -- ::因此只需要:-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.-rw-rw---- 1 mysql mysql Sep : mysql-bin.将这3个binlog copy过去:scp mysql-bin. <恢复测试机IP>:/data/opdir/scp mysql-bin. <恢复测试机IP>:/data/opdir/scp mysql-bin. <恢复测试机IP>:/data/opdir/

5.使用mysqlbinlog 生成sql脚本:mysqlbinlog --database=[db_name] --start-datetime='-- ::' --stop-datetime='-- ::' mysql-bin. > .sqlmysqlbinlog --database=[db_name] --start-datetime='-- ::' --stop-datetime='-- ::' mysql-bin. > .sqlmysqlbinlog --database=[db_name] --start-datetime='-- ::' --stop-datetime='-- ::' mysql-bin. > sql

6.binlog生成的sql脚本导入:待.db_name导入到恢复测试库之后,将mysqlbinlog生成的sql脚本导入到数据库中:mysql -uroot -pxxxxxx -S /tmp/mysql.sock db_name < .sqlmysql -uroot -pxxxxxx -S /tmp/mysql.sock db_name < .sqlmysql -uroot -pxxxxxx -S /tmp/mysql.sock db_name < .sql

7.导入完成后检查数据正确性:大致看一下数据的情况,然后可以通过时间字段来看一下情况:mysql> select max(createtime),max(updatetime) from table_name;+-----------------+-----------------+| max(createtime) | max(updatetime) |+-----------------+-----------------+| | |+-----------------+-----------------+1 row in set (0. sec)

时间差不多为 晚上:了这个判断,作为DBA,查看部分数据,只能起到辅助作用,具体的需要 到底是否OK,需要业务开发的人来判断。经过业务开发确认后,即可将该数据导出后,再导入到线上主库中。

8、将该库导出,并压缩:mysqldump -uroot -pxxxxxx -S /tmp/mysql.sock -q db_name table_name > table_name.sql 压缩:gzip table_name.sqlscp 到主库 (复制的时候,请将网络因素考虑进去,确认不会占用过多带宽而影响其他线上业务)

9.恢复测试的数据导入到线上主库中:线上主库操作:操作之前,最好让开发把应用业务那段先暂停,否则可能会影响导入。比如这个表示MyISAM的,应用那边如果不听有update进来,就会阻塞数据导入。a、主库将原始被篡改的表改名:(不要上来就drop,先rename,后续确认没问题了再考虑drop,因为很多问题不是一瞬间就能全部反映上来的)rename table_name to old_table_name;b、解压:gunzip table_name.sql.gzc、导入新表数据:mysql -uroot -pxxxxxx -S /tmp/mysql.sock db_name < table_name.sql

后面就需要开发来进一步验证数据是否 OK 了。 验证没问题后,再启动应用程序。

IPv6设置后如何解决MySQL无法连接localhost的问题 使用phpmyadmin或者navicat链接数据库时提示【客户端软件无法连接localhost】经检查发现是IPV6地址监听了端口,而客户端软件不支持IPV6。新开的系统或者

mysql 加了 skip-name-resolve不能链接数据库问题的解决方法 mysql加了skip-name-resolve不能链接的问题,要确认MySql是否采用过主机名的授权在MySqlServer的配置文件My.ini中,增加如下两行:[mysqld]skip-name-resolve它将禁止My

MYSQL日志的正确删除方法详解 本文详细讲述了MYSQL日志的正确删除方法。分享给大家供大家参考,具体如下:1.查找:MySQLshowbinarylogs;+—————-+———?+|Log_name|File_size|+—————

标签: mysql数据损坏修复方法

本文链接地址:https://www.jiuchutong.com/biancheng/321316.html 转载请保留说明!

上一篇:percona 实用工具之pt-kill使用介绍(persona工具)

下一篇:IPv6设置后如何解决MySQL无法连接localhost的问题(ipv6的设置)

  • 个人所得税中社保填写在哪昆山
  • 个体户季报网上怎么报税
  • 房屋出租收到的租金会计分录
  • 管理费用怎么结转成本
  • 没有销售是什么意思
  • 外地预缴的增值税要在本地计算附加税吗?
  • 增值税一般纳税人证明文件
  • 救护车能随便买吗
  • 企业合并相关舞弊风险有哪些
  • 申报个人所得税的详细流程
  • 城建税免征怎么记账
  • 增值税减免明细表怎么填
  • 发票抵扣联什么时候用
  • 工会经费的缴费主体
  • 金融行业小规模纳税人税率
  • 已交税金是什么科目
  • 商业承兑汇票贴现为什么是短期借款
  • 少收的货款怎么入账
  • 帮客户采购会计分录
  • 发票上不小心印上作废两个字怎么办
  • 小型微利企业普惠性减税政策
  • 外国企业代表处企业所得税
  • 计提本月城市维护建设税,教育费附加500元
  • 财务报表包括哪几个表
  • 电子承兑到期怎样接收
  • 固定资产丢失进项税需要转出吗
  • 进项票少了怎么办
  • PHP:oci_new_collection()的用法_Oracle函数
  • wamp搭建网站教程
  • 冲销以前年度多计提的工资资产负债表怎么平
  • koc文件用什么软件打开
  • win7系统打印机在哪里
  • 企业会计核算利润表
  • codelite怎么进行编译
  • 营改增后小规模纳税人标准
  • php curl_multi_init
  • ai绘画图片
  • vue中的icon
  • linux rc.d init.d
  • 笨办法学python 3电子书下载
  • 个体工商户可以给自己交社保吗
  • 创立教育培训机构之前的准备工作
  • 租房没有合同编号可以提取公积金吗
  • 瓶盖再来一次表情包
  • 终止经营列报的相关表述
  • mysql 表不存在报错信息
  • 费用什么情况下要写报销单呢
  • 摊余成本通俗易懂
  • 纳税对象的类型不包括
  • 账面价值低于可抵税收
  • 公司转账转错账户
  • 为什么其他权益工具投资处置价差计留存收益
  • 利润是用含税价还是去税价
  • 新注册的公司在企查查上查不到
  • 以前年度损益调整账务处理分录
  • 工伤误工费标准是按照社平工资来算的吗
  • 其他应付款社保借方余额怎么处理
  • 公司账户可以转账到信用卡吗
  • 合法有效的凭证是什么
  • sqlserver 获取字符位置
  • Sql Server datetime问题
  • sqlserver中时间类型
  • windows98的开始菜单包括了
  • 通过注册表删除脱机打印机
  • win8怎么设置定时关机
  • magento开发教程
  • win10超级按钮
  • win7如何查看电脑主板型号
  • exception继承
  • cocos2dx 不规则按钮的实现
  • jquery二级导航栏
  • 各类扩展名
  • javascript获取数据类型
  • python爬虫代码怎么写
  • javascript基础笔记
  • 沈阳市税务局最新公告
  • 地税注销流程
  • 广州2021社保费
  • 辽宁地税电子税票查询
  • steam充值码生成
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设