美文网首页
31备份恢复

31备份恢复

作者: Jachin111 | 来源:发表于2020-11-24 23:23 被阅读0次

备份恢复
备份策略的设计
备份周期 根据数据量
备份工具 mysqldump,XBK,MEB

备份方式
​    逻辑
​    全备 mysqldump
​    增量 binlog(flush logs,cp)
​    物理备份
​    全备 XBK
​    增量 XBK

检查备份可用性
crontab -l

备份脚本
备份路径
看备份日志,检查备份文件(大小,内容)
定期的恢复演练

数据恢复
只要备份和日志是完整的,恢复到故障之前的时间点(快速)

数据迁移

备份类型
热备 对于业务影响最小 InnoDB
温备 长时间锁表备份 MyISAM
冷备 业务关闭情况下备份

逻辑备份
mysqldump

连接数据库
-u
-p
-S
-h

基础备份参数
-A
mysqldump -uroot -p123 -A >/backup/full.sql
-B
mysqldump -uroot -p123 -B world oldguo wordpress >/backup/db.sql

库表备份
mysqldump -uroot -p123 world city country >/backup/tab.sql

特殊备份参数
-R 存储过程和函数
-E 事件

--triggers 触发器

--master-data=2
​    记录备份时刻的binlog信息
​    自动锁表
​    不加--single-transaction 温备份
​    加了--single-transaction 对于InnoDB表不锁表备份(快照备份)

--single-transaction 对于InnoDB的表,进行一致性快照备份,不锁表

恢复案例
背景环境 正在运行的网站系统,mysql-5.7.20数据库,数据量50G,日业务量1-5M
备份策略 每天23:00点,计划任务调用mysqldump执行全备脚本
故障时间点 年底故障演练,模拟周三上午10点误删数据库,并进行恢复

思路
​    停业务,避免数据的二次伤害
​    找一个临时库,恢复周三23:00全备
​    截取周二23:00-周三10点误删除之间的binlog,恢复到临时库

​    测试可用性和完整性
​    方法1 直接使用临时库顶替原生产库,前端应用割接到新库
​    方法2 将误删的表导出,导入到原生产库

开启业务 经过20分钟的处理,最终业务恢复正常

故障模拟演练
准备数据
create database backup;
use backup
create table t1(id int);
insert into t1 values(1),(2),(3);
commit;
rm -rf /backup/*

周二23:00全备
mysqldump -uroot -p123 -A -R --striggers --set-gtid-purged=OFF --master-data=2
--single-transaction | gzip >/backup/full_$(data +%F).sql.gz

模拟周二23:00到周三10点之间数据变化
use backup
insert into t1 values(11),(22),(33);
commit;

create table t2 (id int);
insert into t2 values(11),(22),(33);

模拟故障,删除表(只是模拟,不代表生产操作)
drop database backup;

恢复过程
准备临时数据库
systemctl start mysqld3307;

准备全备
cd /backup
gunzip full_2018-10-14.sql.gz

截取二进制日志
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=753;
mysqlbinlog --skip-gtids --start-position=753 --stop-position=1519 /data/binlog/mysql-bin.000002>/backup/bin.sql

恢复备份到临时库
mysql -S /data/3307/mysql.sock
set sql_log_bin=0;
source /backup/full_2019-07-15.sql
source /backup/bin.sql

将故障表导出并恢复到生产
mysqldump -S /data/3307/mysql.sock -B backup >/backup/t1.sql
mysql -uroot -p123
set sql_log_bin=0
source /backup/bak.sql;

扩展参数
--set-gtid-purged=AUTO/ON 在构建主从时,使用AUTO/ON
--set-gtid-purged=OFF 仅是做普通的本机备份恢复时,可以添加
--max_allowed_packet=128M 控制的是备份时传输数据包的大小

物理备份(XBK)
安装依赖包
下载软件并安装
innobackupex使用

备份的过程
​    针对非InnoDB,进行锁表备份,copy所有的非innoDN表文件
​    针对InnoDB表,立即触发CKPT,copy所有InnoDB表相关的文件(ibdata1,ibd,frm),并且将备份过程中产生的新的数据变化的部分redo一起备份走
​    在恢复时,xbk会调用InnoDB引擎的CSR过程,将数据和redo的LSN追平,然后进行一致性恢复

XBK全备和恢复体验
innobackupex --user=root --passwd=123 --no-timestamp /backup/full
innobackupex --apply-log /backup/full

备份产生的文件介绍
xtrabackup_binlog_info

记录备份时刻的二进制日志信息,可以作为binlog截取的起点
xtrabackup_checkpoints
​    from 备份中包含的LSN号的起点,全备是0,增量是上次备份的结束位置
​    to cptk时的LSN
​    last 备份结束时的LSN,下次增量备份的起始位置

增量备份
清空备份路径
\rm -rf /backup/*

模拟数据
create database full charset utf8mb4;
use full;
create table t1 (id int);
insert into te values(1),(2),(3);
commit;

进行周日的全备
innobackupex --user=root --password=123 --no-timestamp /backup/full

模拟周一的数据变化
create database inc1 charset utf8mb4;
use inc1;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

进行周一的增量备份
innobackupex --user=root --password123 --no-timestamp --incremental --incremental-basedir=/backup/full /backup/incl

检查备份的LSN
cat /backup/full/xtrabackup_checkpoints
cat /backup/inc1/xtrabackup_checkpoints

模拟周二数据变化
create database inc2 charset utf8mb4;
use inc2;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

周二的增量
innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/inc1 /backup/inc2

周三的数据变化
create database inc3 charset utf8mb4;
use inc3;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

模拟上午10点数据库崩溃
pkill mysqld
\rm -rf /data/mysql/data/*

恢复思路
​    停业务,挂维护页
​    查找可用备份并处理备份 full+inc1+inc2
​    binlog inc2到故障时间点的binlog
​    恢复全备+增量+binlog
​    验证数据
​    起业务,撤维护页

恢复过程

整理full
innobackupex --apply-log --redo-only /backup/full

合并inc1到full。并整理备份
innobackupex --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full

合并inc2到full,并整理备份
innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full

最后一次整理full
innobackupex --apply-log /backup/full

截取二进制日志

起点
cat /backup/inc2/xtrabackup_binlog_info

终点
mysqlbinlog /data/binlog/mysql-bin.000031 | grep 'SET'

截取
mysqlbinlog --skip-gtids --include-gtids='e16db3fd-a6e8-11e9-aee9-000c294a1b3b:10-12' /data/binlog/mysql-bin.000031 >/backup/binlog.sql

恢复备份数据
cp -a /backup/full/* /data/mysql/data/
chown -R mysql /data/
/etc/init.d/mysqld start
set sql_log_bin=0;
source /backup/binlog.sql

验证数据
select * from full.t1;
select * from inc1.t1;
select * from inc2.t1;
select * from inc3.t1;

备份集中单独恢复表
如果误删除的表只有10M,而备份有500G,该如何快速恢复误删除表
drop table city;
create table city like city_bak;
alter table city discard tablespace;
cp /backup/full/world/city.ibd /application/mysql/data/world/
chown -R mysql.mysql. /application/mysql/data/world/city.ibd
alter table city import tablespace;

迁移(5.6.44-->5.7.26)
搭建5.6的测试环境
mkdir /data/mysql/data -p
mkdir /application/ -p
mkdir /data/binlog -p

上传至/application下并解压
建用户,改权限
useradd mysql
chown -R mysql. /data /application

修改环境变量
vim /etc/profile
export PATH=/application/mysql/bin:$PATH
source /etc/profile

数据初始化
yum remove mariadb-libs
yum install -y libaio-devel
\rm -rf /data/mysql/data/*
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data

准备配置文件和启动脚本
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
server_id=99
user=mysql
log_bin=/data/binlog/mysql-bin
binlog_format=row
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF

cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld

启动数据库
/etc/init.d/mysql start
mysqladmin -uroot -p password 123

迁移5.6数据到5.7
5.6数据库备份
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
scp /tmp/full.sql 10.0.0.51:/data/3308

准备5.7数据库
systemctl start mysqld3308
mysql -S /data/3308/mysql.sock
source /data/3308/full.sql
mysql_upgrade -uroot -p123 -S /data/3308/mysql.sock

binlog的持续追加
停业务,恢复剩余的binlog
业务割接

相关文章

  • 31备份恢复

    备份恢复备份策略的设计备份周期 根据数据量备份工具 mysqldump,XBK,MEB 备份方式​ ...

  • postgres备份

    | | 备份速度|备份范围|恢复范围|操作影响|备份原理|恢复成本|| ------- |:---...

  • mydumper备份数据库

    一、备份 1.全库备份 2.单库备份 3.表备份 二、恢复 恢复库 单表恢复 单表恢复需要解压备份文件为sql格式...

  • 备份恢复

    备份恢复 在备份恢复需要做哪些工作 设计备份策略 备份周期 天,周,月 备份方式 全备,增量.... 备份什么? ...

  • MySQL(六 数据备份,pymysql模块),数据库远程连接

    MySQL数据备份 一、mysqldump实现逻辑备份 二、恢复逻辑备份 三、备份/恢复案例 四、实现自动化备份 ...

  • mysqldump常用操作

    insert备份 insert恢复 txt备份 txt恢复 mysqldump常用参数 myisam物理备份 in...

  • 备份恢复

    备份恢复 1. 运维人员在备份恢复工作职责 a. 备份、恢复策略定制b. 备份巡检c. 定期恢复演练d. 出现数据...

  • Salesforce 即将不再提供数据备份恢复服务

    Salesforce宣布:自2020年7月31日起,将不再提供数据备份恢复服务。 Effective July 3...

  • GHOST备份与还原系统(图文)

    GHOST手动备份与还原系统 GHOST恢复: (恢复完毕) GHOST备份:

  • 【MySQL】xtrabackup实战版

    备份脚本 全量备份脚本 增量备份脚本 全量恢复 增量恢复 全量备份脚本 增量备份脚本 目录结构 其中mysql_d...

网友评论

      本文标题:31备份恢复

      本文链接:https://www.haomeiwen.com/subject/wgfgiktx.html