MySQL备份恢复

1.介绍

最后一根救命稻草,备份主要是用来恢复数据

2.DBA在备份恢复工作职责

2.1设计备份策略和恢复策略

1.备份策略

1)备份的时间
凌晨,根据公司的实际业务情况,一般选择业务低谷时期。
2)备份的周期
每天
每周
3)备份的方式
全备、增量
逻辑、物理

2.恢复策略

1)方案。
2)准确性。
3)需要多长时间。

2.2 检查备份

1)存在性。
2)大小。
3)日志。

2.3 定期恢复演练

2.4 故障恢复

2.5 迁移升级

3.备份工具介绍

3.1 逻辑备份工具

3.1.1 主流: mysqldump (MDP)

基于SQL(create database ,create table , insert into)语句的备份。

使用场景:

100G以内,比较常用的就是逻辑备份。
优点:自带工具,不需要单独安装;文本形式存储,便于查看处理;压缩比较高,节省空间。
缺点:备份时间较长。恢复时间更长(4-6倍)。

3.1.2 其他的:自行扩展

mydumper
mysqlpump
into outfile/load data infile

3.2 物理备份工具

Percona - Xtrabackup(xbk,pbk,pxb)
备份数据文件。

使用场景:

优点:备份、恢复速度更快。
缺点:二进制方式,可读性差;压缩比较低,浪费空间。

4.mysqldump 应用

4.1 备份方式:

基于SQL(create database ,create table , insert into)语句的备份。
针对InnoDB表可以实现非锁定备份。原理上是通过MVCC中的快照技术进行备份。
针对非InnoDB表,是启用了锁表备份,FTWRL(global read lock)。

4.2参数应用:

4.2.1 连接参数

-u 用户
-p 密码
-S 本地socket
-h ip
-P 端口

4.2.2 备份参数

-A 全备参数

[root@db01 ~]# mysqldump -uroot -p123 -A >/opt/full.sql

-B 单库或者多库备份

[root@db01 ~]# mysqldump -uroot -p123 -B world test >/opt/db.sql

备份库下的单表或多表

[root@db01 opt]# mysqldump -uroot -p123 world city country >/opt/tab.sql

注意: 单表或多表备份,在恢复时需要提前创建库,use到库中再恢复。
–master-data=2(默认0/1/2)
功能:
1)备份时自动生成,当前的binlog位置信息
2)自动开启锁表备份功能,如果开了–single-transaction,可以减少global read lock.
–single-transaction
功能:InnoDB “热备”。 对于InnoDB表不锁表,开启一执行快照备份。

[root@db01 ~]# mysqldump -uroot -p123 -A --master-data=2 --single-transaction >/opt/full.sql

-R、-E、–triggers 特殊对象备份

mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E --triggers >/opt/full.sql

–max-allowed-packet=128M 上传下载数据控制大小

mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E
--triggers --max-allowed-packet=128M >/opt/full.sql
如果不添加在传输一些较大的数据报错
# 1153 - Got a packet bigger than 'max_allowed_packet' bytes


最终备份命令

#gzip压缩
mysqldump -uroot -p123 -A  -R  --triggers -E  --master-data=2
--single-transaction --max-allowed-packet=128M |gzip > /opt/full_$(date +%F).sql.gz
#bzip2压缩
mysqldump -uroot -p123 -A  -R  --triggers -E  --master-data=2
--single-transaction --max-allowed-packet=128M |bzip2 -9   > /opt/full_$(date +%F).sql.bz2

4.3 MDP+binlog生产故障恢复模拟

4.3.0 模式环境

mysql> create database mdp charset utf8mb4;
mysql> use mdp;
mysql> create table t1(id int);
mysql> insert into t1 values(1),(2),(3);
mysql> commit;

4.3.1 模拟全备

[root@db01 opt]# mysqldump -uroot -p123 -A -R --triggers -E --master-data=2
--single-transaction --max-allowed-packet=128M |bzip2 -9 > /opt/full_$(date +%F).sql.bz2

4.3.2 模拟新的数据变化

mysql> create table t2 (id int);
mysql> insert into t2 values(1),(2),(3);
mysql> commit;

4.3.3 搞破坏

mysql> drop database mdp;

4.4.4恢复:

1) 检查备份

[root@db01 opt]# vim full_2020-03-28.sql
SET @@GLOBAL.GTID_PURGED='41476b26-7023-11ea-a155-000c290020fe:1-16';
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=1047;

2)截取全备之后发生的操作日志

起点:
position --->'mysql-bin.000005', MASTER_LOG_POS=1047;
GTID     --->41476b26-7023-11ea-a155-000c290020fe:17
终点: show binlog events in 'mysql-bin.000005';
GTID:    41476b26-7023-11ea-a155-000c290020fe:18
position:mysql-bin.000005 | 1534 [root@db01 opt]# mysqlbinlog  --skip-gtids --include-gtids='41476b26-7023-11ea-a155-000c290020fe:17-18' /data/3306/binlog/mysql-bin.000005 >/opt/bin.sql

3)恢复数据

mysql> set sql_log_bin=0;
mysql> source /opt/full_2020-03-28.sql #先恢复全备
mysql> source /opt/bin.sql #再恢复后面的日志
mysql> set sql_log_bin=1;

5.percona-xtrabackup

5.1 介绍

物理备份工具,备份数据文件。

5.2 下载安装

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#安装依赖包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
#安装软件
yum -y install percona-xtrabackup-*

5.3 配置

datadir=/data/3306/data
[client]
socket=/tmp/mysql.sock

5.4 xbk备份恢复原理

1. 备份原理
InnoDB表:
1)xbk备份执行的瞬间,立即触发ckpt,已提交的数据脏页,从内存刷写到磁盘,并记录此时的LSN号
2)备份InnoDB表时,拷贝 ibd 、ibdata、undo、ibtmp1,将备份期间产生的redo截取拷贝,记录LSN

非InnoDB表:
1)触发 FTWRL 全局锁,关闭binlog记录
2)拷贝非InnoDB表数据。

数据完成后
记录binlog位置,停止redo拷贝,记录last lsn,记录所有备份日志到指定日志文件中,解锁

2. 恢复原理

1)prepare 备份:利用了InnoDB CSR(自动故障恢复)的功能,使用redo进行前滚,undo进行回滚
2)恢复备份:cp 文件至源路径。

5.5 xbk应用

5.5.1 全备

innobackupex --user=root --password=123 --no-timestamp  /opt/full/xbkfull_`date +%F`

5.5.2 全备恢复演示

环境准备:

[root@db01 ~]# pkill mysqld
[root@db01 ~]# rm -rf /data/3306/data/*
第一步:prepare全备
[root@db01 ~]# innobackupex  --apply-log  /opt/full/xbkfull_2020-03-27/第二步:恢复全备
[root@db01 ~]# innobackupex --copy-back /opt/full/xbkfull_2020-03-27/
或者:
[root@db01 data]# cp -r /opt/full/xbkfull_2020-03-27/* /data/3306/data/
第三步:改权限并启动数据库
[root@db01 ~]# chown -R mysql.mysql /data/
[root@db01 data]# /etc/init.d/mysqld start

5.5.3 增量备份

1)原理
xrabackup自动检查LSN号码的变化,将每天LSN发生变化的数据页备份走。
增量备份,必须要依赖全备。恢复时,必须合并到全备。

2)查看备份集

xtrabackup_binlog_info  :binlog位置点
xtrabackup_checkpoints  :LSN号码记录
xtrabackup_info         :备份总览
xtrabackup_logfile      :部分redo

5.5.4 增量备份应用

环境准备:

1)模拟数据

mysql> create database incremental charset utf8mb4;
mysql> use incremental
mysql> create table t1 (id int);
mysql> insert into t1 values(1),(2),(3);
mysql> commit;

2)模拟周日全备

innobackupex --user=root --password=123 --no-timestamp /opt/full

3)模拟周一数据

mysql> use incremental
mysql> create table t2 (id int);
mysql> insert into t2 values(1),(2),(3);
mysql> commit;

4)模拟周一增量

innobackupex --user=root --password=123 --no-timestamp
--incremental-basedir=/opt/full  --incremental  /opt/inc1

5)模拟周二数据

 use incremental create table t3 (id int);insert into t3 values(1),(2),(3);commit;

6)模拟周二增量

innobackupex --user=root --password=123 --no-timestamp
--incremental-basedir=/opt/inc1  --incremental  /opt/inc2

7)模拟周三数据

 use incremental create table t4 (id int);insert into t4 values(1),(2),(3);commit;

8)搞破坏

[root@db01 ~]# pkill mysqld
[root@db01 ~]# rm -rf /data/3306/data/*

恢复数据:full+inc1+inc2+binlog
1)Prepare Base Full 处理基础全备

[root@db01 ~]# innobackupex --apply-log --redo-only /opt/full/

2)merging inc1 to BASE FULL ,合并处理inc1增量到全备

innobackupex --apply-log --redo-only  --incremental-dir=/opt/inc1 /opt/full

3)merging inc2 to BASE FULL,合并处理inc2增量到全备

innobackupex --apply-log  --incremental-dir=/opt/inc2 /opt/full

4)最后一次全备整理

[root@db01 opt]# innobackupex --apply-log  /opt/full/

5)恢复数据

root@db01 full]# chown -R mysql.mysql /opt/*
[root@db01 ~]# vim /etc/my.cnf
#datadir=/data/3306/data
datadir=/opt/full
[root@db01 full]# /etc/init.d/mysqld start
Starting MySQL... SUCCESS!

6)截取恢复binlog

[root@db01 inc2]# cat /opt/inc2/xtrabackup_binlog_info
mysql-bin.000002    1712    e308b7b1-7104-11ea-9021-000c290020fe:1-7
[root@db01 inc2]# mysqlbinlog --skip-gtids --include-gtids='e308b7b1-7104-11ea-9021-000c290020fe:8-9' /data/3306/binlog/mysql-bin.000002 >/opt/bin.sql
mysql> set sql_log_bin=0;
mysql> source /opt/bin.sql
mysql> set sql_log_bin=1;

7)清空binlog日志,再发起全备

mysql> reset master;
[root@db01 ~]# innobackupex --apply-log --redo-only /opt/full1/

5.5.5 从mysqldump 全备中获取库和表的备份

1、获得表结构
# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q'  full.sql>createtable.sql
2、获得INSERT INTO 语句,用于数据的恢复
# grep -i 'INSERT INTO `city`'  full.sqll >data.sql &
3.获取单库的备份
# sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql

5.5.6 从xtrabackup单独恢复表

1)单独起实例,备份数据拉起来
2)截取日志恢复此实例
3)故障表,表空间迁移恢复到生产

MySQL备份恢复-mysqldump/xbk相关推荐

  1. Mysql备份恢复(mysqldump)

    Mysql备份恢复(mysqldump) 直接复制 -- 建新库 create database `caimei@20180517` default character set utf8 collat ...

  2. mysql的备份恢复原理_MySQL备份恢复-mysqldump原理

    +++++++++++++++++++++++++++++++++++++++++++ 标题:mysqldump对MySQL数据库备份恢复原理 时间:2019年2月23日 内容:mysqldump工具 ...

  3. 零基础带你学习MySQL—备份恢复数据库(三)

    零基础带你学习MySQL-备份恢复数据库(三) 一.备份数据库 二.恢复数据库 先删除数据库zs_db03 恢复数据库zs_db03 课堂练习 方法一:傻瓜式办法 直接Ctrlcv 方法二:命令行方法 ...

  4. 【数据库运维】MYSQL备份恢复管理(上)

    目录 MYSQL备份恢复管理 一,备份类型 二,逻辑备份优缺点 三,MySQL备份内容 四,MySQL备份工具 五,MySQL备份策略 1,策略一:直接拷贝数据库文件 案例:直接拷贝备份数据库comp ...

  5. MySQL备份恢复练习

    MySQL备份恢复练习 素材 备份恢复要求 1. 备份数据库school到/backup目录 2. 备份数据库school为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 3. ...

  6. Mysql 备份恢复看这一篇就够了

    Mysql 备份恢复 一.备份分类.备份策略 1.1 造成数据丢失的原因: 程序错误 人为操作错误 运算错误 磁盘故障 灾难(如火灾.地震)和盗窃 1.2 数据库备份的分类 1)物理备份:对数据库操作 ...

  7. mysql导入分卷_php实现mysql备份恢复分卷处理的方法_PHP

    本文实例讲述了php实现mysql备份恢复分卷处理的方法.分享给大家供大家参考.具体分析如下: 分卷处理就是把握们要处理的数据分成一个个小文件进行处理了,这里我来给大家介绍一个php mysql备份恢 ...

  8. 刘子佼 mysql 下载_MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战 视频教程...

    课程名称:MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战课程简介: 课程独家解析MySQL 5.6最新特性,课程讲师刘子佼讲课风格幽默,善于与人沟通,善于组建和协调团队攻克技术难 ...

  9. mysql备份恢复项目_mysql备份恢复之xtrabackup (XBK、Xbackup)

    10.1安装 10.1.1 安装依赖包: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo y ...

最新文章

  1. 调和油、色拉油、花生油哪种吃着好
  2. 【P1326】超级教主
  3. 让画面更逼真!这个强化超分辨率GAN让老游戏迎来第二春 | 代码+论文+游戏MOD...
  4. 理解numpy dot函数
  5. 用c 语言写21点游戏,求一c语言程序 :21点游戏代码
  6. HTML5、canvas颜色拾取器
  7. 中文界面blend_使用Blend设计出符合效果的WPF界面
  8. 远离国产!电脑垃圾清理工具:ccleaner和CleanMyMac
  9. 基于ATMEGA16单片机,MQ-3酒精传感器,LCD1602液晶显示的酒精浓度检测阈值报警仪
  10. 需求分析和常见的需求问题解决
  11. Character Swap (Hard Version)
  12. 在线预览 Word、Excel、PowerPoint 文档——Office Online插件使用
  13. VB利用多张PNG图片制作动画
  14. 基于stm32f407的无线视屏传输项目
  15. 如何使用“GPU 呈现模式”进行卡顿问题定位
  16. 实战教程 | 用让新海诚本人惊讶的 AI 模型制作属于你的动漫视频
  17. 隼鸟2号着陆“龙宫”并采集样品
  18. 你知道遥控器的通信原理吗?
  19. Wins10系统忘记开机密码快速解锁方法(图文教程)
  20. linux 各操作系统别名

热门文章

  1. Java开源Web开发框架
  2. 人民币纸币采用防伪油墨
  3. 看看这个和runjs类似的网站jsrun
  4. 9006 - ProxySQL Error: connection is locked to hostgroup 2 but trying to reach hostgroup 1
  5. SQL数据库可疑恢复 挂起恢复 置疑恢复 SQL数据库无法附加修复 附加报错 9003
  6. 浅谈一下低频高频时阻抗匹配的重要知识
  7. (win11)VMware虚拟机Ubuntu系统--C语言(操作系统实验课)
  8. Tensorflow API 讲解——tf.estimator.Estimator
  9. java 电商锁库存实现_电商项目扣减库存方案
  10. Hopefield神经网络