mysql 备份恢复-mysqldump

备份恢复

mysql数据损坏类型

1.物理损坏 

磁盘损坏:硬件,磁道坏,dd,格式化

文件损坏:数据文件损坏,redo损坏

2.逻辑损坏

drop,delete,truncate,update 

运维人员在备份,恢复的指责

1.设计备份,容灾策略

备份策略:

备份工具的选择;

备份周期设计;

备份监控方法

容灾策略:

备份:什么备份;

架构:高可用,演示从库,灾备库

2.定期备份,容灾检查

备份软件 ----> 带库 

两地三中心:

每周   北京 ==》天津    数据库相互切换 

3.定期的故障恢复演练

使用从库和测试库进行演练 

4.数据损坏时的快速准确恢复

5.数据迁移工作


Mysql 常用的备份工具

逻辑备份方式

mysqldump (MDP) *******

mydumper(自行扩展)

load data in file(自行扩展)

物理备份方式

企业版  Mysql Enterprise Backup(企业版)

Percona  Xtrabackup (PBK,XBK) *****


mysqldump (MDP) 应用

介绍

逻辑备份工具。备份的是SQL语句。

InnoDB表:

利用多版本特性,采取快照备份的方式。开启一个独立的事务。

获取当前最新的一致性快照,将快照数据,放在临时表中转换为sql语句,保存到SQL文件中。

非InnoDB表:

需要锁表备份。触发FTWRL,全局锁表。转换为sql语句,保存到SQL文件中。

mysqldump的核心参数

连接参数:

-u 用户名

-p 密码

-h ip地址

-P 端口

-S socket 

备份参数 :

-A  全备

mkdir -p /data/backup

chown mysql.mysql /data/* 

mysqldump -uroot -pluobiao123 -S /tmp/mysql.sock -A > /data/backup/full.sql 

-B 单库或者多库 

 mysqldump -uroot -pluobiao123 -S /tmp/mysql.sock -B world  > /data/backup/world.sql 

备份单表或者多表

mysqldump -uroot -pluobiao123 -S /tmp/mysql.sock world  t9  t1   > /data/backup/world.sql

备份所有的表:

mysqldump -uroot -pluobiao123 -S /tmp/mysql.sock world   > /data/backup/world.sql

恢复的时候,需要先建库,在use 库,在恢复.

备份高级参数:

每周23:00全备,周1-6binlog备份,所有备份是完整的。

周三时,又一个核心运维人员进行删库操作。

恢复全备 + 所有需要的binlog恢复。

问题?binlog的截取

起点查找比较困难:

方法一:备份开始时,切割日志。-F 

方法二:备份开始时,自动记录日志文件信息

终点 :drop 之前的位置 

--master-data=2 

--master-data=[=#]

功能:

备份时自动记录当前的最新binlog信息,得到准确的position号,

用来恢复数据值,方便进行全备之后的binlog日志恢复。

自动锁表和解表

配合single transaction 可以减少锁表时间 


--single-transaction

作用:对于innodb表备份时,开启一个事务,获取一致性快照进行备份,减少锁表。

测试:mysqldump -uroot -pluobiao123  --single-transaction --master-data=1   -S /tmp/mysql.sock -A > /data/backup/full2.sql

-R 备份存储过程,函数  -E  事件    --triggers    触发器 

测试:mysqldump -uroot -pluobiao123   -R -E --triggers  --single-transaction --master-data=1   -S /tmp/mysql.sock -A > /data/backup/full3.sql

--max_allowed_packet=64M  客户端  《=====》服务端 双向发送数据的大小设置

作用:


测试:测试:mysqldump -uroot -pluobiao123 --max-allowed-packet=64M   -R -E --triggers  --single-transaction --master-data=1   -S /tmp/mysql.sock -A > /data/backup/full4.sql 

上面的语句就是mysql的最终的逻辑备份的语句的完整版,参数缺一不可。

5.基于mysqldump + binlog 故障恢复案例

案例环境:centos7.6 + mysql5.7.28  LNMT网站业务,数据量100G,

每天5-10M增长

备份策略:mysqldump每天全备,binlog定时备份。

故障模拟:周三上午10点数据故障,例如:核心业务库被删除。

恢复思路:

1.挂维护页。

2.找测试库。

3.恢复周二全备。

4.截取周二全备至周三上午10点之前误删的binlog,并恢复

5.测试业务功能是否正常

6.恢复业务:

方案1:故障库导回到原生产

方案2:直接用测试库充当生产业务

模拟数据损坏及恢复:

1.模拟原始数据

create database mdp charset=utf8mb4;

use mdp;

create table t1(id int);

begin;

insert into t1 values(1),(2),(3);

commit;

2.模拟周二晚上全备

mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M  >/data/backup/full_`date +%F`.sql

3.模拟周三数据变化 

mysql> create table t2 (id int );

Query OK, 0 rows affected (0.12 sec)

mysql> insert into t2 values(1),(2),(3);

4.发生误操作 

mysql> drop database mdp;

5.开始恢复

5.1恢复全备

检查全备:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=787;

5.2 恢复全备

source /data/backup/full_2020-03-28.sql

5.3 截取binlog 

起点:

[root@later03 backup]# grep "\-- CHANGE MASTER*" /data/backup/full_2020-03-28.sql 

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=787;

终点:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------------------------------+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |

+------------------+----------+--------------+------------------+-------------------------------------------+

| mysql-bin.000017 |    1364 |              |                  | 7acb1b1a-6660-11ea-b89b-00163e0477d5:1-17 |

+------------------+----------+--------------+------------------+-------------------------------------------+

mysql>   show binlog events in 'mysql-bin.000017';

| mysql-bin.000017 | 1275 | Query          |        6 |        1364 | drop database mdp                                                  |

所以起点position号:787  终点:1275  

开始截取 :

mysqlbinlog  --start-position=787  --stop-position=1275   --skip-gtids     /data/binlog/mysql-bin.000017   > /tmp/bbq.sql

5.4开始恢复:

不再计入binlog

set sql_log_bin = 0;

source /tmp/bbq.sql 

开启binlog 

set sql_log_bin = 0;


6.使用gtid恢复

6.1.使用全备恢复 

6.2 寻找起点

[root@later03 backup]# grep "\-- CHANGE MASTER*" /data/backup/full_2020-03-28.sql 

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=787;

找到该position号对应的事务ID;

show binlog events in 'mysql-bin.000017';

| mysql-bin.000017 |  787 | Gtid          |        6 |        852 | SET @@SESSION.GTID_NEXT= '7acb1b1a-6660-11ea-b89b-00163e0477d5:15' |


6.3寻找终点:

| mysql-bin.000017 |  949 | Gtid          |        6 |        1014 | SET @@SESSION.GTID_NEXT= '7acb1b1a-6660-11ea-b89b-00163e0477d5:16' |

| mysql-bin.000017 | 1014 | Query          |        6 |        1085 | BEGIN                                                              |

| mysql-bin.000017 | 1085 | Table_map      |        6 |        1129 | table_id: 406 (mdp.t2)                                            |

| mysql-bin.000017 | 1129 | Write_rows    |        6 |        1179 | table_id: 406 flags: STMT_END_F                                    |

| mysql-bin.000017 | 1179 | Xid            |        6 |        1210 | COMMIT /* xid=5122 */                                              |

| mysql-bin.000017 | 1210 | Gtid          |        6 |        1275 | SET @@SESSION.GTID_NEXT= '7acb1b1a-6660-11ea-b89b-00163e0477d5:17' |

| mysql-bin.000017 | 1275 | Query          |        6 |        1364 | drop database mdp   

6.3 截取日志  

mysqlbinlog --include-gtids='7acb1b1a-6660-11ea-b89b-00163e0477d5:15-16'  --skip-gtids   /data/binlog/mysql-bin.000017   >/tmp/bbq3.sql


6.4进行恢复

set sql_log_bin=0;

source /tmp/bbq3.sql

set sql_log_bin=1;

总结:

选择场景:

数据量较少,建议mysqldump。大约在100G -200G左右。大概1个小时-2个小时。

恢复是备份时间的2~3倍左右。

优点:可读性比较强,压缩比高,不需要下载安装,自带工具。

缺点:备份时间相对较长,恢复时间比备份时间长。

分布式架构,数据量较大的时候,可以才用分布式备份,也可以 选择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

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

推荐阅读更多精彩内容

  • 1.DBA(运维)在备份恢复方面需要做哪些工作 1.1 设计备份策略 1.1.1 备份周期 天,周,月 1.1.2...
    学Linux的小子阅读 744评论 0 1
  • 备份 一般分为物理备份(物理文件)和逻辑备份(sql语句)物理备份 只要备份物理文件 速度快不跨平台 linux ...
    不排版阅读 690评论 0 3
  • 上节回顾: 存储引擎种类 InnoDB 核心特性 事务ACID 锁 ,隔离级别 innodb_flush_log_...
    JoinMyTeam阅读 158评论 0 0
  • 1. DBA(运维)在备份恢复需要做哪些工作 1.1 设计备份策略 备份周期天,周,月备份方式全备,增量备份什么数...
    新_WX阅读 316评论 0 1
  • DBA职责 1备份策略的设计备份周期:根据数据量备份工具:mysqldump , XBK(percona xtrb...
    大仙儿没溜儿阅读 298评论 0 1