CentOS7 MySQL 增量备份与恢复

简介: 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
12月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
2635 16
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
858 10
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
791 36
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
1361 5
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
662 28
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
3511 26
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
483 15
|
存储 安全 Linux
CentOS 7.9系统备份:每日定期发送最新备份文件到另一台服务器。
注意,这个解决方案忽略了很多细节,例如错误处理和通知、备份版本控制、循环处理旧的备份文件等等。此外,你也应该尽量保持源服务器和目标服务器之间快速,稳定且安全的网络连接,并且目标服务器应该有足够的空间用于存放每天的备份文件。如果你需要更高级的备份解决方案,可能需要考虑一下使用专门的备份工具或者服务。
760 18
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
967 0