>  기사  >  데이터 베이스  >  MySQL에 증분 백업 및 복구 도입

MySQL에 증분 백업 및 복구 도입

coldplay.xixi
coldplay.xixi앞으로
2021-02-14 10:02:153828검색

MySQL에 증분 백업 및 복구 도입

추천 무료 학습: mysql 비디오 튜토리얼

Article 디렉토리

  • 1. MySQL 증분 백업
    • 1.
    • 1.1 증분을 사용하는 이유 backup
      • 1.2 증분 백업의 특징
      2. 증분 백업 예시
    2. MySQL 증분 복구
  • 1. 증분 복구 시나리오
    • 2.
    • 3. 전체 백업 후 손실된 모든 데이터의 복원 단계
    • 4. 특정 시점 및 위치 기반 복구
    • 4.1 특정 시점 복구
      • 4.1 위치 기반 작업
      • 5. 기업 백업 전략 지정을 위한 아이디어
1. MySQL 증분 백업

증분 백업은 전체 백업을 기반으로 백업 파일의 크기를 줄여 백업 및 복구 속도를 높일 수 있습니다.

1. 증분 백업의 개념

1.1 증분 백업을 사용하는 이유

이전 장에서 전체 백업에는 두 가지 방법이 있다고 언급했는데, 하나는 tar를 사용하여 데이터 파일을 패키지화하는 것이고, 다른 하나는

mysqldump를 사용하여 전체 백업을 하는 것입니다.
  • 전체 백업의 문제점은 쉽게 알 수 있습니다. 모든 데이터 내용이 매번 백업되므로 백업 데이터에 중복된 데이터가 많아 전체 백업 시간과 복구 시간이 매우 깁니다
  • 이를 해결하려면 전체 백업의 문제점은 증분 백업을 사용한다는 것입니다. 증분 백업은 마지막 백업 이후에 추가되거나 변경된 파일이나 내용을 백업하는 것입니다.
  • 1.2 증분 백업의 특징

증분 백업의 장점은 중복된 데이터가 없고, 백업 볼륨이 크지 않고, 시간이 짧습니다

    복원하려면 마지막 전체 백업과 전체 백업 이후의 모든 증분 백업이 필요하며, 모든 증분 백업은 하나씩 복원됩니다. 하나. 더 복잡합니다
  • MySQL은 직접적인 증분 백업 방식을 제공하지 않지만 MySQL의 바이너리 로그를 통해 간접적으로 증분 백업이 가능합니다

  • 백업용 바이너리 로그의 의미는 다음과 같습니다.
바이너리 로그 저장 모든 작업

바이너리 로그는 MySQL 서버를 시작한 후 기록을 시작하고, 파일이 max_binlog_size에 설정된 크기에 도달하거나 로그 플러시 명령을 받으면 새 로그 파일을 다시 생성합니다
  1. 실행만 하면 됩니다. 정기적으로 플러시 로그 방법은 새 로그를 다시 생성하고, 바이너리 파일 시퀀스를 생성하고, 이러한 로그를 적시에 안전한 장소에 저장하여 일정 기간의 증분 백업을 완료합니다
  2. 2. 증분 백업 예시

바이너리 로그 기능 활성화

vim /etc/my.cnf...[mysqld]log-bin=mysql-binbinlog_format = MIXED#指定二进制日志(binlog)的记录格式为 MIXEDsystemctl restart mysqld.service#重启服务cd /usr/local/mysql/datals -l /usr/local/mysql/data/mysql-bin.*#查看二进制文件#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式)#默认格式是 STATEMENT

MySQL에 증분 백업 및 복구 도입
매주 서버 부하가 적은 기간을 선택하거나, 사용자가 적게 액세스하는 기간을 선택하세요. MySQL에 증분 백업 및 복구 도입

mysqldump -uroot -p123123 SCHOOL CLASS01 > /opt/SCHOOL_CLASS01_$(date +%F).sql#对表进行完全备份mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql#对库进行完全备份crontab -e#也可以使用计划性任务来执行30 3 * * 3 mysqldump -uroot -p123123 SCHOOL CLASS01 > /opt/SCHOOL_CLASS01_$(date +%F).sql30 3 * * 3 mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql每周三的凌晨 3:00 对数据库和表进行完全备份

MySQL에 증분 백업 및 복구 도입
증분 백업을 수행할 수 있습니다. 매일 새로운 바이너리 로그 파일을 생성하여 새 데이터를 삽입한 후 새 바이너리 파일이 데이터베이스의 변경된 내용과 일치하도록MySQL에 증분 백업 및 복구 도입

ls /usr/local/mysql/datamysqladmin -uroot -p123123 flush-logs

새 데이터를 삽입하여 데이터 증가 또는 변경을 시뮬레이션MySQL에 증분 백업 및 복구 도입

use SCHOOL;insert into CLASS01 values(3,'wangsan','woman','games');insert into CLASS01 values(4,'wangsi','man','runing');select * from CLASS01;

새 바이너리 파일을 생성하고 내용 보기MySQL에 증분 백업 및 복구 도입

cd /usr/local/mysql/data/lsmysqladmin -uroot -p123123 flush-logs
  1. cp mysql-bin.000002 /opt/#将记录变更的二进制文件02复制至/opt目录下cd /opt/lsmysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002#使用64位编码机制去解码,按行读取详细内容

MySQL에 증분 백업 및 복구 도입

MySQL에 증분 백업 및 복구 도입
MySQL에 증분 백업 및 복구 도입 2. MySQL 증분 복구


번거로움

각 증분 백업은 별도의 엔터티입니다. , 데이터가 반복되지 않으며 더 정확하게 제어해야 합니다
  • 1. 증분 복구 시나리오
  • 当数据发送错误时,应根据实际情况选择使用完全备份恢复,还是增量备份
  • 增量备份的场景是:
    • 人为的 SQL 语句破坏了数据库
    • 在进行下一次全备之前发送系统故障导致数据库数据丢失
    • 在主从架构中,主库数据发送了故障
  • 根据数据丢失的情况可以分为两类:
    • 只丢失了完全备份之后更改的数据
    • 完全备份之后丢失所有的数据

2.丢失完全备份之后更改的数据的恢复步骤

  • 当完全备份之后更改的数据丢失,需要把完全备份之后的所有增量备份文件逐个恢复
  • 步骤如下:
mysql -uroot -p123123use SCHOOL;delete from CLASS1 where id=3;delete from CLASS1 where id=4;#删除插入的两条数据,模拟完全备份后数据丢失的故障select * from CLASS01;#检查quitmysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p123123#使用二进制文件进行恢复操作mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"#检查表内容是否恢复

MySQL에 증분 백업 및 복구 도입
MySQL에 증분 백업 및 복구 도입

3.完全备份之后丢失所有数据的恢复步骤

  • 当完全备份和增量备份之后,所有的数据丢失,需要把完全备份和所有增量备份文件逐个恢复
  • 步骤如下:
mysql -uroot -p123123use SCHOOL;drop table CLASS01;#直接删除整个表,假设完全备份后所有数据都丢失了quitmysql -uroot -p123123 SCHOOL <p><img src="https://img.php.cn/upload/article/000/000/052/c368a93d80781ae407afafe02a2ac327-11.png" alt="MySQL에 증분 백업 및 복구 도입"><br><img src="https://img.php.cn/upload/article/000/000/052/1481568b3321e7dca79c49d509572b7b-12.png" alt="MySQL에 증분 백업 및 복구 도입"></p><p><strong>4. 基于时间点与位置的恢复</strong></p>
  • 利用二进制日志可实现基于时间点与位置的恢复,例如由于误操作删除了一张表,这时完全恢复是没有用的
  • 因为日志里还有误操作的语句,我们需要的是恢复到误操作之前的状态,然后跳过误操作的语句,再恢复后面操作的语句

4.1 基于时间点的恢复

  • 基于时间点的恢复,就是将某个起始时间的二进制文件导入数据库中,从而跳过某个发生错误的时间点实现数据的恢复
  • 使用 mysqlbinlog 加上 --stop-datetime 选项,表示在哪个时间点结束,后面误操作的语句不执行
  • –start-datetime 选项表示执行后面的语句
  • 结合使用它们就可以跳过误操作的语句,完成恢复工作
  • 需要注意的是,二进制文件中保存的日期格式需要调整为用“-”分割
#恢复用户“wangsan”的数据,而不恢复“wangsi”mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS01;"mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --stop-datetime='2021-02-06 15:58:39' /opt/mysql-bin.000002 |mysql -uroot -p123123mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL에 증분 백업 및 복구 도입

#恢复“wangsi”的数据mysqlbinlog --no-defaults --start-datetime='2021-02-06 15:58:39' /opt/mysql-bin.000002 |mysql -uroot -p

MySQL에 증분 백업 및 복구 도입

4.1 基于位置的操作

  • 基于位置的恢复,就是使用基于时间点的恢复
  • 可能会出现在一个时间点里既同时存在正确的操作又存在错误的操作,基于位置是一种更为精确的恢复方式
mysqlbinlog --no-defaults --stop-position='609' /opt/mysql-bin.000002 | mysql -uroot -p#使用64位编码机制去解码并按行读取二进制文件02(增量备份)的详细内容......略

MySQL에 증분 백업 및 복구 도입

#仅恢复“1810”之前的数据,即不恢复“wangsi”的数据mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS01;"mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --stop-position='1810' /opt/mysql-bin.000002 | mysql -uroot -pmysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL에 증분 백업 및 복구 도입

#仅恢复“wangsi”的数据,跳过“wangsan”的数据恢复,即仅有第四条记录mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --start-position='1810' /opt/mysql-bin.000002 | mysql -uroot -p123123mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL에 증분 백업 및 복구 도입

5. 指定企业备份策略的思路

  • 指定企业备份策略要根据企业数据库的实际读写的频繁性与数据的重要性进行
  • 数据更新频繁,则应该进行较为频繁的备份
  • 数据较为重要,则在有适当更新时进行备份
  • 在数据库压力小的时段进行全备,如一周一次,然后每天增备
  • 根据公司的规模,中小公司可一天一次全备,大公司可每周一次全备,每天进行一次增备,并且尽量为企业实现主从复制架构

相关免费学习推荐:mysql数据库(视频)

위 내용은 MySQL에 증분 백업 및 복구 도입의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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