mysqldump+binlog+gtid 实现数据库的增量备份(上)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDSClaw,2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: mysqldump+binlog+gtid 实现数据库的增量备份

mysqldump备份数据库

完全备份+增加备份,速度相对较慢,适合中小型数据库、MyISAM是温备份,InnoDB是热备份

mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级 时相对比较合适,这也是最常用的备份方法。

备份策略可以这么定:第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线 上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在 slave 机器上做备份。

  1. 示例一:备份恢复单个数据库
    备份:mydqldump -u 用户 –p’密码’ –default-character-set=Iatin1 数据库名 [|gzip] > 备份文件名
    示例:mysqldump -uroot -p'123456' --default-character-set=utf8 -B school > /tmp/school.$(date +%F).sql
    注意:-B 作用:创建数据库和切换到数据库,恢复时不用创建数据库和删表。备份多个库,-B 数据库1 数 据库2 …
    恢复:
    1)MySQL中用source命令
    source /backup/db/school.sql
    2)mysql命令恢复
    mysql -uroot -p123456 company < /backup/db/school.sql
  2. 示例二:备份恢复单个表
    备份:mysqldump -u 用户名 -p 数据库名 表名 > 备份的文件名
    示例:mysqldump -uroot -p school Books >/tmp/Books.$(date+%F).sql
    备份多个表:mysqldump -u 用户名 -p 数据库名 表名1 表名2 > 备份的文件名
  3. 示例三:备份数据结构
    -d只备份库结构,不包含数据内容

示例四:增量备份
前提:
1)my.cnf,是要开启MySQL log-bin日志功能,重启MySQL log_bin = /data/mysql/data/mysql-bin
2)存在一个完全备份,生产环境一般凌晨某个时刻进行全备
示例:mysqldump -uroot -p --default-character-set=utf8 --single-transaction -F -B school |gzip > /server/backup/school_$(date +%F).sql.gz InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性
MySQL增量恢复案例图解:
准备数据库和表:

create database it DEFAULT CHARACTER SET utf8; 

学生表:Student(Sno,Sname,Ssex,Ssage,Ssdept)(学号-主键,姓名,性别,年龄,所在系):

CREATE TABLE `Student` ( `Sno` int(10) NOT NULL COMMENT '学号', `Sname` varchar(16) NOT NULL COMMENT '姓名', `Ssex` char(2) NOT NULL COMMENT '性别', `Sage` tinyint(2) NOT NULL DEFAULT '0' COMMENT '学生年龄', `Sdept` varchar(16) DEFAULT 'NULL' COMMENT '学生所在系别', PRIMARY KEY (`Sno`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

表中插入数据:

INSERT INTO `Student` VALUES (1, '陆亚', '男', 24, '计算机网络'),(2, 'tom', '男', 26, '英语'),(3, '张阳', '男', 21, '物流管理'), (4, 'alex', '女', 22, '电子商务'); 

半夜零点手工全备:

mysqldump -uroot -p123456 -F -B it --default-character-set=utf8 --singletransaction -e | gzip > /server/backup/mysql_backup_`date +%F`.sql.gz 

备份后继续插入数据:

sleep 60
INSERT INTO Student values(0005,'xumubin','男',29,'中文专业'), (0006,'wangzhao','男',21,'导弹专业'); 

模拟用户破坏数据:

sleep 30
drop database it; 

增量备份–恢复过程
1、检查凌晨备份
2、检查全备后的所有binlog

ls -lrt /usr/local/mysql/data/mysql-bin.* 

3、立即刷新并备份出binlog

mysqladmin -uroot -p flush-logs 
cp /usr/local/mysql/data/mysql-bin.000004 /server/backup/ 
#  提示:根据时间点及前一个binlog可以知道发现问题时刻前binlog日志为mysql-bin.000004 

4、恢复binlog生成sql语句

mysqlbinlog mysql-bin.000004 > bin.log 

5、恢复凌晨备份
6、恢复增量备份
mysqlbinlog增量恢复方式
基于时间点恢复
1)指定开始时间到结束时间

myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ --stopdatetime=’2014-10-45 03:10:46’-r time.sql 

2)指定开始时间到文件结束

myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ -d esen -r time.sql 

3)从文件开头到指定结束时间

myslbinlog mysqlbin.000008 --stop-datetime=’2014-10-45 03:10:46’ -d esen -r time.sql 

基于位置点的增量恢复
1)指定开始位置到结束位置

myslbinlog mysqlbin.000008 --start-position=510 --stop-position=1312 -r pos.sql 

2)指定开始位置到文件结束

myslbinlog mysqlbin.000008 --start-position=510 -r pos.sql 

3)从文件开始位置到指定结束位置

myslbinlog mysqlbin.000008 --stop-position=1312 -r pos.sq

高级备份参数:

-R    备份存储过程及函数 
--triggers    备份触发器 
-E    备份事件 
-F    在备份开始时,刷新一个新binlog日志 
--master-data=2   以注释的形式,保存备份开始时间点的binlog的状态信息 
示例:[root@mysql mysql]# mysqldump -uroot -p -A -R --triggers --masterdata=2 > /tmp/full.sql 
[root@mysql mysql]# grep 'CHANGE MASTER' /tmp/full.sql | head -1 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=766; 

功能:

(1)在备份时,会自动记录,二进制日志文件名和位置号

0 默认值

1 以change master to命令形式,可以用作主从复制

2 以注释的形式记录,备份时刻的文件名+postion号

(2)自动锁表

(3)如果配合--single-transaction,只对非InnoDB表进行锁表备份,InnoDB表进行“热“备, 实际上是实现快照备份。

--single-transaction

innodb 存储引擎开启热备(快照备份)功能

master-data 可以自动加锁

(1)在不加--single-transaction ,启动所有表的温备份,所有表都锁定

(2)加上--single-transaction ,对innodb进行快照备份,对非innodb表可以实现自动锁表功能

示例: 备份必加参数 
mysqldump -uroot -p -A -R -E --triggers --master-data=2 --singletransaction --set-gti


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
10月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1568 1
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
1915 2
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
1457 2
|
SQL 关系型数据库 MySQL
使用mysql数据库的binlog应对故障
【6月更文挑战第1天】本文介绍`mysql的 binlog`工具用于解析MySQL的二进制日志,转换为可执行的SQL语句,主要用于数据库主从复制和增量恢复。定期备份和binlog推送能实现故障时的数据恢复。
691 9
使用mysql数据库的binlog应对故障
|
Oracle 关系型数据库 数据库
关系型数据库Oracle增量备份
【7月更文挑战第18天】
425 2
|
Java 关系型数据库 数据库
实时计算 Flink版产品使用问题之如何将增量数据直接写入下游数据库
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
关系型数据库 MySQL 数据库
关系型数据库mysql数据增量恢复
【7月更文挑战第3天】
354 2
|
SQL 运维 关系型数据库
|
关系型数据库 MySQL 数据库
MySQL mysqldump教程:轻松备份与迁移数据库
MySQL mysqldump教程:轻松备份与迁移数据库
1796 1
|
消息中间件 Oracle Kafka
实时计算 Flink版产品使用问题之启动多个job清洗会对原数据库的Binlog造成什么影响
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。