第1章 运维在数据库备份恢复方面的职责
1.1 设计备份呢策略
在备份前需要思考 备份什么数据 什么方式 什么时间 周期是多久 备份脚本的设计等
1.1.1 备份什么数据
数据库的数据
二进制日志
配置文件
1.1.2 什么时间备份
应该选择在业务的低谷期做备份 比如夜间
因为在备份时会发生锁表操作 这时非常影响用户的体验
1.1.3 备份周期
尽量每周一次全备 每天一次增量备份 具体看公司业务需求
1.1.4 备份方式
备份分为
逻辑备份 使用的工具是 mysqldump + binlog(二进制日志)
物理备份 使用的工具是 xtrabackup (xbp)
备份方式又细分为:
全备 数据库整体备份
增量 前提有数据库整体的备份 每天将新内容备份
热备 不停机 停服务的备份
冷备 将业务停止后 在进行备份
1.2 备份检查
检查方式:
查看日志信息
查看备份集的大小和完整性
一般mysqldump方式备份的数据会比元数据大一点 但是压缩比高
innobackupex 方式备份的数据 和元数据一致大小 但是压缩包低
第2章 备份方式
2.1 mysqldump (MDP)
mysqldump是MySQL服务自带的逻辑备份工具, 备份的就是将数据库数据转换成为sql语句 打印出来
备份后的是文本形象, 可读性好,便于管理和备份处理,压缩比更高
适合于数据量小的库备份
一般建议小于100G的库或者大于1T的库进行备份操作
小于100g一般备份时间在30-50分钟之间
大于1t的数据一般都是进行分布式备份 每个库分别备份 加上压缩比优势 让mysqldump脱颖而出
2.2 mysqldump应用
备份原理是 将数据,表 库结构 传输到innodb buffer pool中 转换成sql语句后 输出到屏幕
数据量大的时候 会很消耗临时表和内存 索引尽量是在低谷期进行备份
2.3 mysqldump备份参数
2.3.1 基础参数
mysqldump -uroot -p123 -A >/xxx.sql 2>/dev/null
参数:
-A 全备模式 将库中所有内容进行备份
-B 单库或多库备份
mysqldump -uroot -p123 -B 库01 库02 >/xxx.sql 2>/dev/null
库之间用空格分隔
2.3.2 单表备份或多表
mysqldump -uroot -p123 库 表01 表02 >/xxx.sql 2>/dev/null
第一个写库名 后面写表名 表之间用空格分隔
说明: 在单表或多表备份后 恢复数据时 需要先创建库 use 库中后 在用source命令进行恢复数据
2.4 高级参数
2.4.1 –master-data=2
作用:
以注释方式,在备份文件中自动记录二进制日志名+位置信息 一般是在20多行作用
会自动进行锁表操作. (innodb引擎除外)
补充命令:
mysqldump -uroot -p123 -A --master-data=2 >/xxx.sql 2>/dev/null
2.4.2 --single-transaction
在开启备份时 对innodb引擎表 生成一个一致性快照备份 这样就不会阻塞使用innodb引擎表的正常业务操作 只能对InnoDB 引擎生效
mysqldump -uroot -p123 -A --master-data=2 --single-transaction >/xxx.sql 2>/dev/null
2.4.3 –triggers -R -E
-R 备份存储过程函数等 (理解为脚本)
-E 备份事件 (理解为定时任务)
--triggers 备份触发器
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E –triggers >/xxx.sql 2>/dev/null
2.4.4 –max_allowed_packet=128M
备份大数据量表的时候需要添加 允许客户端接收超过128M大小的数据包
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E –triggers –max_allowed_packet=128M >/xxx.sql 2>/dev/null
2.5 企业一般应用备份语句
压缩备份的数据 并以时间做名称 利于恢复数据 清理空间
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=128M | gzip > /backup/full_$(date +%F).sql.gz
第3章 musqlduop恢复数据
3.1 备份检查(全备 binlog)
全备数据 检查数据
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=128M | gzip > /backup/full_$(date +%F).sql.gz
然后根据二进制日志恢复每天的数据
3.2 binlog恢复数据
需要注意的是 binlog文件恢复数据的原则是 原来有的数据(库 表 数据)会进行删除 在进行添加(密等性)
为了不对数据库做出二次伤害 需要注意这些drop语句
起点:
终点: 为错误操作之前
3.3 截取binlog日志
mysqlbinlog --include-gtids='79f1839c-0439-11ea-83bb-000c29d354c0:4-7' --skip-gtids mysql-bin.000002 mysql-bin.000003 mysql-bin.000004 mysql-bin.000005 >/data/backup/bin.sql
3.4 恢复数据
MySQL库内进行恢复数据
set sql_log_bin=0;
source /data/backup/full_2019-11-20.sql
source /data/backup/bin.sql
set sql_log_bin=1;