MySQL备份恢复mysqldump逻辑备份

DBA职责

1备份策略的设计
备份周期:根据数据量
备份工具:mysqldump , XBK(percona xtrbackup),MEB(MySQL Enterprise Backup),mysqlbinlog
备份方式:全备 (mysqldump) 增量(binlog(flush logs ,cp之前的))
物理备份:XBK 全备+增量

2检查备份可用性
crontab -l
备份脚本
备份路径
看备份日志,检查备份文件(大小,内容)

3定期的恢复演练

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

5数据迁移
mysql -> mysql
其他 -> Mysql
Mysql->其他
操作系统不同的迁移

mysqldump

连接数据库

-u 用户
-p 密码
-S socket
-h 主机
P 端口

基础备份参数

-A 全备
-B 单裤 或者多个库
库 表
-d 只备份表结构(不包含数据)
-t只备份数据库表的数据(不包含表结构)

演示

mkdir /backup/
全备
mysqldump -uroot -p123456 -A >/backup/full.sql
或者加上时间
mysqldump -uroot -p123456 -A >/backup/all_$(date +%F).sql
备份多个库
mysqldump -uroot -p123456 -B world sky >/backup/db.sql
库表的备份
mysqldump -uroot -p123456 world city country>tab.sql
备份多个表
mysqldump -uroot -p123456 word>/backup/word_tab.sql

特殊备份参数
-R 备份存储过程和函数
-E 事件 (相当于linux的计划任务)
--triggers 触发器
--master-data=2
--single-transaction

master-data=2详解
1.记录备份时刻的binlog信息
2.自动锁表
不加--single-transaction,温备
加了--single-transaction ,对于Innodb表不锁表(快照备份)

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

恢复案例
1.背景环境
正在运行的网站系统,mysql-5.7.20数据库,数据量50G,日增1-5M
2.备份策略
每天23:00点,计划任务调用mysqldump执行全备脚本
3故障时间点
年底故障演练:模拟周三上午10点误删数据库
4.思路
a.停业务,挂维护页,避免数据的二次伤害
b.找一个临时库,恢复周二23:00全备
c.截取周二23:00 ----周三10:00误删的binlog日志,恢复到临时库
d.测试可用性和完整性
5.方法一: 直接使用临时库顶替原生产库,前端应用切割到新库
方法二:将误删除的表导出,导入到原生产库
6.开启业务
处理结果:经过20分钟的处理,业务恢复

故障模拟演练

准备数据

create database backup;
use backup
create table t1(id int);
insert into t1 values(1),(2),(3);
commit;

参数讲解

--set-gtid-purged=off (auto/ON)(OFF) OFF仅是做普通的本机备份回复时,可以添加,相当于没开GTID
构建主从复制一定要使用auto或者on
在备份中添加 SET @@GLOABL.GTID_purged
--max_allowed_packet=128m 数据包大小调整(备份时候会报错,传输数据包大小)
生产中数据表很大,导出的时候占用内存,数据包

准备周二的23:00全备

 mysqldump -uroot -p123456 -A -R --triggers --set-gtid-purged=off --master-data=2 --single-transaction|gzip>/backup/full_$(date +%F).sql.gz 
cd /backup/
# ll
total 13208
-rw-r--r--. 1 root root 13521639 Dec 25 22:00 full_2019-12-25.sql.gz
解压缩检查一下
gunzip full_2019-12-25.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);
commit;

模拟故障,删除库

drop database backup;

准备临时库(3307) 切割binlog数据

vim /backup/full_2019-12-25.sql
起点
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=792;
终点
show binlog events in 'mysql-bin.000006';
| mysql-bin.000006 | 1558 | Query          |         6 |        1656 | drop database backup                                               |
截取
mysqlbinlog --skip-gtids --start-position=792  --stop-position=1558 /data/binlog/mysql-bin.000006>/backup/bin.sql
vim /backup/bin.sql 
看看有没有drop  没有就对了

数据恢复

mysql -uroot -p123456 -S /data/3307/mysql.sock
set sql_log_bin=0;
source /backup/full_2019-12-25.sql
source /backup/bin.sql
show databases;
show tables;
select * from t1;
select * from t2;

将故障表导出并恢复到生产

mysqldump -uroot -p123456 -S /data/3307/mysql.sock backup >/bakcup/bak.sql   #因为是临时库,加不加参数都行
mysql -uroot -p123456
set sql_log_bin=0;
use backup
source /backup/bak1.sql;
set sql_log_bin=1;

数据被删除的演练(GTID)

create database sky charset utf8mb4;
use sky;
create table t1(id int);
insert into t1 values(1),(2),(3),(4),(5);
commit;

全备操作

 mysqldump -uroot  -p123456 -A --master-data=2 --single-transaction -R -E --triggers>/backup/full.sql
查看备份的sql
SET @@GLOBAL.GTID_PURGED='c01ce874-0b98-11ea-8819-000c296fff83:1-15';
16-
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=2407;

更新数据

insert into t1 values(6),(7),(8);
commit;
update t1 set id=10 where id>5;
commit;

删除数据,并捣乱

delete from t1 id=5;
commit;
delete from t1;
commit;
show tables;
insert into t1 values(6),(7),(8);
commit;
update t1 set id=10 where id>2;
commit;
select * from t1;
+------+
| id   |
+------+
|   10 |
|   10 |
|   10 |
+------+

恢复

show binlog events in 'mysql-bin.00006';
mysqlbinlog --skip-gtids --include-gtids='c01ce874-0b98-11ea-8819-000c296fff83:16-21' --exclude-gtids='c01ce874-0b98-11ea-8819-000c296fff83:19' /data/binlog/mysql-bin.000006 >/backup/bin.sql
切割日志,gtid16-21的  不要19的事件
查看一下
vim /backup/bin.sql

set sql_log_bin=0;
source /backup/full.sql
source /backup/bin.sql
set sql_log_bin=1;

mysqldump核心参数总结

--master-data=2
1.以注释的形式记录二进制日志信息(日志名,节点信息)
2.开启自动锁表的功能
--single-transaction
针对innodb进行快照备份(保存多个版本(MVCC)一致性快照)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容