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用户来进行操作)
除非有特殊需要一般不打额外断点,具体根据需求来,一般是通过脚本按月来设置断点。
相关文章:

MySQL的备份恢复
数据备份的重要性 1.生产环境中,数据的安全至关重要 任何数据的丢失都会导致非常严重的后果。 2.数据为什么会丢失 :程序操作,运算错误,磁盘故障,不可预期的事件(地震,海啸)&#x…...

【JavaEE】JVM 剖析
JVM 1. JVM 的内存划分2. JVM 类加载机制2.1 类加载的大致流程2.2 双亲委派模型2.3 类加载的时机 3. 垃圾回收机制3.1 为什么会存在垃圾回收机制?3.2 垃圾回收, 到底实在做什么?3.3 垃圾回收的两步骤第一步: 判断对象是否是"垃圾"第二步: 如何回收垃圾 1. JVM 的内…...

算法题:203. 移除链表元素(递归法、设置虚拟头节点法等3种方法)Java实现创建链表与解析链表
1、算法思路 讲一下设置虚拟头节点的那个方法,设置一个新节点指向原来链表的头节点,这样我们就可以通过判断链表的当前节点的后继节点值是不是目标删除值,来判断是否删除这个后继节点了。如果不设置虚拟头节点,则需要将头节点和后…...
ubuntu18.04 多版本opencv配置记录
多版本OpenCV过程记录 环境 ubuntu18.04 python2.7 python3.6 python3.9 opencv 3.2 OpenCV 4.4.0安装 Ubuntu18.04 安装 Opencv4.4.0 及 Contrib (亲测有效) 暂时不清楚Contrib的作用,所以没安装,只安装最基础的 下载opencv4.4.0并解压 opencv下载…...
Spring Security—OAuth 2.0 资源服务器的多租户
一、同时支持JWT和Opaque Token 在某些情况下,你可能需要访问两种令牌。例如,你可能支持一个以上的租户,其中一个租户发出JWT,另一个发出 opaque token。 如果这个决定必须在请求时做出,那么你可以使用 Authenticati…...

VB.NET—窗体引起的乌龙事件
目录 前言: 过程: 总结: 升华: 前言: 分享一个VB.NET遇到的一个问题,开始一直没有解决,这个问题阻碍了很长时间,成功的变成我路上的绊脚石,千方百计的想要绕过去,但事与愿违怎么也绕不过去,因为运行不了…...
批量新增报错PSQLException: PreparedStatement can have at most 65,535 parameters.
报错信息: org.postgresql.util.PSQLException: PreparedStatement can have at most 65,535 parameters. Please consider using arrays, or splitting the query in several ones, or using COPY. Given query has 661,068 parameters ; SQL []; PreparedStatemen…...

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!
很多时候,看一些数据领域的文章,说到为什么做数据仓库、数据仓库要分层,我们经常会看到一些结论:因为有ABCD…等等理由,比如降低开发成本、减少重复计算等等好处 然后,多数人就记住了ABCD。但是࿰…...

【Linux】基础IO之文件操作(文件fd)——针对被打开的文件
系列文章目录 文章目录 系列文章目录前言浅谈文件的共识 一、 回忆c语言对文件操作的接口1.fopen接口和cwd路径2.fwrite接口和"w","a"方法3.fprintf接口和三个默认打开的输入输出流(文件) 二、过渡到系统,认识…...
什么是超算数据中心
超算数据中心是基于超级计算机或者是大规模的计算集群的数据中心,它具备高性能、高可靠性、高可用性和高扩展性这些特点,能够提供大规模计算、存储和网络服务的功能,在人工智能、科学计算、数据分析等等领域应用比较广泛。 超算数据中心有以下…...

阿里云服务器省钱购买和使用方法(图文详解)
阿里云服务器使用教程包括云服务器购买、云服务器配置选择、云服务器开通端口号、搭建网站所需Web环境、安装网站程序、域名解析到云服务器公网IP地址,最后网站上线全流程,新手站长xinshouzhanzhang.com分享阿里云服务器详细使用教程: 一&am…...

Apache Flink 1.12.0 on Yarn(3.1.1) 所遇到的問題
Apache Flink 1.12.0 on Yarn(3.1.1) 所遇到的問題 新搭建的FLINK集群出现的问题汇总 1.新搭建的Flink集群和Hadoop集群无法正常启动Flink任务 查看这个提交任务的日志无法发现有用的错误信息。 进一步查看yarn日志: 发现只有JobManager的错误日志出现了如下的…...

pandas - 数据分组统计
1.分组统计groupby()函数 对数据进行分组统计,主要适用DataFrame对象的groupby()函数。其功能如下。 (1)根据特定条件,将数据拆分成组 (2)每个组都可以独立应用函数(如求和函数sum()࿰…...

Git简介和安装
一,Git简介 Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种: 本地仓库:开发人员自己电脑上的 Git 仓库 远程仓库:远程…...

思维模型 布里丹毛驴效应
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。犹豫不决是病,得治~ 1 布里丹毛驴效应的应用 1.1 犹豫不决的产品“施乐 914” 20 世纪 60 年代,美国一家名为施乐(Xerox)的公司…...

预处理、编译、汇编、链接
1.预处理 宏替换去注释引入头文件 #之后的语句都是预处理语句, #include<iostream> 将该文件的内容拷贝到现有文件中, 2.编译 3.汇编 4.链接 gcc 基于C/C的编译器 补充说明 gcc命令 使用GNU推出的基于C/C的编译器,是开放源代…...
面试问题?
1.面向对象的特征? 2.开放闭合 3.java中的泛型可以用基本类型吗? 4.重载和重写的区别? 5.string、stringbuffer、stringbuilder? 6.单例模式的实现方式有哪几种? 7.volicate除了保证 8.sy是重量级锁还是轻量级锁ÿ…...
pytorch 笔记:PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE
1 PACK_PADDED_SEQUENCE 1.0 功能 将填充的序列打包成一个更加紧凑的形式这样RNN、LSTM和GRU等模型可以更高效地处理它们,因为它们可以跳过不必要的计算 1.2 基本使用方法 torch.nn.utils.rnn.pack_padded_sequence(input, lengths, batch_firstFalse, enforce_…...

Ubuntu 创建用户
在ubuntu系统中创建用户,是最基本的操作。与centos7相比,有较大不同。 我们通过案例介绍,讨论用户的创建。 我们知道,在linux中,有三类用户:超级管理员 root 具有完全权限;系统用户 bin sys a…...
华为政企路由器产品集
产品类型产品型号产品说明 maintainProductA821 E_2*10GE/GE/FE(o)8*GE/FE(o)8*GE/FE(e),1*交流电源华为企业云端NetEngine A800 E综合业务一体化接入路由器是华为公司面向云时代推出的一款产品,用于企业快速接入网络,具备易部署、易运维、高性能、高…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...