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
相关文章
|
13天前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
37 4
|
2月前
|
安全 关系型数据库 MySQL
Linux(CentOS6)安装MySQL5.6
Linux(CentOS 6)系统上安装MySQL 5.6版本的详细步骤,包括准备数据存放目录、创建用户、下载安装包、初始化数据库、配置服务脚本、设置环境变量等操作。
167 1
|
2月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
177 8
centos7 mysql安装及配置
|
2月前
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
37 3
|
2月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
2月前
|
存储 关系型数据库 MySQL
MySQL备份与恢复
MySQL备份与恢复
47 0
|
2月前
|
关系型数据库 MySQL Shell
分享一篇mysql数据库备份脚本
分享一篇mysql数据库备份脚本
24 0
|
2月前
|
关系型数据库 MySQL Shell
MySQL 备份:从mysqldump全备中 匹配出某几个表
MySQL 备份:从mysqldump全备中 匹配出某几个表
|
2月前
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
101 3
|
2月前
|
关系型数据库 MySQL Linux
在CentOS上使用yum安装与使用MySQL
在CentOS操作系统上使用yum包管理器安装和配置MySQL数据库的详细步骤,包括下载MySQL的yum源配置、安装MySQL服务、启动和停止服务、设置开机自启动、获取临时密码、修改root用户密码、授权用户以及处理相关问题。同时,文章还包含了一些操作的截图,帮助用户更直观地理解安装和配置过程。
414 0
在CentOS上使用yum安装与使用MySQL