作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验擅长主流数据Oracle、MySQL、PG 运维开发,
备份恢复,安装迁移,性能优化、故障应急处理等。

文章目录

  • 前言
    • 一、设计场景
    • 二、技术点
    • 三、服务器信息
    • 四、准备工作
    • 4.1 开启binlog日志功能
    • 4.2 新建目录,执行
    • 4.3 修改所属的用户/组:(不修改,mysql无法重启)
    • 4.4 修改mysql配置文件,执行
    • 4.5 重启mysql,执行
    • 五、编写全量备份脚本(Mysql-FullyBak.sh)
    • 六、编写增量备份脚本
    • 七、设置定时任务crontab
    • 八、恢复操作

前言

近期项目马上要交付了,结果数据库别黑客恶意攻击,项目马上要交付了,面临违约,幸好有备份,项目顺利交付,本文将MySQL备份的方法做了详细阐述


黑客被攻击发送的短信

一、设计场景

1)增量备份在周一到周六凌晨3点,复制mysql-bin.00000*到指定目录;
2)全量备份则使用mysqldump将整个数据库导出,
每周日凌晨3点执行,并会删除上周留下的mysq-bin.00000*,然后对mysql的备份操作会保留在bak.log文件中。

二、技术点

Mysqldump、mysqlbinlog、crontab

三、服务器信息

主机:centos7;数据库:mysql5.7

四、准备工作

4.1 开启binlog日志功能

binlog日志默认不开启,记录的是mysql数据库dml的操作

mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+

4.2 新建目录,执行

which mysql
#mkdir /home/mysql
#cd /home/mysql
#mkdir mysql-bin    #增量日志文件目录

4.3 修改所属的用户/组:(不修改,mysql无法重启)

#chown -R mysql.mysql mysql-bin

4.4 修改mysql配置文件,执行

#vim /etc/my.cnf
其中,server-id表示单个结点的id,这里由于只有一个结点,
所以可以把id随机指定为一个数,这里将id设置成1。
若集群中有多个结点,则id不能相同(对于5.7以下版本不需要指定server-id);
log_bin指定binlog日志文件的存储路径,日志文件以mysql-bin开头。
加入以下内容:
server-id=1
log_bin=/home/mysql/mysql-bin/mysql-bin

4.5 重启mysql,执行

#service mysqld restart    --root用户执行

(5)查看日志文件

#cd /home/mysql/mysql-bin
[root@Jeames mysql-bin]# ll
total 8
-rw-r----- 1 mysql oinstall 154 Jan 14 05:45 mysql-bin.000001
-rw-r----- 1 mysql oinstall  39 Jan 14 05:45 mysql-bin.index
(6)进入数据库,查看启动效果
#mysql -uroot -p
#show variables like '%log_bin%';
+---------------------------------+---------------------------------------+
| Variable_name                   | Value                                 |
+---------------------------------+---------------------------------------+
| log_bin                         | ON                                    |
| log_bin_basename                | /home/mysql/mysql-bin/mysql-bin       |
| log_bin_index                   | /home/mysql/mysql-bin/mysql-bin.index |
| log_bin_trust_function_creators | OFF                                   |
| log_bin_use_v1_row_events       | OFF                                   |
| sql_log_bin                     | ON                                    |
+---------------------------------+---------------------------------------+

五、编写全量备份脚本(Mysql-FullyBak.sh)

 进入/home/mysql目录
新建目录:mkdir backup
进入backup目录,新建daily目录:mkdir daily
切换到/home/mysql目录,执行
#vim Mysql-FullyBak.sh      --脚本中注意日期中+前面的空格及单引号
--------------------------------------------------------
#mysqldump to Fully backup mysql data per week!
source /etc/profile
BakDir=/home/mysql/backup
LogFile=/home/mysql/backup/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
/usr/bin/mysqldump -uroot -proot --quick --events --databases wmp --flush-logs \
--delete-master-logs --single-transaction >$DumpFile
/bin/tar -zvcf $GZDumpFile $DumpFile
/bin/rm $DumpFile
oldDate=`date -d '7 days ago' +%Y%m%d`
oldBakFile=${oldDate}".sql.tgz"
/bin/rm $oldBakFile
Last=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile
cd $BakDir/daily
/bin/rm -f *参数说明:
–flush-logs
结束当前日志,生成新日志文件。
–delete-master-logs
清除以前的日志,以释放空间。
–quick
该选项在导出大表时很有用,它强制 MySQLdump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
–single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
–events
导出事件
–master-data=2
其中参数–master-data=[0|1|2]
0: 不记录
1:记录为CHANGE MASTER语句
2:记录为注释的CHANGE MASTER语句
–master-data=2 选项将会在输出SQL中记录下完全备份后新日志文件的名称,
用于日后恢复时参考,例如输出的备份SQL文件中含有:
CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;

六、编写增量备份脚本

切换到/home/mysql目录,执行:
#vim Mysql-DailyBak.sh
-------------------------------------------
#use cp to bakup mysql data everyday!
source /etc/profile
BakDir=/home/mysql/backup/daily
BinDir=/home/mysql/mysql-bin
LogFile=/home/mysql/backup/bak.log
BinFile=/home/mysql/mysql-bin/mysql-bin.index
/usr/bin/mysqladmin -uroot -proot flush-logs
Counter=`wc -l $BinFile |awk '{print $1}'`   #产生新的mysql-bin.00000*文件
NextNum=0
#比对$Counter和¥NextNum这两个值来确定文件是不是最新的
for file in `cat $BinFile`
dobase=`basename $file`#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [[ $NextNum -eq $Counter ]]thenecho $base skip! >> $LogFileelsedest=$BakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去thenecho $base exist! >> $LogFileelsecp $BinDir/$base $BakDirecho $base copying >> $LogFilefi
fi
donechmod a+x test.sh  --给所有用户执行test.sh读写的权限

七、设置定时任务crontab

在命令行输入:
#crontab -e
添加相应的任务,wq存盘退出
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /bin/bash -x /home/mysql/Mysql-FullyBak.sh >/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /bin/bash -x /home/mysql/Mysql-DailyBak.sh >/dev/null 2>&1
(2)查看定时任务:#crontab -l参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 ;crontab -l //列出某个用户cron服务的详细内容;crontab -r //删除所有用户的cron服务;crontab -e //编辑某个用户的cron服务;例如:root查看自己的cron设置:crontab -u root -l例如:root删除用户fred的cron设置:crontab -u fred -r
补充:
(1)可直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务(针对整个系统的crontab文件);
(2)crontab执行定时任务的记录会写入到/var/log/cron这个文件中,该记录以帐号为区分。

八、恢复操作

恢复过程亦会写入日志文件,如果数据量很大,建议先关闭binlog日志功能
1、场景:假设早上9点的时候,数据库被攻击,drop了整个数据库!
2、恢复思路:
利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,
找出binlog文件中增量的那部分。
用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。
通过全备文件和增量binlog文件导出的sql文件,就可以恢复到完整的数据。恢复步骤:
(1)首先,解压最新的全量备份文件,进入备份文件目录,执行
#cd /home/mysql/backup
#tar -zxvf XXX.sql.tgz
(2)查看全备之后新增的binlog文件,执行
#grep CHANGE XXX.sql        --全备文件
即mysql-bin.000027的154行,因此在该文件之前的binlog文件中的数据都已经包含在这个全备的sql文件中。
(3)将其他binlog文件(除去mysql-bin.000027)导出sql文件,执行
#mysqlbinlog mysql-bin.00000X >00Xbin.sql
(4) vim编辑最新的00Xbin.sql删除其中的drop语句
(5)恢复全备数据,执行:
#mysql -uroot -p < XXX.sql
如:#mysql -uroot -p < 20210115.sql(7)恢复增量数据,执行(wmp为数据库名称)
#mysql -uroot -p wpm<00Xbin.sql
如:#mysql -uroot -p wmp<000027bin.sql补充(若没删除,直接通过增量备份恢复)
若要恢复mysql-bin.000027文件的154行之后的信息
进入到mysql-bin.000027目录,执行(wmp为数据库名)
#cd daily
#mysqlbinlog --start-position=154 --database=wmp mysql-bin.000027 | mysql -uroot -p
至此数据库全部恢复完成

MySQL被黑客攻击勒索5000美元,幸好有备份相关推荐

  1. GitHub 遭黑客攻击勒索;苹果夸大 iPhone 电池续航时间;全球第二大暗网被摧毁 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  2. 游戏行业被黑客攻击勒索怎么办?

    许多小兄第都在问游戏职业服务器被进犯了怎么办?互联网职业里,尤其是游戏职业,对错常有必要运用高防IP的.相关于其他职业,游戏职业不仅要在游戏内容上有特色,在游戏的稳定性上的要求也是极高的,对服务器稳定 ...

  3. Easyfi遭受黑客攻击,被盗600万美元稳定币以及298万个EASY代币

    Easyfi.network创始人兼CEO Ankitt Gaur在推特上表示:4月19日,团队成员报告称,有大量EASY代币从EasyFi官方钱包大量转移到以太坊网络和Polygon网络上未知钱包. ...

  4. Linux系统安装Java和mysql并关联DBeaver,上传Springboot jar包,数据库如何防止黑客攻击

    Linux系统安装Java 安装版本jdk-8u171-linux-x64.tar.gz1,上传到linux的 root目录下 2,tar -zxvf jdk-8u171-linux-x64.tar. ...

  5. linux cna12.dll,攻击 MySQL 服务器传播 GandCrab 勒索软件

    研究人员在实验室环境中搭建了一个蜜罐系统,监听着 SQL 服务器使用的默认端口(TCP/3306 端口).该蜜罐系统发现来自美国机器的攻击.研究人员监控了僵尸网络生成的网络流量和行为,发现该 Linu ...

  6. 美国燃油管道商认怂,俄罗斯黑客收到500万美元赎金!,民众为抢汽油大打出手...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 震惊全美 ...

  7. 俄罗斯黑客收到500万美元赎金!美国燃油管道商认怂,民众为抢汽油大打出手...

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 震惊全美国的黑客入侵事件,有了新动向: 美国燃油管道商认怂!向黑客支付赎金. 黑客那边到账500万美元,油价这边应声大跌. 而除了事件中两位 ...

  8. 盘点世界十大著名黑客攻击事件

    相信很多像小编一样的80后,都听说过了蠕虫病毒,或者说熊猫烧香病毒,今天闲着没事,小编来跟大家盘点一下,世界典型大型黑客袭击事件. 一.勒索病毒事件 勒索病毒是一种源自美国国安局的一种计算机病毒.近百 ...

  9. 索要 2.3 亿元赎金!富士康遭遇黑客攻击

    出品 | CSDN(ID:CSDNnews) 今年的感恩节有点特殊,作为美国的邻居加拿大跟墨西哥双双遭遇了黑客攻击.一边是破坏城市交通网络,另一边则是瞄准了苹果最大的产品制造商--富士康. 据外媒 B ...

最新文章

  1. 在文档中制作自动图表目录的经验
  2. python到底可以做什么-Python究竟是什么?能干嘛?
  3. Java泛型的不变性和作用域
  4. java grizzly_Grizzly简介
  5. 如何正确地生成一个随机数
  6. ICCV2021多模态视频分析与推理比赛参赛邀请
  7. leetcode题库:6. Z字形变换
  8. mysql系统服务初始化_MySql服务初始化、安装、启动
  9. 通俗易懂!视觉slam第十一部分——线性系统和卡尔曼滤波
  10. 牛客小白月赛13 解题报告
  11. asp.net身份认证
  12. pdo mysql fedora_fedora编译安装php5.5
  13. Cisco 2960密码恢复
  14. WARNING: inbound connection timed out (ORA-3136)
  15. lingo 12的安装教程
  16. Pano2VR制作全景图缩略图导航
  17. 移动通信核心网络技术总结(三)EPC网络的结构及原理
  18. 基于Java毕业设计校园外卖零食商城系统源码+系统+mysql+lw文档+部署软件
  19. 101道算法javaScript描述【一】
  20. 80C51引脚功能及片内RAM、片内ROM简介

热门文章

  1. python怎么取共轭_python实现共轭梯度法
  2. 有关H5的第三章表单介绍
  3. 2022-03-清华管理学-清华大学-宁向东
  4. [渝粤教育] 西南科技大学 电子测量与仪表 在线考试复习资料
  5. postgreSQL数据库的监控及数据维护
  6. js 清除对象里的属性值为空的属性
  7. console的基础使用
  8. 华为设备接口视图_华为设备的交换机接口类型介绍及配置
  9. 北航2017级算法第一次上机---芸如的入学测试
  10. 转 localStorage