>데이터 베이스 >MySQL 튜토리얼 >슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때

슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때

coldplay.xixi
coldplay.xixi앞으로
2020-09-12 17:59:013575검색

슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때

관련 학습 권장 사항: mysql tutorial

머리말

최근 개학 시즌부터 저희 회사는 대학 관련 사업을 하고 있어서 꽤 바쁘고 시간이 많지 않습니다. 일단 너무 바쁘면 기사를 쓰세요. 바쁘면 실수하기 쉽습니다. 저는 불과 며칠 전, 아니, 제 친구가 며칠 전 온라인 데이터베이스를 운영하던 중 데이터베이스를 삭제할 뻔하고 도망갈 뻔했습니다. ㅋㅋㅋ >                                                   . 사실은 내가 아니라 내 친구야. 사실은 내가 아니라 내 친구야. 다만, 이하에서는 서술의 편의를 위해 '내 친구'를 '나'로 표기하겠습니다.

 그런데, 몇몇 테이블 구조를 비교해보니 이 라이브러리와 다른 라이브러리의 테이블 구조가 상당히 다른 것을 발견하고 이 환경을 사용하지 않는 줄 알고 이 테이블을 직접 덮어썼습니다. 이 테이블은 우연히 학생 지갑과 관련이 있었고 저녁 10시쯤 회사 일선 직원이 지갑에 있는 돈이 왜 0.0이 되었는지 그룹에서 보고했습니다. . , 이제 도망칠 때가 되었는지 궁금했습니다. 슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때

다행히도 몇 가지 데이터베이스 복구 솔루션을 보았고 여전히 이에 대해 조금 알고 있습니다.

데이터 복구

1. binlog 로그를 켜세요슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때
binlog 로그를 사용하려면 먼저 binlog 로그가 켜져 있는지 확인해야 합니다.

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

ON 상태인 ​​것을 볼 수 있는데, OFF 상태라면 my.cnf에서

뒤에 구성을 추가하고 mysql 서비스를 재시작하면 됩니다. 그것을.
# my.cnf文件
[mysqld]
log-bin=mysql-bin
server-id=1复制代码
슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때2.binlog 로그 확인하기
binlog 데이를 연 후 명령어를 통해 binlog 로그 상태를 확인할 수 있는지 확인하세요.
# 查看binlog日志的目录show master status;复制代码

[mysqld]

# 查看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 로그를 복사하고 read를 사용할 수 있습니다. 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复制代码

슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때
recovery 명령을 입력하니, 제가 지웠던 데이터베이스 데이터가 다시 돌아온 걸 보실 수 있습니다.
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复制代码

完结!

想了解更多编程学习,敬请关注php培训栏目!

위 내용은 슬픈 이야기, 온라인 데이터베이스가 실수로 삭제되었을 때의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제