MySQL的备份恢复

数据备份的重要性

1.生产环境中,数据的安全至关重要

   任何数据的丢失都会导致非常严重的后果。

2.数据为什么会丢失 :程序操作,运算错误,磁盘故障,不可预期的事件(地震,海啸),人为操作

数据库备份的分类和备份策略

1.物理备份

物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。

物理备份方法:

冷备份(脱机备份) :是在关闭数据库的时候进行的
热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作


2)逻辑备份

逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份。

即以sql语句的形式,把库、表结构、表数据保存下来。

数据库的备份策略 

  • 完全备份(全量备份):每次对数据库进行完整的备份。
  • 差异备份:备份自从上次完全备份之后被修改过的文件。
  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份。

如何进行物理备份

systemctl stop mysqld
#关闭MySQL1的服务器。因为关闭服务可以避免新的数据插入或者数据覆盖cd usr/local/mysql/cd datacd kgc安装软件包tar Jcvf /opt/mysql_all_$(data +%F).tar.xz /usr/local/mysql/data/
#打包data的内容lstar -Jxvf mysql_all_
#解压文件cd usr/local/mysql/rm -rf data
#删库cd /opt/cd usr/local/mysqlcp -a data/ /usr/local/mysql
#保留权限复制systemctl restart mysqld
#重启mysql服务到另外一台库cd /usr/local/mysql/cp -a data/ /opt/
#MySQL2自己先做一个文件备份scp -r root@20.0.0.60:/opt/usr/local/mysql/data /opt/
#远程复制到MySQL2cp -a data/ /usr/local/mysql/data
#保留权限复制到MySQL2systemctl restart mysqld
#重启服务登录一下chown -R mysel.mysql kgc kgc1
#递归给两个库更改归属
#看到无法阅读,就说明没有给权限的问题

如何把本地数据库迁移上云

1.

Xshell与公网IP相连

然后在云服务上进行编译安装

将本地服务器当中需要备份的文件通过(sz   rz)拖入云服务器中

热备份当中的逻辑备份

用到mysql自带的工具 mysqldump

备份命令

备份单个:mysqldump -u root -p123456 --databases test > /opt/zzr.sql备份多个库:mysqldump -u root -p 123456 --databases test test1 > /opt/test1.sql备份所有库:mysqldump -u root -p123456 -all-databases > /opt/test3.sql

mysqldump -u root -p --databases kgc > /opt/kgc.sqlcd /usr/local/mysql/data/
lsrm -rf kgc
//删库mysql -u root -p < /opt/kgc.sql
#会直接报错,库会回来,但是kgc库里面的表结构消失了。只能使用逻辑删除(在命令行删除)mysql -u root -p123456 -e 'show databases;'
#-e:表示连接指定MySQL之后执行完命令后就自动退出
#进入MySQL执行一次show databases命令后就退出mysql -u root -p -e 'drop database kgc;'
#需要手动数据密码mysql -u root -p < /opt/kgc.sql
#手动输入密码对多个库一次性备份
先备份多个库
mysqldump -u root -p --databases kgc kgc1 > /opt/kgc_all.sql
#手动输入密码。保存多个库mysql -u root -p -e 'drop database kgc;'
mysql -u root -p -e 'drop database kgc1;'
#手动输入密码。模拟删除库mysqldump -u root -p < /opt/kgc_all.sql
#手动输入密码。一次性恢复多个库对全部库一次性备份
mysqldump -r root -p --all-databases > /opt/all_database.sql

mysql -u root -p123456 -e 'show databases;'

进入mysql之后自动执行命令,结束后自动退出

-e:指定连接mysql之后执行完命令自动退出

恢复命令

mysql -u root -p < /opt/test.sql

如何只恢复数据表

恢复单个表
先备份
mysqldump -u root -p kgc info1 > /opt/kgc_info1.sql
cd /opt
ls
mysql -u root -p -e 'drop table kgc.info1;'
指定库名恢复
mysql -u -root -p kgc < /opt/kgc_info1.sqlmysqldump -u root -p kgc info1 info2 > /opt/kgc_info1-2.sql
//重定向备份mysql -u root -p -e 'drop table kgc.info1;'
mysql -u root -p -e 'drop table kgc.info2;'
//删表mysql -u root -p kgc < /opt/kgc_info1-2.sql
//恢复MySQL1全部数据库的逻辑备份文件恢复到MySQL2。scp root@20.0.0.110:/opt/all_database.sql /opt/mysql -u root -p < all_database.sql
#用sql语句的方式热备份直接转换。

物理冷备份和物理热备份

:特点 简单

数据量 占用备份空间较大

mysqldump 这是MySQL自带的备份文件的命令

特点:方便,简单,但是只能基于逻辑上的表结构和表数据恢复。物理删除之后再用逻辑恢复会报错。

也可以作为数据迁移,必然会占用更大空间。比较物理备份,相对来说占的空间要小得多。

增量备份

mysqldump支持增量备份

没有重复数据,备份量小,时间短。

mysqldump增量备份恢复表数据之间,表会锁定

缺点:备份时锁表,必然会影响业务,超过10G,耗时会比较长,导致服务不可用

1.mysql提供的二进制日志间接的实现增量备份

二进制文件怎么来?

vim /etc/my.cnfserver-id=1
log-bin=mysql-bin
binlog_formst=MIXED
wq

MySQL二进制日志记录格式有三种:

1、 STATEMNET:基于sql语句。是记录修改的sql语句,在高并发情况下记录sql语句时的顺序可能会出错。数据恢复可能会导致丢失或者误差。效率比较高,但是不适合高并发场景。

2、 ROW:基于行。会精准记录每一行的数据,准确率高但是回复的时效率低。

3、 MIXED:混合模式。既可以根据语句,也可也根据行。在正常情况下使用STATEMNET,一旦发生高并发,会智能的切换到ROW模式,虽然效率低但是一定不会出错。
 

表数据设置多一点select * from info1;
#查看数据是否写入cd /usr/local/mysql/data/
#会生成了两个文件
mysql -bin.index
mysql-bin.000001
表内写入信息后再查看日志文件 mysql-bin.000001
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
#查看新插入表的日志mysqladmin -u root -p flush-logs
#刷新日志.
#此时data目录下会生成一个新的日志文件mysql-bin.000002mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
#刷新之后更新的内容会更新在2里面这就是断点如何恢复:
mysqlbinlog --no-defaults mysql-bin00000.1 | mysql -u root -p
#增量备份,恢复之前表内插入的数据。这个叫断点恢复。此时再对表插入信息。此时新插入的数据再000002里面。只要没有刷新日志就不会出现断点。会先插入再删除。
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002如果需要备份新的数据之前需要再刷新一次。
mysqladmin -u root -p flush-logs
#刷新日志.重新在表内插入数据
此时断点之后数据都在新生成的000003里面
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002mysqladmin -u root -p flush-logs
#刷新日志断点再删除表内数据,这时候删除的操作会保存到000004里面mysqlbinlog --no-defaults --base64-out=decode-rows -v mysql-bin.000003

位置恢复

三种方式:

从某一个点开始恢复到最后

从开头,恢复到某一个位置

从指定点开始------指定的结束点

删除表内数据测试
基于位置点进行恢复:
1、 从某一点开始恢复到最后
格式:
mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p2、 从开头一直恢复到某个位置
格式:
mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p3、 从指定点开始恢复到指定的结束点
格式:
mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql -u root -pmysqladmin -u root -p flush-logs
#刷新日志断点删除表内数据此时数据再000005上mysqlbinlog --no-defaults --start-position='6171' mysql-bin.000004 | mysql -u root -p查看位置点
#at后面的数字就是位置点。要选择commit后面的位置点
mysqlbinlog --no-defaults --base64-out=decode-rows -v mysql-bin.000004
#查看000004日志内的位置点从开头一直恢复到某个位置:
mysqlbinlog --no-defaults --stop-position='6106' mysql-bin.000004 | mysql -u root -p
#从头恢复到指定点范围恢复:
mysqlbinlog --no-defaults --start-position='6106' --stop-position='6748' mysql-bin.000004 | mysql -u root -p
#指定位置到指定位置恢复

基于时间恢复

1.从某个时间点开始:

mysqlbinlog --no-defaults --start-datetime='时间点' 文件 | mysql -u root -p

2.从开头,到指定的结尾时间点

mysqlbinlog --no-defaults --stop-datetime='时间点' 文件 | mysql -u root -p

3.指定时间范围

mysqlbinlog --no-defaults --stop-datetime='时间点' 文件 --stop-datetime='时间点' 文件 |mysql -u root -p

时间格式:2023-11-06 11:44:32

基于时间点恢复:
YYY-MM-DD 11:11:11 时间格式要按照标准格式来写
1、 从某个时间点开始
格式:mysqlbinlog --no-defaults --start-datettime='时间点' 文件名 | mysql -u root -p2、 从开头到指定结尾时间点
格式:mysqlbinlog --no-defaults --stop-datettime='时间点' 文件名 | mysql -u root -p3、 指定时间范围
格式:mysqlbinlog --no-defaults --start-datettime='时间点' --stop-datettime='时间点' 文件名 | mysql -u root -p从某个时间点开始
mysqlbinlog --no-defaults --start-datetime='2023-11-06 11:44:32' mysql-bin.000004 | mysql -u root -p
#从某个时间点开始从开头到指定结尾时间点
mysqlbinlog --no-defaults --stop-datetime='2023-11-06 11:44:32' mysql-bin.000004 | mysql -u root -p
#从头开始到某个时间结束指定时间范围
mysqlbinlog --no-defaults --start-datetime='2023-11-06 11:44:37' --stop-datetime='2023-11-06 11:49:05' mysql-bin.000004 | mysql -u root -p
#从某个时间开始到某个时间结束

日志存放

MySQL 的日志默认保存位置为 /usr/local/mysql/datavim /etc/my.cnf
[mysqld]
##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
log-error=/usr/local/mysql/data/mysql_error.log					#指定日志的保存位置和文件名##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log##二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin				#也可以 log_bin=mysql-bin##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,
以便于优化,默认是关闭的
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5												#设置超过5秒执行的语句被记录,缺省时为10秒

查询同用日志访问情况

mysql -u root -p
show variables like 'general%';									#查看通用查询日志是否开启show variables like 'log_bin%';									#查看二进制日志是否开启show variables like '%slow%';									#查看慢查询日功能是否开启
show variables like 'long_query_time';							#查看慢查询时间设置set global slow_query_log=ON;				#在数据库中设置开启慢查询的方法

总结

在生产中,通过binlog进行增量恢复是非常好用的方法。

我们只需要对binlog文件进行备份,随时可以进行备份和恢复。(只能是root用户来进行操作)

除非有特殊需要一般不打额外断点,具体根据需求来,一般是通过脚本按月来设置断点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/183623.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独立云厂商市场份额第一 | 云轴科技ZStack位居IDC云系统软件市场报告第一梯队

近日&#xff0c;全球IT市场研究和咨询公司IDC发布《中国云系统软件市场跟踪报告2023H1》报告&#xff0c;报告显示2023年上半年中国云系统软件整体市场规模达到24.08亿元&#xff0c;同比增长16.4%。其中&#xff0c;云轴科技ZStack 作为产品化的云基础软件提供商&#xff0c;…

怎么在相册里去水印?三种方法教你去除

当你查看相册时&#xff0c;有时可能会注意到一些照片上有水印&#xff0c;这可能会让人感到不满,不管你是想保存这些照片还是与他人分享&#xff0c;水印往往会影响图片的观赏效果&#xff0c;不过别担心我将向你介绍一些简单的方法&#xff0c;帮助你在相册中轻松去除这些水印…

浅谈前端自定义VectorGrid矢量瓦片样式

目录 前言 一、VectorGrid相关API介绍 1、VectorGrid 2、 LayerStyles样式详解 二、样式自动配置 1、页面定义 2、地图及PBF瓦片引入 3、矢量瓦片样式定义 4、鼠标事件交互 三、最终效果 1、自定义样式展示 2、鼠标交互 总结 前言 在上一篇博客中&#xff0c;详细讲…

6大场景,玩转ChatGPT!

文章目录 一、故事叙述提问举例 二、产品描述提问举例 三、报告撰写提问举例 四、邮件和信件撰写提问举例 五、新间稿和公告撰写提问举例 六、学术论文和专业文章撰写提问举例 本文是在GPT3.5版本下演示的 我们知道AI技术不仅能够自动生成文章和内容&#xff0c;还可以根据我们…

Postman接口测试工具,提高SpringBoot开发效率

文章目录 &#x1f33a;工具—postman⭐作用&#x1f3f3;️‍&#x1f308;安装&#x1f388;创建工作空间 &#x1f384;简单参数⭐原始方式&#x1f388;我们建立springboot项目&#xff0c;输入下面的代码&#x1f388;运行 ⭐SpringBoot方式 &#x1f384;实体参数&#x…

文献阅读:LONGNET: Scaling Transformers to 1,000,000,000 Tokens

文献阅读&#xff1a;LONGNET: Scaling Transformers to 1,000,000,000 Tokens 1. 文章简介2. 方法原理 1. 方法思路2. Dilated Attention 1. 具体原理2. 多头实现3. 复杂度分析 3. 训练方法 3. 实验结果4. 结论 & 思考5. 参考链接 文献链接&#xff1a;https://arxiv.org…

FPGA设计过程中有关数据之间的并串转化

1.原理 并串转化是指的是完成串行传输和并行传输两种传输方式之间的转换的技术&#xff0c;通过移位寄存器可以实现串并转换。 串转并&#xff0c;将数据移位保存在寄存器中&#xff0c;再将寄存器的数值同时输出&#xff1b; 并转串&#xff0c;将数据先进行移位&#xff0…

【微服务】一体化智慧工地管理平台源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面&#xff0c;多维度数…

开源七轴myArm协作机械臂正逆运动学技术讲解

引言&#xff1a; 在本文中&#xff0c;我们将深入探讨机器人学的两个核心概念&#xff1a;正运动学和逆运动学。这两个概念是理解和控制机械臂运动的基础。通过一个具体的7轴机械臂实例&#xff0c;我们将详细介绍如何计算机械臂的正运动学和逆运动学。我们首先会解释正运动学…

集合贴1——人工智能技术

集合一下人工智能技术的文章&#xff1a; 基础课2——自然语言处理-CSDN博客文章浏览阅读412次。自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是计算机科学领域与人工智能领域中的一个重要方向&#xff0c;它研究能实现人与计算机之间用自然语言进…

Splunk 创建特色 dashboard 报表

1: 背景: 对原有的dashboard 进行增加点东西,特别是文字部分: 比如: 增加:“this is a guidline for how to use performance". 这段话,就不能写在title, 那样,这段文字,会出现在dashboard 的PDF 文件的分割线的上面,不符合要求。 2: 解决问题: 正确的做法是…

JavaScript使用正则表达式

正则表达式(RegExp)也称规则表达式(regular expression)&#xff0c;是非常强大的字符串操作工具&#xff0c;语法格式为一组特殊字符构成的匹配模式&#xff0c;用来匹配字符串。ECMAScript 3以Perl为基础规范JavaScript正则表达式&#xff0c;实现Perl 5正则表达式的子集。Ja…

ZYNQ_project:led

本次实验完成&#xff1a;led流水间隔0.5s 闪烁间隔0.25s。 名词解释&#xff1a; analysis分析&#xff1a;对源文件进行全面的语法检查。 synthesis综合&#xff1a;综合的过程是由 FPGA 综合工具箱 HDL 原理图或其他形式源文件进行分析&#xff0c;进而推演出由 FPGA 芯…

Arrays.asList() 和 List.of() 的列表之争

1. 概述 有时在Java中&#xff0c;为了方便&#xff0c;我们需要创建一个小列表或将数组转换为列表。Java 为此提供了一些辅助方法。 在本文中&#xff0c;我们将比较初始化小型临时数组的两种主要方法&#xff1a;List.of()和 Array.asList()。 2. Arrays.asList() Java 自…

Zeus IoT : 基于 SpringBoot 的分布式开源物联网大数据平台

Zeus IoT 是一个集设备数据采集、存储、分析、观测为一体的开源物联网平台&#xff0c;全球首创基于 Zabbix 的物联网分布式数据采集架构&#xff0c;具备超百万级物联网设备的并发监控能力&#xff0c;真正具备工业级性能与稳定性的开源物联网大数据中台。 Zeus IoT 致力于让设…

AI生图王者之战!深度体验实测,谁是真正的艺术家?

10月11日凌晨&#xff0c;设计软件巨头Adobe宣布推出一系列图像生成模型&#xff0c;其中Firefly Image 2作为新一代图像生成器&#xff0c;通过改善皮肤、头发、眼睛、手和身体结构增强了人体渲染质量&#xff0c;提供更好的色彩和改进的动态范围&#xff0c;并为用户提供更大…

【数据结构】单链表之--无头单向非循环链表

前言&#xff1a;前面我们学习了动态顺序表并且模拟了它的实现&#xff0c;今天我们来进一步学习&#xff0c;来学习单链表&#xff01;一起加油各位&#xff0c;后面的路只会越来越难走需要我们一步一个脚印&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

跨境电商年底风控升级,测评养号如何选择稳定且纯净的IP环境?

随着年底跨境电商平台风控的升级&#xff0c;许多测评团队的账号存活率有所下降。对于自养号测评的卖家来说&#xff0c;IP的重要性不言而喻。除了设置参数阻断&#xff0c;IP的质量也直接影响到账户的稳定性和成功率。因此&#xff0c;在年底这个特殊时期&#xff0c;所有测评…

【c++入门】引用详解 | auto的类型推导 | 范围for循环 | nullptr空指针

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️引用☁️引用的概念☁️引用的特性⭐引用在定义时必须初始化 ☁️常引用…

分享Python7个爬虫小案例(附源码)

本次的7个python爬虫小案例涉及到了re正则、xpath、beautiful soup、selenium等知识点&#xff0c;非常适合刚入门python爬虫的小伙伴参考学习。注&#xff1a;若涉及到版权或隐私问题&#xff0c;请及时联系我删除即可。 1.使用正则表达式和文件操作爬取并保存“某吧”某帖子…