百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 伤心的故事,当不当心删了线上的数据库
分享文章到:

伤心的故事,当不当心删了线上的数据库

发布时间:09/01 来源:未知 浏览: 关键词:

相关学习引荐:mysql教程

前言

  由于比来开学季,我司又做的是高校相关的业务,所以比力忙,都没有什么时间来写文章,人一旦太忙的话就容易忙中出错。我呢就在前几天,不是,是我有个伴侣在前几天去操纵线上的数据库时,差点演出了一波删库跑路。

  提早说明:真的是我伴侣,不是我。真的是我伴侣,不是我。真的是我伴侣,不是我。不外为了叙事利便,以下把“我伴侣”简称为“我”。

  事情是这样的,我在对照部分表构造时发明这个库和其他库的表构造差的比力多,所以认为这个环境是没有在使用的环境,就直接对这几张表停止了一个覆盖操纵,恰好这几张表还是和学生钱包相关的,然后到晚上10点多公司的前方驻校人员在群里反应说是为什么钱包里钱变成0.0了,我一看到这个就直接吓尿了,想着是不是该跑路了。

  不外幸亏看过一些数据库复原的方案,还是略知一二。

数据复原

1.开启binlog日志

我使用的binlog日志来复原数据,要用binlog必定第一得确保binlog日志是开启状态的,可以用命令来查看。

show variables like 'log_%';复制代码

可以看到它是ON状态的,表示已开启,假如它是OFF状态的话,在my.cnf中[mysqld]后增加配置后重新启动mysql效劳来开启。

# my.cnf文件
[mysqld]
log-bin=mysql-bin
server-id=1复制代码

2.查看binlog日志

确保开启binlog日之后,可以通过命令来查看binlog日志状态。

# 查看binlog日志的名目show master status;复制代码
# 查看binlog日志内容show binlog events IN 'mysql-bin.000002';复制代码
  • Log_name 表示binlog日志名称
  • Pos 表示pos起始点
  • Event_type 表示此次操纵的类型
  • Server_id 表示机器id,由my.cnf中配置指定
  • End_log_pos 表示pos完毕点
  • Info 表示详细语句
# 进入储备binlog日志的文件木了,可以通过这条命令查看详情
 mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002;复制代码
# 将binlog日志转为txt输出
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002 > sql.txt复制代码

3.复原数据

binlog日志复原数据的话,常用的有命令行复原,或者是把binlog日志拷贝出来,用读取binlog的工具来转成.sql文件,然后把里面的需要用到的sql都复制出来然后再跑一遍,这里主要讲的是命令行复原的办法。

命令行复原主如果通过排查binlog日志,确定要复原的起始点和完毕点后,输入命令停止复原。或者是预估一下本人误操纵失误的时间,通过一个时间段来复原数据。

# 通过起始点和完毕点复原    
mysqlbinlog --start-position="582" --stop-position="9414" mysql-bin.000002 | mysql -uroot -proot;复制代码
# 通过起始时间和完毕时间来复原,传入的时间可以是一个yyyy-MM-dd HH:mm:ss 的时间格局,也可以是一个时间戳
mysqlbinlog --start-datetime="2020-9-1 8:25:04" --stop-datetime="2020-9-1 20:00:00" mysql-bin.000002 | mysql -uroot -proot复制代码

可以看到,在输入复原命令后,我清空的数据库数据又回来了。

4.问题

binlog日志虽然可以复原数据,但是也存在问题,当binlog日志在不竭增大后,会停止主动删除,那就致使已经删除的那部分日志的数据就复原不了了。

不外binlog日志的大小和留存时间都是在可以在mysql中停止设定的。不外还是引荐做好每日的备份,这样可保十拿九稳。

# 设定文件大小,单位是字节,下面换算是100Mset global max_binlog_size=104857600;

# 设定文件留存天数,下面是留存7天,默许值为0,表示"没有主动删除"set global expire_logs_days = 7;复制代码

每日备份

关于线上环境来说,做好每日备份和binlog一起用才是王道。线上一样都是摆设在linux上的,所以这里就简便列一下linux的按时备份办法。

1.检查可否安置按时任务,安置crontab

yum install crontabs复制代码

2.设定按时任务

/var/spool/cron/root 此文件为crontab按时任务,可通过crontab -e或者直接修改此文件修改.

crontab -l查看按时任务.

3.创立一个shell足本

touch xxx.sh

mysqldump -uroot -p"密码" 数据库名 > /mysql/person_`date +%Y%m%d`.sql复制代码

4.修改文件权限

chmod 777 xxx.sh

5.翻开按时任务文件

crontab -e

每天凌晨2点施行
00 2 * * * /xxx.sh复制代码

结束!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板