首页 > 数据库 >13-Mysql备份恢复

13-Mysql备份恢复

时间:2023-12-27 14:56:04浏览次数:41  
标签:binlog 13 -- 备份 Mysql t1 mysql backup

一、备份的类型

  1. 冷备份:关闭数据、停止业务
  2. 温备份:加锁备份
  3. 热备份:在先备份,不会影响到也正常运行

二、备份方式

2.1 逻辑备份:基于SQL语句的备份
  1. mysqldump建库、建表、数据插入
  2. 基于二进制日志:数据库的所有变化类的操作
  3. 基于复制的备份:将二进制日志实时传送到另一台机器并且恢复
2.2 物理备份
  1. xtrabackup进行物理备份
  2. 拷贝数据文件(冷备)

三、 备份工具

  1. mysqldump
    (mysql原生自带很好用的逻辑备份工具)
  2. mysqlbinlog
    (实现binlog备份的原生态命令)
  3. xtrabackup
    (precona公司开发的性能很高的物理备份工具)

四、mysqldump备份工具使用

优点:逻辑备份工具,都是SQL语句,都是文本格式,便于查看和编辑,更便于压缩

缺点:备份效率较慢

mysqldump常用参数:

-u -p -h -S -P

五、备份案例

5.1 全库备份
-A --->全库备份			
例子:
mysqldump -uroot -p123 -A >/backup/full.sql
5.2 单库备份
例子:
 mysqldump -uroot -p123 -B lufei > /backup/lufei.sql  ---> -B 表示增加建库和use的语句
 mysqldump -uroot -p123  lufei > /backup/lufei1.sql

说明:-B,增加建库(create)及“use库”的语句,在将来恢复时,不需要手工进行建库和use
不加-B,需要恢复时,先创建库,use库下再进行恢复
另外,-B选项还可以实现,同时备份多个库,备份到同一个文件中
mysqldump -uroot -p123 -B lufei oldboy>/backup/lufei_oldboy.sql
以下例子,如果不加-B,去备份,他的功能是备份路飞数据库下的oldboy表
mysqldump -uroot -p123 lufei oldboy>/backup/lufei_oldboy.sql
语法:mysqldump 库1 表1 表2 表3 >库1.sql

  • 注意:生产环境下,也要加的额外参数:
-R, 	   	备份存储过程和函数数据
--triggers,	备份触发器数据
例如:
mysqldump -uroot -p123 -A  -R --triggers >/backup/full.sql

5.3 记录备份时刻binlog的位置
-F, --flush-logs   刷新binlog日志,为了方便将来二进制日志截取时的起点

mysqldump -uroot -p123 -A -F >/backup/full.sql
--master-data={1|2}     告诉你备份时刻的binlog位置,一般我们选择使用2,以注释的方式记录二进制日志位置

5.4 锁表备份和热备

锁表:适合所有引擎(myisam,innodb)
	-x, --lock-all-tables 
	-l, --lock-tables
--single-transaction  对innodb引擎进行热备
通过快照的方式实现热备
5.5 一个生产例子压缩备份:(全库备份)
mysqldump -uroot -p123 -A  -R --triggers --master-data=2 --single-transaction |gzip >/backup/all_$(date +%F).sql.gz

六、mysqldump+binlog恢复案例


6.1 背景环境:

	正在运行的网站系统,mysql数据库,数据量25G,日业务增量10-15M。
备份方式:
	每天23:00点,计划任务调用mysqldump执行全备脚本
故障时间点:
	上午10点,误删除了一个表
如何恢复?

6.2 思路

	1、断开业务,防止对数据库二次伤害,挂出维护页面
	2、搭建备用库,恢复全备
	3、截取昨天晚上23:00之后到上午10点误删除操作之前的二进制日志
	4、恢复到备用库,验证数据可用性和完整性
	5、两种方案恢复前端应用
		5.1 备用库导出误删除的表,导入到生产库,开启业务
		5.2 直接将应用切割到备用库,替代生产库,开启业务

6.3 模拟故障并恢复:

1、原始数据:
mysql> create database oldboy;
mysql> use oldboy
mysql> create table t1 (id int,name varchar(20));
mysql> insert into t1 values (1,'zhang3');
mysql> insert into t1 values (2,'li4');
mysql> insert into t1 values (3,'wang5');
mysql> commit;
2、模拟前一天晚上23:00全备
mysqldump  -A  -R --triggers --master-data=2 --single-transaction |gzip >/backup/all_$(date +%F).sql.gz

3、模拟白天(23:00-10:00)业务对数据的修改
mysql> insert into t1 values (4,'zhang33');
mysql> insert into t1 values (5,'li44');
mysql> insert into t1 values (6,'wang54');
mysql> commit;
4、模拟故障
drop table t1;

5、恢复
(1)准备全备,并获取到备份文件中的binlog的截取起点

gunzip all_2018-04-04.sql.gz
	-- CHANGE MASTER TO MASTER_LOG_FILE='my-bin.000004', MASTER_LOG_POS=731;
(2)截取二进制日志
mysqlbinlog --start-position=731  --stop-position=1126 /data/binlog/my-bin.000004 >/backup/binlog.sql

-----
 show binlog events in 'my-bin.000004';  ----》drop之前的position为1126 
-----
(3)恢复全备+binlog

set sql_log_Bin=0;
source /backup/all_2018-04-04.sql;
source /backup/binlog.sql

七、 Xtrabackup物理备份工具

7.1 Xtrabackup介绍

percona公司的备份工具,性能比较高。物理备份工具。

Xtrabackup的特点:
物理备份工具,在同级数据量基础上,都要比逻辑备份性能要好的多。
特别是在数据量比较大的时候,体现的更加明显。
备份方式:
	1、拷贝数据文件
	2、拷贝数据页
备份原理(innodb):
	1、对于innodb表,可以实现热备
		(1)在数据还有修改操作的时刻,直接将数据文件中的数据页备份
		此时,备份走的数据对于当前mysql来讲是不一致。
		(2) 将备份过程中的redo和undo一并备走。
		(3)为了恢复的时候,只要保证备份出来的数据页LSN能和redo LSN匹配,
			将来恢复的就是一致的数据。redo应用和undo的应用。
	2、对与myisam表,实现自动锁表拷贝文件。

7.2 Xtrabackup软件安装:

1、安装

wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-6.repo   //--->下载依赖包的yum源
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL    //---> 安装依赖包

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm  
yum -y install percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm     //--->安装Xtraback

2、全备备份并恢复

mkdir /server/backup -p

常用参数

  • --user=
  • --password=
  • --socket=
  • --no-timestamp --不使用时间挫

全备例子:

innobackupex    --user=root --password=123   /server/backup/

innobackupex    --user=root --password=123   --no-timestamp  /server/backup/

全备恢复例子:

1、恢复数据前的准备(合并xtabackup_log_file和备份的物理文件)

  • -apply-log:此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
  • use-memory:该选项表示和--apply-log选项一起使用,prepare 备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),推荐1G
innobackupex --apply-log --use-memory=32M /server/backup/  # 必须做的准备操作

2、模拟故障

停库:
pkill mysqld
破坏数据:
cd /application/mysql/data
\rm -rf *

3、恢复

cp -a /server/backup/*  /application/mysql/data

或者

innobackupex --copy-back  /server/backup/full/   

注意:恢复时,要确认数据路径是空的,并且数据库是停掉的

4、重新赋予权限

chown -R mysql.mysql /application/mysql/data

5、 启动并验证

/etc/init.d/mysqld start

mysql -e "select * from test.t1"

7.3 xtrabackup 实现增量备份及故障恢复案例

周日全备,周一到周六做增量

1、周日全备:

mkdir /backup/full
innobackupex --user=root --password=123 --no-timestamp /backup/full/

2、模拟数据变化(周一数据变化)


3、第一增量(周一晚上增量):

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

4、模拟数据变化(周二数据变化)


5、第二次增量(周二晚上增量):

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

6、周三上午做了n多的操作,10:00时刻,误删除t1表

7、在准备的备库中恢复数据:

innobackupex --apply-log  --redo-only /backup/full 
innobackupex --apply-log  --redo-only --incremental-dir=/backup/inc1 /backup/full
innobackupex --apply-log  --incremental-dir=/backup/inc2 /backup/full 
innobackupex --apply-log  /backup/full
----准备工作,将日志进行合并

innobackupex --copy-back  /backup/full/   ---> cop备份到MySQL数据目录下



8、截取第二次备份结束的position号误删除之前的position号

[root@test01 inc2]# cat xtrabackup_binlog_info 
my-bin.000042	1253


mysqlbinlog --start-position=1253  --stop-position=1881 /data/binlog/my-bin.000042 >/backup/binlog.sql

mysql> source /backup/binlog.sql
生产恢复案例:

背景:
1、xtrabackup备份策略每周日,full全备
2、xtrabackup周一到周六,inc1-inic6
3、总数据量200G
4、周三上午10点误删除表t1,数据量1G左右
5、周二晚上inc2备份完成之后到周三上午10点又做了很多操作

如何将数据库恢复到t1表误删除之前状态?

思路:
	1、停业务,挂维护页
	2、找备用库
	3、合并full+inc1+inc2
	4、截取周二晚上inc2备份后到周三上午10点,t1表删除之前的binlog日志
	5、将合并后的full+截取的binlog恢复到备用库
	6、验证数据可用性和完整性
	7、使用备用库替代生产库使用或者将t1表导出并导入回生产库
	8、业务恢复

-----------------

思考:以上恢复策略是否可以优化?

为了恢复1G表,需要将整个全备恢复,有必要吗?有什么好的解决办法?

当然有,就是通过导入表空间的方式
步骤:

  1. 创建一个和删前表结构一模一样的表
  2. discard 掉他的表空间文件
  3. 将合并后的数据库对应的ibd文件cp到mysql数据目录下并修改相应的权限
  4. 最后导入表空间即可
  5. 通过二进制截取的方式截取误删除前最后一次备份后的position号,并恢复

具体操作如下:

drop table t1;
create table t1 (id int,name varchar(20));
alter table t1 discard tablespace;

cd /application/mysql/data/test
cp /backup/full/test/t1.ibd  ./

chown  -R mysql.mysql *
alter table t1 import tablespace;
select * from t1

标签:binlog,13,--,备份,Mysql,t1,mysql,backup
From: https://www.cnblogs.com/ejjw/p/17930565.html

相关文章

  • 面试官:MySQL 到底是 join 性能好,还是 in 一下更快呢?被问懵逼了…
    来源:https://juejin.cn/post/7169567387527282701先总结:数据量小的时候,用join更划算数据量大的时候,join的成本更高,但相对来说join的速度会更快数据量过大的时候,in的数据量过多,会有无法执行SQL的问题,待解决事情是这样的,去年入职的新公司,之后在代码review的时候被提出说,不要......
  • 12-Mysql的日志管理
    一、mysql常见日志二、错误日志配置方法:[mysqld]log-error=/data/mysql/mysql.log查看配置方式:mysql>showvariableslike'%log%error%';作用:记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志,默认在data目录下三、一般查询......
  • 14-Mysql主从复制
    一、mysql复制原理1.1主从复制原理过程从库的I/Othread线程会读取masterinfo文件获取主库的user,passwordport信息然后还会获取上次获取主库二进制日志的位置如3640就是00003这个文件640这个位置,主库收到从库的请求后,会验证用户名密码等的合法性,然后问主库你有没有......
  • 04-Mysql多实例
    多实例就是多套线程和多各进程和多个预分配的内存结构配置思路启动多个mysqld进程规划多套数据规划多个端口规划多套日志路径配置例子1、创建多套目录mkdir-p/data/330{7,8,9}2、准备多套配置文件vi/data/3307/my.cnf[mysqld]basedir=/application/mysqldatadi......
  • 05-Mysql 用户管理
    一、MySQL用户管理用户定义:user主机范围使用某个用户从哪个(些)地址访问我的数据库用户的功能:1、用来登录mysql数据库2、用来管理数据库对象(库、表)权限功能:针对不同用户设置对不同对象管理能力selectupdatedeleteinsertcreatedrop。。。权限范围:......
  • 01-Mysql介绍及安装
    关系型数据库的特点二维表典型产品Oracle传统企业,MySQL是互联网企业数据存取是通过SQL最大特点,数据安全性方面强(ACID)•NoSQL:非关系型数据库(NotonlySQL)不是否定关系型数据库,做关系型数据库的的补充想做老大,先学会做老二•NoSQL特性总览–不是否定......
  • 在windows下安装mysql 8.1
    1、下载并解压官网下载mysql8,https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip解压到D:\mysql,以下称为根目录2、编写配置文件在根目录下新建my.ini文件,配置以下内容[mysqld]#设置3306端口port=3306#设置mysql的安装目录,一定要与上面的安装路......
  • 02-Mysql体系结构
    一、MySQL服务器连接模型2、应用程序如何连接到mysql2.1tcp/ip的方式mysql-uroot-poldboy123-h10.0.0.2002.2套接字的方式mysql-uroot-poldboy123-S/tmp/mysql.sock二、MySQL服务器构成——实例连接层sql层处理流程解析器(执行计划)--优化器(选择比......
  • 03-MySQL基本管理
    一、数据库连接管理mysql-uroot-poldboy123#隐藏条件-S默认socket方式mysql-uroot-poldboy123-h10.0.0.52-P3308#tcp/ip的方式mysql-uroot-poldboy123-S/application/mysql/tmp/mysql.sock#socket方式mysql-uroot-poldboy123-e"showvariableslike......
  • 题解 P9993【[Ynoi Easy Round 2024] TEST_133】
    就硬把线段树3和数列分块入门2揉到一起出。维护原数组\(a\)及其历史最大值\(hist\),对每个块,维护块内\(a\)升序排序后结果\(p\)、块内\(a\)升序排序后历史最大值前缀和\(prehist\)、块加标记\(add\)、块历史和加标记\(histadd\)。下传标记和区间修改操作仿照线......