CentOS7 MySQL 增量备份与恢复

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

CentOS7 MySQL 增量备份与恢复



一、MySQL 增量备份与恢复概述


    1.增量备份的特点

    2.MySQL 二进制日志对备份的意义


二、MySQL 增量备份与恢复三种方式


    1.一般备份与恢复

    2.基于位置的恢复

    3.基于时间的恢复


一、MySQL 增量备份与恢复概述



  • 使用 mysqldump 进行完全备份,备份的数据中有重复的数据,备份时间与恢复时间长;
  • 而增量备份就是备份自上一次备份之后的增加或改变的文件或内容。


1.增量备份的特点


  • 与完全备份不同,增量备份没有重复的数据,备份量不大,时间短;
  • 但其恢复麻烦,需要上次完全备份及完全备份之后所有的增量备份才能恢复;
  • 而且要对所有增量备份进行逐个反推恢复,MySQL 没有提供直接的增量备份办法,可以通过 MySQL 二进制日志(binary log)间接实现增量备份。


2.MySQL 二进制日志对备份的意义


二进制日志保存了所有更新数据库的操作。二进制日志在启动 MySQL 服务器后开始记录,并在文件达到二进制日志所设置的最大值或者接收到 flush logs 命令后重新创建新的日志文件,生成二进制文件序列,并及时把这些日志保存到安全的存储位置,即可完成一个时间段的增量备份。


  • 使用 max_binlog_size 配置项可以设置二进制日志文件的最大值,达到最大值,它就会自动创建新的二进制文件。


二、MySQL 增量备份与恢复三种方式



准备工作:


image.png


  • 三种增量备份方式都需要有完全备份。


1.一般备份与恢复


1)先录入样本


[root@MySQL ~]# mysql -uroot -p123                  # 登录MySQL数据库
mysql> create database zhangsan;                  # 创建一个名为 zhangsan 的库
mysql> use zhangsan                         # 进入 zhangsan 库
mysql> create table 成绩表(姓名 char(9),成绩 char(9));       # 创建一个成绩表
mysql> insert into 成绩表 values('张三','88');           # 往成绩表里写入数据
mysql> insert into 成绩表 values('李四','77');           # 往成绩表里写入数据
mysql> select * from 成绩表;                   # 查看成绩表中数据


image.png


2)进行完全备份


[root@MySQL ~]# mkdir /mysql.bak
[root@MySQL ~]# mysqldump -uroot -p123 zhangsan 成绩表 > /mysql.bak/zhangsan_成绩表-$(date +%F).sql
[root@MySQL ~]# ls -l /mysql.bak/


image.png


3)开启日志文件


[root@MySQL ~]# vim /usr/local/mysql/my.cnf
在 [mysqld] 下添加:
log_bin=/usr/local/mysql/mysql-bin


4)重启服务


[root@MySQL ~]# systemctl restart mysqld
[root@MySQL ~]# netstat -anpt | grep mysqld


image.png


5)查看生成的日志文件


[root@MySQL ~]# ll /usr/local/mysql/mysql-bin.*           # 查看生成的日志文件
[root@MySQL ~]# mysqladmin -uroot -p123 flush-logs          # 刷新日志
[root@MySQL ~]# ll /usr/local/mysql/mysql-bin.*           # 再次查看生成的日志文件


image.png


6)再次录入样本


[root@MySQL ~]# mysql -uroot -p123
mysql> use zhangsan;
mysql> insert into 成绩表 values('王五','66');
mysql> insert into 成绩表 values('赵六','55');
mysql> select * from 成绩表;


image.png


7)进行增量备份


[root@MySQL ~]# mysqladmin -uroot -p123 flush-logs              # 刷新日志
[root@MySQL ~]# ls -l /usr/local/mysql/mysql-bin.*              # 查看生成的日志文件
[root@MySQL ~]# cp /usr/local/mysql/mysql-bin.000002 /mysql.bak/


image.png


8)模拟故障,删除成绩表


[root@MySQL ~]# mysql -uroot -p123 -e 'drop table zhangsan.成绩表;'
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


image.png


9)先恢复完全备份,再进行增量恢复


先恢复完全备份:
[root@MySQL ~]# mysql -uroot -p123 zhangsan < /mysql.bak/zhangsan_成绩表-2021-02-17.sql 
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'
再增量恢复:
[root@MySQL ~]# mysqlbinlog --no-defaults /mysql.bak/mysql-bin.000002 | mysql -uroot -p123
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


image.png


2.基于位置的恢复


  • 模拟故障,删除成绩表。


[root@MySQL ~]# mysql -uroot -p123 -e 'drop table zhangsan.成绩表;'
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


查看二进制文件来根据位置恢复:


[root@MySQL ~]# mysqlbinlog --no-defaults /mysql.bak/mysql-bin.000002 | grep -v "/"


image.png


1)先恢复完全备份,再进行基于停止位置恢复


  • 指定 停止位置,即不恢复 赵六 的用户数据。


先恢复完全备份:
[root@MySQL ~]# mysql -uroot -p123 zhangsan < /mysql.bak/zhangsan_成绩表-2021-02-17.sql 
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'
再指定停止位置恢复数据:
[root@MySQL ~]# mysqlbinlog --no-defaults --stop-position='450' /mysql.bak/mysql-bin.000002 | mysql -uroot -p123
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


image.png


  • 再次模拟故障,指定起始位置:即只恢复 赵六 的数据,跳过 王五 的数据。


[root@MySQL ~]# mysql -uroot -p123 -e 'drop table zhangsan.成绩表;'
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


2)先恢复完全备份,再进行基于起始位置恢复


先恢复完全备份:
[root@MySQL ~]# mysql -uroot -p123 zhangsan < /mysql.bak/zhangsan_成绩表-2021-02-17.sql 
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'
再指定起始位置恢复数据:
[root@MySQL ~]# mysqlbinlog --no-defaults --start-position='450' /mysql.bak/mysql-bin.000002 | mysql -uroot -p123
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


image.png


3.基于时间的恢复


  • 模拟故障,删除成绩表。


[root@MySQL ~]# mysql -uroot -p123 -e 'drop table zhangsan.成绩表;'
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


查看二进制文件来根据时间恢复


[root@MySQL ~]# mysqlbinlog --no-defaults /mysql.bak/mysql-bin.000002 | grep -v "/"


image.png


1)先恢复完全备份,再指定结束时间进行恢复


[root@MySQL ~]# mysql -uroot -p123 zhangsan < /mysql.bak/zhangsan_成绩表-2021-02-17.sql 
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'
[root@MySQL ~]# mysqlbinlog --no-defaults --stop-datetime='2021-02-18 0:25:19' /mysql.bak/mysql-bin.000002 | mysql -uroot -p123
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


image.png


再次模拟故障


[root@MySQL ~]# mysql -uroot -p123 -e 'drop table zhangsan.成绩表;'
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


2)先恢复完全备份,再指定起始时间进行恢复


[root@MySQL ~]# mysql -uroot -p123 zhangsan < /mysql.bak/zhangsan_成绩表-2021-02-17.sql 
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'
[root@MySQL ~]# mysqlbinlog --no-defaults --start-datetime='2021-02-18 0:25:19' /mysql.bak/mysql-bin.000002 | mysql -uroot -p123
[root@MySQL ~]# mysql -uroot -p123 -e 'select * from zhangsan.成绩表;'


image.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
14 3
|
2天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
13 3
|
9天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
32 3
|
10天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
20 2
|
12天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
51 2
|
28天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置服务等,并与使用 RPM 包安装进行了对比,帮助读者根据需求选择合适的方法。编译源码安装虽然复杂,但提供了更高的定制性和灵活性。
206 2
|
30天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤
【10月更文挑战第7天】本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据自身需求选择合适的方法。
52 3
|
1月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
53 3
|
1月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
83 3
|
3天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
16 4
下一篇
无影云桌面