mysqldump全量备份+mysqlbinlog二进制日志增量备份

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

mysqldump全量备份+mysqlbinlog二进制日志增量备份

1、mysqldump数据库增量备份前提:
1>要开启mysql log-bin日志功能,若没有开启则,修改配置文件/etc/my.cnf,添加如下内容:
[mysqld]
datadir=/var/lib/mysql/data
log-bin=mysql-bin
server-id=1
重启mysql

2>查看数据库是否开启了二进制日志打印功能:

1
2
3
4
5
6

mysql> show variables like 'log_%';
Variable_name                   Value              
log_bin                         ON                 

......
log_bin为ON 则表示该功能已经开启

3>存在一个完全备份,生产环境一般凌晨某个时刻进行全备
例如:mysqldump -uroot -p --default-character-set=gbk --single-transaction -F -B school |gzip > /backup/school_$(date +%F).sql.gz
InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性

2、mysqldump全量备份+mysqlbinlog二进制日志增量备份过程:

模拟00:00进行全量备份,误删数据库,恢复
1>准备数据库和表并向表中插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> create database school default character set utf8;    //创建school数据库
Query OK, 1 row affected (0.00 sec)

mysql> use school    //切换至school数据库
Database changed
mysql> create table student(
    -> id int(10) not null comment '学号',
    -> name varchar(16) not null comment '姓名',
    -> sex varchar(16) not null comment '性别',
    -> age tinyint(2) not null default '0' comment '学生年龄',
    -> dept varchar(16) default 'null' comment '学生所在系别',
    -> primary key (id))
    -> ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    -> COLLATE=utf8_general_ci;    //创建student表
Query OK, 0 rows affected (0.03 sec)

mysql> insert into student values    //向表中插入数据
    -> (1,'张三','男',24,'计算机'),(2,'李四','女',27,'英语'),
    -> (3,'王五','男',22,'电子商务'),(4,'赵六','女',20,'物流管理');
Query OK, 4 rows affected, 4 warnings (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 4

mysql> select * from student;    //查看student表中的所有字段的值
+----+--------+-----+-----+--------------+
| id | name   | sex | age | dept         |
+----+--------+-----+-----+--------------+
|  1 | 张三 | 男 |  24 | 计算机    |
|  2 | 李四 | 女 |  27 | 英语       |
|  3 | 王五 | 男 |  22 | 电子商务 |
|  4 | 赵六 | 女 |  20 | 物流管理 |
+----+--------+-----+-----+--------------+
4 rows in set (0.00 sec)
2>模拟凌晨00:00全备

1
2
[root@centos6 ~]# mkdir /backup    //创建备份文件夹
[root@centos6 ~]# date -s "20200225"
[root@centos6 ~]# mysqldump -uroot -p111111 --default-character-set=utf8 --single-transaction -F -B school -e | gzip > /backup/mysql_backup_date +%F.sql.gz
3>全备之后再向表中写入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@centos6 ~]# mysql -uroot -p111111
......
mysql> use school
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> insert into student values
    -> (5,'tom','男',29,'化学'),(6,'jack','女',19,'法语'),
    -> (7,'mimi','女',21,'化妆'),(8,'kaka','女',20,'酒店管理');
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from student;
 id  name   sex age dept        
  1 张三   24 计算机   
  2 李四   27 英语      
  3 王五   22 电子商务
  4 赵六   20 物流管理
  5 tom      29 化学      
  6 jack     19 法语      
  7 mimi     21 化妆      
  8 kaka     20 酒店管理

8 rows in set (0.00 sec)
4>模拟用户破坏数据

1
2
mysql> drop database school;
Query OK, 1 row affected (0.01 sec)
5>检查全备后的所有binlog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@centos6 ~]# ll -nat /var/lib/mysql/data/
总用量 21276
-rw-rw----. 1 27 27  5242880 2月  25 00:00 ib_logfile0
-rw-rw----. 1 27 27 10485760 2月  25 00:00 ibdata1
-rw-rw----. 1 27 27      416 2月  25 00:00 mysql-bin.000004
drwxr-xr-x. 4 27 27     4096 2月  25 00:00 .
-rw-rw----. 1 27 27       76 2月  25 00:00 mysql-bin.index
-rw-rw----. 1 27 27     1581 2月  25 00:00 mysql-bin.000003
drwx------. 2 27 27     4096 1月  12 18:34 school
drwxr-xr-x. 3 27 27     4096 1月  12 18:31 ..
-rw-rw----. 1 27 27  5242880 1月  12 18:31 ib_logfile1
-rw-rw----. 1 27 27   765307 1月  12 18:31 mysql-bin.000002
-rw-rw----. 1 27 27    19734 1月  12 18:31 mysql-bin.000001
drwx------. 2 27 27     4096 1月  12 18:31 mysql
6>立即刷新;再次查看binlog:根据时间点及前一个binlog可以知道发现问题时刻前binlog日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@centos6 ~]# mysqladmin -uroot -p111111 flush-logs
[root@centos6 ~]# ll -nat /var/lib/mysql/data/
总用量 21276
drwxr-xr-x. 3 27 27     4096 2月  25 00:05 .
-rw-rw----. 1 27 27       95 2月  25 00:05 mysql-bin.index
-rw-rw----. 1 27 27      106 2月  25 00:05 mysql-bin.000005    //锁定该binlog
-rw-rw----. 1 27 27      544 2月  25 00:05 mysql-bin.000004
-rw-rw----. 1 27 27  5242880 2月  25 00:03 ib_logfile0
-rw-rw----. 1 27 27 10485760 2月  25 00:03 ibdata1
-rw-rw----. 1 27 27     1581 2月  25 00:00 mysql-bin.000003
drwxr-xr-x. 3 27 27     4096 1月  12 18:31 ..
-rw-rw----. 1 27 27  5242880 1月  12 18:31 ib_logfile1
-rw-rw----. 1 27 27   765307 1月  12 18:31 mysql-bin.000002
-rw-rw----. 1 27 27    19734 1月  12 18:31 mysql-bin.000001
drwx------. 2 27 27     4096 1月  12 18:31 mysql
7>备份出binlog至/backup目录

1
[root@centos6 ~]# cp /var/lib/mysql/data/mysql-bin.* /backup/
8>恢复school数据库:
(1)恢复全量备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@centos6 data]# cd /backup/
[root@centos6 backup]# zcat mysql_backup_2020-02-25.sql.gz >mysql_backup_2020-02-25.sql
[root@centos6 backup]# mysql -uroot -p111111 -e "create database school;"
[root@centos6 backup]# mysql -uroot -p111111 school < /backup/mysql_backup_2020-02-25.sql
[root@centos6 backup]# mysql -uroot -p111111
......
mysql> use school
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from student;
 id  name   sex age dept        
  1 张三   24 计算机   
  2 李四   27 英语      
  3 王五   22 电子商务
  4 赵六   20 物流管理

4 rows in set (0.00 sec)    //增量恢复成功
mysql> quit
(2)恢复增量备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@centos6 backup]# cd /var/lib/mysql/data/
[root@centos6 data]# mysqlbinlog -d school mysql-bin.000004 > school-bin.sql
[root@centos6 data]# mysqlbinlog -d school mysql-bin.000005 >> school-bin.sql
[root@centos6 data]# vim school-bin.sql    //打开school-bin.sql删除drop sql语句
[root@centos6 data]# mysql -uroot -p111111 school < school-bin.sql
ERROR 1007 (HY000) at line 65: Can't create database 'school'; database exists    //因为school已经恢复至全量备份,所以此处提示school数据库已经存在,不过不要紧,对存在的数据覆盖
[root@centos6 data]# mysql -uroot -p111111
......
mysql> use school
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from student;
 id  name   sex age dept        
  1 张三   24 计算机   
  2 李四   27 英语      
  3 王五   22 电子商务
  4 赵六   20 物流管理
  5 tom      29 化学      
  6 jack     19 法语      
  7 mimi     21 化妆      
  8 kaka     20 酒店管理

8 rows in set (0.00 sec)    //增量备份恢复
mysql> quit
9>总结
mysqlbinlog增量恢复方式
基于时间点恢复
(1)指定开始时间到结束时间 myslbinlog mysqlbin.000005 --start-datetime='2020-02-25 01:10:46' --stop datetime='2020-02-25 03:10:46' -r time.sql
(2)指定开始时间到文件结束 myslbinlog mysqlbin.000005 --start-datetime='2020-02-25 01:10:46' -d esen -r time.sql
(3)从文件开头到指定结束时间 myslbinlog mysqlbin.000005 --stop-datetime='2020-02-25 03:10:46' -d esen -r time.sql
基于位置点的增量恢复
(1)指定开始位置到结束位置 myslbinlog mysqlbin.000005 --start-position=510 --stop-position=1312 -r pos.sql
(2)指定开始位置到文件结束 myslbinlog mysqlbin.000005 --start-position=510 -r pos.sql
(3)从文件开始位置到指定结束位置 myslbinlog mysqlbin.000005 --stop-position=1312 -r pos.sql
或者
在增量备份的时候,可以将二进制文件转化成.sql语句,然后在删除“drop”语句,修改.sql,再导入即可(上述恢复采用该方法)

3、实现自动化备份(数据库小)
1>备份计划:
(1)什么时间:2:00
(2)对那些数据备份
(3)备份的文件放的位置

2>备份脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@centos6 ~]# vim /mysql_back.sql

!/bin/bash

back_dir=/backup
back_file=date +%F_all.sql
user=root
pass=111111

if [ ! -d /backup ];then
 mkdir -p /backup
fi

备份并截断日志

mysqldump -u${user} -p${pass} --lock-all-tables --routines --events --triggers -
-master-data=2 --flush-logs --all-databases > /$back_dir/$back_file

只保留最近一周的备份

cd $back_dir
find . -mtime +7 -exec rm -rf {} ;
3>测试:

1
2
3
4
[root@centos6 ~]# chmod +x /mysql_back.sql
[root@centos6 ~]# /mysql_back.sql
[root@centos6 ~]# ls /backup
2020-02-25_all.sql
4、复制数据文件
复制数据文件方式,可以使用cp或tar
(1)停止服务

1
[root@centos6 ~]# service mysqld stop
(2)备份数据文件

1
2
[root@centos6 ~]# mkdir /backup
[root@centos6 ~]# tar cvf /backup/all.date +%F.tar.gz /var/lib/mysql/*
(3)将备份文件拷贝到目标服务器

1
scp /backup/all.date +%F.tar.gz 192.168.129.142:/tmp/
(4)启动服务,如有需要则恢复数据库数据

原文地址https://www.cnblogs.com/zyybky/p/12364583.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
27 1
|
1月前
|
SQL 关系型数据库 MySQL
Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志
Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志
37 0
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
57 0
|
3月前
|
SQL 安全 测试技术
【数据守护者必备】SQL数据备份与恢复策略全解析:从全量到日志备份,手把手教你确保企业信息万无一失的实战技巧!
【8月更文挑战第31天】数据库是企业核心业务数据的基石,为防止硬件故障、软件错误或人为失误导致的数据丢失,制定可靠的备份与恢复策略至关重要。本文通过一个在线购物平台的案例,详细介绍了使用 SQL Server 进行全量备份、差异备份及事务日志备份的方法,并演示了如何利用 SQL Server Agent 实现自动化备份任务。此外,还提供了数据恢复的具体步骤和测试建议,确保数据安全与业务连续性。
145 0
|
4月前
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
67 5
|
4月前
|
存储 关系型数据库 MySQL
|
5月前
|
SQL DataWorks Oracle
DataWorks产品使用合集之datax解析oracle增量log日志该如何操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
58 0
|
11天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
117 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
218 3
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1627 14