MySQL数据库的备份与恢复(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一、数据备份的重要性备份的主要目的是灾难恢复。在生产环境中,数据的安全性至关重要。任何数据的丢失都可能产生严重的后果。

示例1:

只想恢复"小号"和"长号"(即恢复最后两行,第7~8行)

use yuji;
 delete from class where cid between 5 and 8; #删除cid为5到8的数据记录
 cat /bak/binlog.txt    #查看二进制文件内容,找到小号的位置点
 #从小号的位置点3876一直恢复到结尾
 mysqlbinlog --no-defaults --start-position='3876' /bak/mysql-bin.000003 | mysql -u root -p
  mysql -u root -p -e 'select * from yuji.class;' #查看表数据
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


示例2:

只想恢复"竹笛"(即只恢复第5行)

use yuji;
 delete from class where cid between 5 and 8;  #删除cid为5到8的数据记录
 cat /bak/binlog.txt    #查看二进制文件内容,找到竹笛后面的位置点
 #从头开始恢复,在"竹笛"的SQL语句后面截止 
 mysqlbinlog --no-defaults --stop-position='3512' /bak/mysql-bin.000003 | mysql -u root -p
 mysql -u root -p -e 'select * from yuji.class;' #查看表数据
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


示例3:

只想恢复"古琴"和"小号"(即只恢复第6~7行)

use yuji;
 delete from class where cid between 5 and 8;  #删除cid为5到8的数据记录
 cat /bak/binlog.txt    #查看二进制文件内容,找到"古琴"和"小号"的位置点
 #从“古琴”前面的位置点开始恢复,一直到"小号"后面的位置点
 mysqlbinlog --no-defaults --start-position='3591' --stop-position='4082' /bak/mysql-bin.000003 | mysql -u root -p
 mysql -u root -p -e 'select * from yuji.class;'   #查看表数据
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|



网络异常,图片无法展示
|


2)基于时间点的断点恢复

注意:日期必须是"yyyy-mm-dd"的格式。

mysqlbinlog --no-defaults --start-datetime='时间点' 文件名 | mysql -u root -p
 #从某一个时间点开始恢复,一直到日志结尾
 mysqlbinlog --no-defaults --stop-datetime='时间点' 文件名 | mysql -u root -p
 #从日志开头,一直恢复到某一个时间点前结束
 mysqlbinlog --no-defaults --start-datetime='起始时间点' --stop-datetime'结束时间点' 文件名 | mysql -u root -p
 #从某一个时间点开始恢复,一直到某一个位置点前结束
复制代码


示例:

只想恢复"古琴"和"小号"(即只恢复第6~7行)

use yuji;
 delete from class where cid between 5 and 8;  #删除cid为5到8的数据记录
 cat /bak/binlog.txt    #查看二进制文件内容,找到"古琴"和"小号"的时间点
 #从“古琴”前面的时间点开始恢复,一直到"小号"后面的时间点
 mysqlbinlog --no-defaults --start-datetime='2022-06-06 0:18:26' --stop-datetime='2022-06-06 0:18:37' /bak/mysql-bin.000003 | mysql -u root -p
 mysql -u root -p -e 'select * from yuji.class;'   #查看表数据
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|




八、使用脚本备份

  • 使用脚本每周三进行一次完全备份,之后每天进行增量备份。
  • 如果数据量很大,可以一周做2次完全备份,比如星期一和星期四各一次。
  • 增量备份减少磁盘空间的占用,但恢复起来比较麻烦。需要一个一个恢复。
  • 一般使用crontab在凌晨进行备份。

获取最新的二进制文件名称

查看索引文件,可获取最新的二进制文件。

tail -1 /usr/local/mysql/data/mysql-bin.index
 或者
 sed -n '$p' /usr/local/mysql/data/mysql-bin.index
复制代码


网络异常,图片无法展示
|


完全备份脚本(每周三完全备份一次):

vim /opt/mysqlquan.sh      #编写脚本
 #!/bin/bash
 mysqldump -u root -p123456 --all-databases > /bak/all_$(date +%F).sql
 chmod 700 /opt/mysqlquan.sh    
 crontab -e                        #定时任务执行脚本
 00 1 * * 3  /opt/mysqlquan.sh     #每周三凌晨1点备份一次
复制代码


增量备份脚本(每天凌晨3点备份一次):

vim /opt/binlog.sh
 #!/bin/bash
 #使用sed命令打印二进制日志文件最后一行内容作为filename变量的值
 filename=$(sed -n '$p' /usr/local/mysql/data/mysql-bin.index | awk -F '/' '{print $2}')
 #将二进制日志移动到备份目录下,并将移动后的文件名称加上日期
 mv /usr/local/mysql/data/$filename  /bak/binlog_$(date +%F)
 #生成新的二进制日志文件
 mysqladmin -uroot -pabc123 flush-logs
 chmod 700 /opt/binlog.sh
 crontab -e 
 00 1 * * 3   /opt/mysqlquan.sh    #完全备份,每周三凌晨1点备份一次  
 00 3 * * *   /opt/binlog.sh       #增量备份,每天凌晨3点备份一次
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
安全 关系型数据库 MySQL
|
4天前
|
存储 Ubuntu 关系型数据库
如何在 Ubuntu VPS 上备份 PostgreSQL 数据库
如何在 Ubuntu VPS 上备份 PostgreSQL 数据库
7 1
|
4天前
|
JSON NoSQL Ubuntu
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
14 1
|
7天前
|
关系型数据库 数据库 PostgreSQL
Linux 环境手动备份postgresql数据库
【8月更文挑战第12天】在Docker环境中使用命令行工具对PostgreSQL数据库进行备份和恢复。首先,通过dockerexec进入容器,使用pg_dump进行数据库模式的备份,然后使用dockercp将备份文件导出。接着,若需导入数据到另一数据库,先将备份文件复制到目标容器,再利用psql命令进行数据恢复。整个过程需确保目标数据库无同名模式,以防止导入失败
15 3
|
25天前
|
Oracle 关系型数据库 数据库
|
29天前
|
存储 监控 Oracle
关系型数据库Oracle备份策略建议
【7月更文挑战第21天】
26 6
|
29天前
|
存储 Oracle 关系型数据库
|
29天前
|
运维 Oracle 关系型数据库
关系型数据库Oracle自动化备份
【7月更文挑战第21天】
33 3
|
6天前
|
SQL 数据库
SQL Server 还原 备份集中的数据库备份与现有的 'XXX' 数据库不同
SQL Server 还原 备份集中的数据库备份与现有的 'XXX' 数据库不同
11 0
|
30天前
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
41 5