MySQL备份恢复


MySQL备份恢复

	1. Binlog⽇志深⼊分析
	1.1. Binlog记录模式及参数设置
	1.2. Binlog⽇志正确的打开⽅式
	2. 对备份的正确理解
	2.1. 数据⼀致性的分析
	2.2. 使⽤mysqldump备份数据
	2.3. 不同存储引擎下的数据备份

1. Binlog⽇志深⼊分析

1.1. Binlog记录模式及参数配置

	DDL:全部记录,定义语⾔
	DML:除select以外都会记录
	
	log_bin=mysql-bin
	binlog_format=statement|row

mysql-bin是basename,mysql-bin-000001.log
Binlog有三种记录模式

		statement:SBR:delete from mytable 、update(基于⼀个简单的回放)
		create table
		insert
		update
		delete
		insert
		update table set a=1

先查看了⼀下⽇志

	1、mysql> show binlog events in 'mysql-bin.000001';
	2、mysqlbinlog --start-position=100 --stop-position=120 --database=mydb mysqlbin.000001 > mysql.sql

statement⾥⾯⾯只有操作语句是⾮注释的,其他的说明都是#注释的
看我们的binlog⽇志⼤⼩

	show variables like '%binlog_size%'; #如果⼀个事务超过binlon⼤⼩不会写⼊下⼀个
	max_binlog_size=1024m #每个binlog⽇志⽂件⼤⼩
	expire_logs_days=7 #binlog的过期时间
	binlog_cache_size=32768 DML操作不频繁 <=1m, DML频繁且事务⼤ 2-4m
	max_binlog_cache_size 32位4G,64位16P

	mysql> flush logs; #⽣成⼀个新binlog
	mysql> show binary logs; #查看系统binlog数

如果是mysqldump
1、找到这个表最初的记录表结构,和当时的数据,把这个数据insert全部拿出来
2、insert into,备份的时间点和出事的那个阶段咋办?

	row:RBR:update、delete=10,展示出10条更改前和更改后的语句

这个时候使⽤show binlog来查看已经看不到语句

	mysql> show binlog events in 'mysql-bin.000003'; #?是否还有⽤
	
	mysqlbinlog --base64-output=decode-rows -v mysql-bin.000003
	
	mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000003 #增加数据类型了

mixed:MBR:90%都是statement的模式

	90%的语句都是以statement模式进⾏的

1.2. Binlog⽇志的正确打开⽅式

	mysql> show binlog events in 'mysql-bin.000002'
	mysql> show binlog events [IN 'log_name'][FROM pos][LIMIT [offset,]
	row_count];

	mysqlbinlog --no-defaults --database=mydb --base64-output=decode-rows -v --
	start-position=123 --stop-position=456 mysql-bin.000002
	mysqlbinlog --no-defaults --database=mydb --base64-output=decode-rows -v --
	start-datetime='2019-12-11 16:30:00' --stop-datetime='2019-12-11 16:31:00'
	mysql-bin.000003

2. 对备份的正确认识

	全量备份:对应时间的数据是全量的⼀个备份
	差异备份:周⽇做了⼀次

时间点恢复

上⾯三个备份节点都是⼀个定时的数据补偿,在定时备份完成后⾄任意备份时间节点前,这段时间出现
问题需要Binlog能做的事情了

热备

数据库的读写操作均可正常进⾏,是要通过备份⼯具,myisam引擎不⽀持热备,innoDB⽀持热备

温备

数据库只能进⾏读操作,不能进⾏写操作

冷备

要让数据库停机

物理备份

直接copy数据⽂件

逻辑备份

将数据库⾥的数据导出进⾏备份的⽅式就是逻辑备份

2.1. MySQL常⽤的备份⼯具

mysqldump

mysql⾃带的备份⼯具,是逻辑备份
innodb可以使⽤mysqldump进⾏热备
myisam可以使⽤mysqldump进⾏温备
如果数据量较⼩可以使⽤

xtrabackup

Percona提供
是⼀种物理备份⼯具
⽀持完全备份,差异备份,增量备份

select语句直接备份

select * from a into outfile '/usr/local/a.bak'

cp命令

只能进⾏冷备

2.2 数据⼀致性的理解

数据⼀致性

热备:数据库还依旧可以读写
4:00 进⾏定时备份,假设你的数据⾮常多,需要备份10-20分钟
⼩刘账户余额在4点有200元,4点10分的时候,他转出了50元
假如在4点10分前还没有备份到余额表,4点11分开始备份余额表

在备份场景下如何保证数据⼀致性

第⼀种⽅式,在备份的时候给所有表加锁,只能读不能写
如果锁表的时候可以把写⼊的数据先放⼊MQ或缓存,待备份完成补偿进数据库,还有
就是要考虑及时读的问题
第⼆种⽅式:在备份开始的时候就对数据库的所有数据进⾏⼀个“快照”,快照记录了开始备份
的那⼀刻的数据状态

2.3 使⽤mysqldump备份

缺点:当数据位浮点型,会出现精度丢失
如果要进⾏并⾏备份可以使⽤mydumper/myloader
mysqldump -uroot -p123456 --databases mydb > mydb.sql #导出带数据库的备份脚本
mysqldump -uroot -p123456 --databases mydb ad_user > mydb.sql #导出数据库指定
表
mysqldump -uroot -p123456 --all-databases > mydb.sql #导出所有数据库
mysqldump -uroot -p123456 -d mydb > mydb.sql #导出数据库的所有表结构
mysqldump -uroot -p123456 -d mydb ad_user > mydb.sql #导出数据库的某个表结构

–master-data

某个时间全量备份:每天晚上4点-中间12点数据挂了-明天晚上4点之间这段时间就需要时间点恢复
前天晚上4点全量+4点-12点的binlog(如果知道4点备份的那个position)
能够在我们导出数据的时候在我们的脚本⾥带上全量结束的position

–master-data=0|1|2

1:如果主库被删除了,从库也会被删除,拿着备份⽂件去从库告知从库执⾏完从什么位置开始同
步
2:只记录备份的position,可以⽤这个位置快速导出binlog的语句

–flush-logs

在备份的那个时点新建⼀个binlog

其他常⽤选项

--routines :存储过程
--triggers : 触发器
--events : 事件

2.4 不同存储引擎下如何进⾏备份

innodb

热备:需要在mysqldump⾥加⼊⼀个参数:--single-transaction
会基于备份⽣成⼀个独⽴的事务,专⻔进⾏对应时点快照数据处理的

mysqldump -uroot -p123456 --master-data=2 --single-transaction --routines -
-triggers --events --databases mydb > mydb.sql

myisam

温备:因为这个引擎不能⽀持事务,要保证数据⼀致性要锁表:--lock-tables

mysqldump -uroot -p123456 --master-data=2 --lock-tables --routines --
triggers --events --databases mydb > mydb.sql

–lock-all-tables #配置导出所有数据库 --all-databases

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值